Name: series-workflow8jk6w Phase: Succeeded StartedAt: 2026-08-27 05:57:38 +0000 UTC FinishedAt: 2026-08-27 10:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[0] Phase: Succeeded StartedAt: 2026-08-27 05:57:38 +0000 UTC FinishedAt: 2026-08-27 06:42:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 05:57:38 +0000 UTC FinishedAt: 2026-08-27 06:42:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "f36cc8b8-ec6a-4927-b423-d924acba76e2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_sta_rx_queued_frame", "ieee80211_mgd_auth", "ieee80211_mgd_assoc", "rate_control_rate_init", "rate_control_rate_init_all_links" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hdXRoJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ2RfYXNzb2MmIzM0OywKICAgICYjMzQ7cmF0ZV9jb250cm9sX3JhdGVfaW5pdCYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc29tZSByYXRlIGZsYWdzIChgc3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzYCBhbmQgYHN0YS1cdTAwM2VkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZWApIGZvciBTMUcgc3RhdGlvbnMuIFRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgICh2aWEgYF9fc3RhX2luZm9fYWxsb2NgKSwgbWVhbmluZyBhbGwgaXRzIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBSZW1vdmluZyB0aGlzIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG1lcmVseSBsZWF2ZXMgdGhlc2UgZmllbGRzIGFzIHplcm8sIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgY2hhbmdlIHdvdWxkIGJlIGZ1bmN0aW9uYWwgYnVncyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHRoYXQgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmQ0NTA1NmFlZWU2Mzc2Y2M1N2FhYWEwMzRiNmI2ZDEzMDQ4M2M4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjM5OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDU3NjFlOTYyMTQ5MTQuLmQwNmNiOGU3ZGZiMzMgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0yMzg4LDcgJiM0MzsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZV9vcGVyYXRpb24gKmhlX29wX2llX2VsZW0pO1xuIFxuIC8qIFMxRyAqL1xuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi40N2VjNzAzZjEwOTQ5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTYzNDcsNyAmIzQzOzYzNDcsNiBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2NfY29uZmlnX2xpbmsoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbi1cdFx0XHRcdFx0c3RydWN0IHN0YV9pbmZvICpzdGEsXG4gXHRcdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcbiBcdFx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcylcbiB7XG5AQCAtNjM2MiwxMSAmIzQzOzYzNjEsOSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4gXHRtZW1jcHkobGlua19zdGEtXHUwMDNlYWRkciwgY2Jzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFx0bWVtY3B5KGxpbmtfc3RhLVx1MDAzZXB1Yi1cdTAwM2VhZGRyLCBjYnNzLVx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XG4gXG4tXHQvKiBUT0RPOiBTMUcgQmFzaWMgUmF0ZSBTZXQgaXMgZXhwcmVzc2VkIGVsc2V3aGVyZSAqL1xuLVx0aWYgKGNic3MtXHUwMDNlY2hhbm5lbC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikge1xuLVx0XHRpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTtcbiYjNDM7XHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXG4mIzQzO1x0aWYgKGNic3MtXHUwMDNlY2hhbm5lbC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWilcbiBcdFx0cmV0dXJuIDA7XG4tXHR9XG4gXG4gXHRzYmFuZCA9IGxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZWJhbmRzW2Nic3MtXHUwMDNlY2hhbm5lbC1cdTAwM2ViYW5kXTtcbiBcbkBAIC03MTA3LDcgJiM0Mzs3MTA0LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSxcbiYjNDM7XHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0ICAgYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuQEAgLTk2OTksOCAmIzQzOzk2OTYsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4gXG4tXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbmV3X3N0YSxcbi1cdFx0XHRcdFx0XHQgICBsaW5rX3N0YSwgY2Jzcyk7XG4mIzQzO1x0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLCBjYnNzKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIG5ld19zdGEpO1xuQEAgLTExMDkwLDcgJiM0MzsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLFxuJiM0MztcdFx0aWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0IGFkZF9saW5rc19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcbiBcdFx0XHRnb3RvIGRpc2Nvbm5lY3Q7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcbmluZGV4IDY0NzY4YWJiMGE1ZjIuLmJjYzZjNDE2NzM5NTAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvcmF0ZS5jXG5AQCAtNTcsNyAmIzQzOzU3LDYgQEAgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcbiBcbiBcdC8qIFRPRE86IGNoZWNrIGZvciBtaW5zdHJlbF9zMWcgPyAqL1xuIFx0aWYgKHNiYW5kLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7XG4tXHRcdGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zMWcuYyBiL25ldC9tYWM4MDIxMS9zMWcuY1xuaW5kZXggODI1ZmNmM2Y5MDliZS4uN2Y4OTc1NTJjNjg2ZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zMWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3MxZy5jXG5AQCAtOSwxNCAmIzQzOzksNiBAQFxuICNpbmNsdWRlIFwmIzM0O2llZWU4MDIxMV9pLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtkcml2ZXItb3BzLmhcJiMzNDtcbiBcbi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi17XG4tXHQvKiBhdm9pZCBpbmRpY2F0aW5nIGxlZ2FjeSBiaXRyYXRlcyBmb3IgUzFHIFNUQXMgKi9cbi1cdHN0YS1cdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfUzFHX01DUztcbi1cdHN0YS1cdTAwM2VkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZSA9XG4tXHRcdFx0U1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKTtcbi19XG4tXG4gYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItXHUwMDNlZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbWdkX2F1dGgmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hc3NvYyYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0JiMzNDssCiAgICAmIzM0O3JhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgc2V0IHNwZWNpZmljIGZsYWdzIGZvciBTMUcgU1RBcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgbWFjODAyMTFfaHdzaW0uIFRoZSBjaGFuZ2VzIGFmZmVjdCBzdGF0aW9uIGxpbmsgc2V0dXAgYW5kIHJhdGUgY29udHJvbCBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkNDUwNTZhZWVlNjM3NmNjNTdhYWFhMDM0YjZiNmQxMzA0ODNjOGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjozOTo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggNTc2MWU5NjIxNDkxNC4uZDA2Y2I4ZTdkZmIzMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTIzODgsNyAmIzQzOzIzODgsNiBAQCBpZWVlODAyMTFfaGVfb3BfaWVfdG9fYnNzX2NvbmYoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGVfb3BlcmF0aW9uICpoZV9vcF9pZV9lbGVtKTsKIAogLyogUzFHICovCi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpZWVlODAyMTFfczFnX3J4X3R3dF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uNDdlYzcwM2YxMDk0OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC02MzQ3LDcgJiM0Mzs2MzQ3LDYgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLAogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCi0JCQkJCXN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsCiAJCQkJCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3MpCiB7CkBAIC02MzYyLDExICYjNDM7NjM2MSw5IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaywKIAltZW1jcHkobGlua19zdGEtJmd0O2FkZHIsIGNic3MtJmd0O2Jzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KGxpbmtfc3RhLSZndDtwdWItJmd0O2FkZHIsIGNic3MtJmd0O2Jzc2lkLCBFVEhfQUxFTik7CiAKLQkvKiBUT0RPOiBTMUcgQmFzaWMgUmF0ZSBTZXQgaXMgZXhwcmVzc2VkIGVsc2V3aGVyZSAqLwotCWlmIChjYnNzLSZndDtjaGFubmVsLSZndDtiYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikgewotCQlpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTsKJiM0MzsJLyogUzFHIGRvZXMgbm90IHVzZSBiYXNpYyByYXRlcyAqLwomIzQzOwlpZiAoY2Jzcy0mZ3Q7Y2hhbm5lbC0mZ3Q7YmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopCiAJCXJldHVybiAwOwotCX0KIAogCXNiYW5kID0gbG9jYWwtJmd0O2h3LndpcGh5LSZndDtiYW5kc1tjYnNzLSZndDtjaGFubmVsLSZndDtiYW5kXTsKIApAQCAtNzEwNyw3ICYjNDM7NzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJfQogCQl9CiAKLQkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLAomIzQzOwkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwKIAkJCQkJCSAgIGFzc29jX2RhdGEtJmd0O2xpbmtbbGlua19pZF0uYnNzKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2VycjsKQEAgLTk2OTksOCAmIzQzOzk2OTYsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KIAotCQllcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIG5ld19zdGEsCi0JCQkJCQkgICBsaW5rX3N0YSwgY2Jzcyk7CiYjNDM7CQllcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLCBjYnNzKTsKIAkJaWYgKGVycikgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlzdGFfaW5mb19mcmVlKGxvY2FsLCBuZXdfc3RhKTsKQEAgLTExMDkwLDcgJiM0MzsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJZ290byBkaXNjb25uZWN0OwogCQl9CiAKLQkJaWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSwKJiM0MzsJCWlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLAogCQkJCQkJIGFkZF9saW5rc19kYXRhLSZndDtsaW5rW2xpbmtfaWRdLmJzcykpCiAJCQlnb3RvIGRpc2Nvbm5lY3Q7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmMgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCmluZGV4IDY0NzY4YWJiMGE1ZjIuLmJjYzZjNDE2NzM5NTAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3JhdGUuYwpAQCAtNTcsNyAmIzQzOzU3LDYgQEAgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSkKIAogCS8qIFRPRE86IGNoZWNrIGZvciBtaW5zdHJlbF9zMWcgPyAqLwogCWlmIChzYmFuZC0mZ3Q7YmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHsKLQkJaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3MxZy5jIGIvbmV0L21hYzgwMjExL3MxZy5jCmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zMWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvczFnLmMKQEAgLTksMTQgJiM0Mzs5LDYgQEAKICNpbmNsdWRlICYjMzQ7aWVlZTgwMjExX2kuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2RyaXZlci1vcHMuaCYjMzQ7CiAKLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCS8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqLwotCXN0YS0mZ3Q7ZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1MxR19NQ1M7Ci0Jc3RhLSZndDtkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZSA9Ci0JCQlTVEFfU1RBVFNfRklFTEQoVFlQRSwgU1RBX1NUQVRTX1JBVEVfVFlQRV9TMUcpOwotfQotCiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0mZ3Q7ZGF0YTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uOiBTMUcgU1RBIFJhdGUgSW5pdGlhbGl6YXRpb24gUmVtb3ZhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIGBtYWM4MDIxMWAgZmlsZXM6IGBtbG1lLmNgLCBgcmF0ZS5jYCwgYHMxZy5jYCwgYW5kIGBpZWVlODAyMTFfaS5oYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmdW5jdGlvbiBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDt3aHk/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8mIzM0OwoKVGhlIGRlc2NyaXB0aW9uIHN0YXRlcyB0aGlzIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGZsYWdzIHNwZWNpZmljIHRvIFMxRyBTVEFzLiBTbywgaXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBidWcgZml4PyBXaGF0IHdlcmUgdGhvc2UgZmxhZ3MgYW5kIHdoeSBhcmUgdGhleSBubyBsb25nZXIgbmVlZGVkPyBJIG5lZWQgbW9yZSBkZXRhaWwgaGVyZSwgYnV0IEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIGNvbnNpZGVyaW5nIGlzLCBob3cgY2FuIEkgZXZhbHVhdGUgdGhpcyBwcm9wZXJseT8gQ2FuIEkgZXZlbiByZXByb2R1Y2UgdGhlIHNjZW5hcmlvPyBXZWxsLCBzaW5jZSB0aGlzIGlzIGluIGBtYWM4MDIxMWAsIHdoaWNoIGlzIHRoZSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtLCBJIGNhbiB1c2UgYSBgbWFjODAyMTFfaHdzaW1gIGVudmlyb25tZW50LiBUaGF0IG1lYW5zLCB5ZXMsIEkgY2FuIGFic29sdXRlbHkgcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBhIGJpZyByZWxpZWYuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciB3aGF0IGlzIG5lZWRlZCB0byByZXByb2R1Y2UgdGhlIGlzc3VlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBJIHRoaW5rIGlzIG5lZWRlZC4gSSBrbm93IEkgbmVlZCBgQ09ORklHX01BQzgwMjExYCBlbmFibGVkLCBidXQgSSBzaG91bGQgbG9vayBmb3Igb3RoZXJzIGZvciBgczFnYCBjb25maWd1cmF0aW9uLgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MDQKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YWAgaW4gYG5ldC9tYWM4MDIxMS9tbG1lLmNgLiBSaWdodCwgdGhhdCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHdlIHNldCB1cCB0aGUgc3RhdGlvbiBsaW5rIGZvciBtYW5hZ2VkIG1vZGUsIGlzbiYjMzk7dCBpdD8gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWxsIGFib3V0LiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIHRoZSBzcGVjaWZpYyByZXNwb25zaWJpbGl0aWVzIG9mIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCB3aXRoaW4gdGhlIGxhcmdlciBNQUM4MDIxMSBjb250ZXh0LiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhhY3Qgcm9sZSBpbiB0aGUgbGluayBlc3RhYmxpc2htZW50IHByb2Nlc3MsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIE1MTUUgYW5kIHBvdGVudGlhbGx5IG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQgdGhlIGludGVuZGVkIGltcGFjdCBpcywgY29uc2lkZXJpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21sbWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTU4NTQ9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtNjM0OC1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6NjM0OTpzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG5uZXQvbWFjODAyMTEvbWxtZS5jLTYzNTAtXHRcdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTY5NzY9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy03MTA2LVxubmV0L21hYzgwMjExL21sbWUuYzo3MTA3Olx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLFxubmV0L21hYzgwMjExL21sbWUuYy03MTA4LVx0XHRcdFx0XHRcdCAgIGFzc29jX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9OTU5Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05Njk4LVxubmV0L21hYzgwMjExL21sbWUuYzo5Njk5Olx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLCBjYnNzKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTcwMC1cdFx0aWYgKGVycikge1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTA5MTg9aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0xMTA4OC1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTEwODk6XHRcdGlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLFxubmV0L21hYzgwMjExL21sbWUuYy0xMTA5MC1cdFx0XHRcdFx0XHQgYWRkX2xpbmtzX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIHN0dWZmIGluIGBtYWM4MDIxMWAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZ2V0dGluZyByaWQgb2YgdGhlIGBzdGFgIHBhcmFtZXRlciBmcm9tIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBhbmQgYWxzbyByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmcm9tIGBuZXQvbWFjODAyMTEvczFnLmNgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHJlbGF0aXZlbHkgbWlub3Igb25lLCBidXQgaXQgZG9lcyByZW1vdmUgdGhlIHNldHRpbmcgb2YgYElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTYCBhbmQgYFNUQV9TVEFUU19GSUVMRChUWVBFLCBTVEFfU1RBVFNfUkFURV9UWVBFX1MxRylgIGZsYWdzIGZvciBTMUcgU1RBcy4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggYSBkZWVwZXIgZGl2ZSwgZXNwZWNpYWxseSBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBJdCYjMzk7cyB0b3VjaGluZyBgbWFjODAyMTFgLCBhbmQgd2Uga25vdyBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgZGVjZW50IHRlc3Rpbmcgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIGdvb2QgZm9jdXMgc3ltYm9scyB0byBjaGVjayBhcm91bmQgdGhpcyBjaGFuZ2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdGhlIHBhcnRzIGJlaW5nIGNoYW5nZWQgb3IgcmVsYXRlZCB0byB0aGUgcmVsYXRlZCBjb25jZXB0cywgbGlrZSBhc3NvY2lhdGlvbiwgcmF0ZSBjb250cm9sIG9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjbG9zZSBieS4KCkhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBpZGVudGlmaWVkOgoKKiAgIGBpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc2AKKiAgIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYAoqICAgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYAoqICAgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgCgpOb3cgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXNlIHN5bWJvbHMgYXJlIHN0YXRpYywgYXMgc3RhdGljIHN5bWJvbHMgY2FuIGJlIGEgZ29vZCBjbHVlIHRvIGFuIGlzb2xhdGVkIGFyZWEgdGhhdCBjb3VsZCBiZSB0YXJnZXRlZC4gSSYjMzk7dmUgZm91bmQgYGllZWU4MDIxMV9hc3NvY19zdWNjZXNzYCBhbmQgYGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb25gIGFyZSBzdGF0aWMsIHdoaWxlIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhcmUgbm90LiBHb29kLCB0aGlzIGdpdmVzIG1lIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTEwOTE3PXN0YXRpYyB2b2lkXG5uZXQvbWFjODAyMTEvbWxtZS5jOjEwOTE4OmllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21sbWUuYy0xMDkxOS1cdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz0xMTgwOD12b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE5NDUtXHRcdFx0Y2FzZSBXTEFOX1BST1RFQ1RFRF9FSFRfQUNUSU9OX0xJTktfUkVDT05GSUdfUkVTUDpcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE5NDY6XHRcdFx0XHRpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcChzZGF0YSwgbWdtdCxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE5NDctXHRcdFx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBsYXJnZXIgODAyLjExIGZyYW1ld29yay4gVGhlIGltcGxpY2F0aW9ucyBvZiAmIzM0O3N0YXRpYyYjMzQ7IGFyZSBpbXBvcnRhbnQgaGVyZTsgaXQgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQmIzM5O3MgYSBnb29kIGRlc2lnbiBjaG9pY2UsIGdpdmVuIGl0cyByb2xlIGluIGhhbmRsaW5nIHJlY29uZmlndXJhdGlvbnMuIElzIGl0IGVmZmVjdGl2ZWx5IGVuY2Fwc3VsYXRlZCwgb3IgaXMgaXQgYSBzaWduIG9mIHBvdGVudGlhbCBjb2RlIHNtZWxsIGRvd24gdGhlIGxpbmU/CgpOZXh0LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGNvbnNpZGVyIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YC4gVGhpcyBpcyBjcnVjaWFsLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJhdGUgY29udHJvbCwgd2hpY2ggaXMgYSBmYWlybHkgY29tcGxleCBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBjYW4gdmFyeSBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB0aGUgZGVzaWduIGFuZCBoYXJkd2FyZSwgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC4gV2hhdCBhcmUgdGhlIGlucHV0cyB0byB0aGlzIGZ1bmN0aW9uPyBJcyBpdCBoYW5kbGluZyB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyBvZiB0aGUgbGluaywgb3IgaXMgdGhlcmUgYSBnZW5lcmFsIHJhdGUgdGFibGUgb3IgYSBzcGVjaWZpYyByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHRoYXQmIzM5O3MgYmVpbmcgc2V0IHVwPyBMZXQmIzM5O3MgdHJhY2UgaG93IHRoZSBkYXRhIGlzIGJlaW5nIHBhc3NlZCBhcm91bmQsIGhvdyB0aGUgcmF0ZSB0YWJsZXMgYXJlIGJlaW5nIGJ1aWx0LCBvciB3aGV0aGVyIGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXNpZ24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWF0aW9uIHByb2Nlc3MgaXMgY3JpdGljYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBlbnN1cmluZyBzZWFtbGVzcyBhZGFwdGF0aW9uIHRvIGNoYW5naW5nIGNoYW5uZWwgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJhdGUgY29udHJvbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhdGVfY29udHJvbF9yYXRlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz0yMTMwPXN0YXRpYyBpbnQgc3RhX2FwcGx5X2F1dGhfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIxNTItXHRcdGlmICghdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX1JBVEVfQ09OVFJPTCkpXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1MzpcdFx0XHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdGEpO1xubmV0L21hYzgwMjExL2NmZy5jLTIxNTQtXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI2MzQ9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjcwMC1cdCAgICB0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpKVxubmV0L21hYzgwMjExL2NmZy5jOjI3MDE6XHRcdHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0YSk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjcwMi1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTgxOT1pZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01ODUyLVx0XHRsaW5rX3N0YSA9IHNkYXRhX2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3BhcmFtcy1cdTAwM2VsaW5rX2lkXSwgc2RhdGEpO1xubmV0L21hYzgwMjExL2NmZy5jOjU4NTM6XHRcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xubmV0L21hYzgwMjExL2NmZy5jLTU4NTQtXHR9XG4tLVxubmV0L21hYzgwMjExL2lic3MuYz01Mzg9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTU1Ny1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6NTU4Olx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcdTAwMjZzdGEtXHUwMDNlZGVmbGluayk7XG5uZXQvbWFjODAyMTEvaWJzcy5jLTU1OS1cbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTkyNj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdXBkYXRlX3N0YV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTAzNC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmsuY29uZi1cdTAwM2VjaGFucmVxLm9wZXIpO1xubmV0L21hYzgwMjExL2lic3MuYzoxMDM1Olx0XHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKTtcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTAzNi1cdFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5yeF9uc3MgIT0gcnhfbnNzKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM9NDIzPXN0YXRpYyB2b2lkIG1lc2hfc3RhX2luZm9faW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTQ4Ny1cdGlmICghdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX1JBVEVfQ09OVFJPTCkpXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjQ4ODpcdFx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcdTAwMjZzdGEtXHUwMDNlZGVmbGluayk7XG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTQ4OS1cdGVsc2Vcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTY5NzY9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy03MTMzLVxubmV0L21hYzgwMjExL21sbWUuYzo3MTM0Olx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3Moc3RhKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEzNS1cbi0tXG5uZXQvbWFjODAyMTEvb2NiLmM9ODc9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX29jYl9maW5pc2hfc3RhKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDQtXG5uZXQvbWFjODAyMTEvb2NiLmM6MTA1Olx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcdTAwMjZzdGEtXHUwMDNlZGVmbGluayk7XG5uZXQvbWFjODAyMTEvb2NiLmMtMTA2LVxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM9Mjg9TU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmMtMzAtXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjMxOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMyLXtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTcxLVxubmV0L21hYzgwMjExL3JhdGUuYzo3Mjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxubmV0L21hYzgwMjExL3JhdGUuYy03My17XG4tLVxubmV0L21hYzgwMjExL3JhdGUuYy04Mi1cbm5ldC9tYWM4MDIxMS9yYXRlLmM6ODM6XHRcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xubmV0L21hYzgwMjExL3JhdGUuYy04NC1cdH1cbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oPTI5PXZvaWQgcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTMxLVxubmV0L21hYzgwMjExL3JhdGUuaDozMjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKTtcbm5ldC9tYWM4MDIxMS9yYXRlLmg6MzM6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XG5uZXQvbWFjODAyMTEvcmF0ZS5oLTM0LXZvaWQgcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmF0ZSBDb250cm9sIEluaXRpYWxpemF0aW9uIGluIHRoZSBtYWM4MDIxMSBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHJhdGUgY29udHJvbCBpcyBpbml0aWFsaXplZCBpbiB0aGlzIG1hYzgwMjExIGNvZGUsIGFuZCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gRmlyc3Qgb2ZmLCBJJiMzOTttIG5vdGljaW5nIHRoYXQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNhbWUgZ29lcyBmb3IgYHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzYCBhbmQgYGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIGFsbCBsaW5rZWQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgd2FzIGdvaW5nIHRvIGNoZWNrIGBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cGAgaW4gYG5ldC9tYWM4MDIxMS9zMWcuY2AsIGJ1dCB3YWl0Li4uIHRoaXMgcGF0Y2ggcmVtb3ZlZCBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLiBSaWdodCwgdGhlIGNhbGxzIHdlcmUgaW4gYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAuIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyBzdGF0aWMgYnV0IGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBpcyBub3QuIFRoaXMgbWFrZXMgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdD8gT2theSwgYGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uYCBjYWxscyBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgaWVlZTgwMjExX2FkZF9zdGF0aW9uYCBjYWxscyBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSSBzZWUgdGhhdCBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgLCBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAsIGFuZCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgIGFyZSBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IG5vdCBhcyBpbXBvcnRhbnQgdG8gbG9vayBhdCByaWdodCBub3cuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgY2hlY2sgdGhhdCBgaWVlZTgwMjExX2FkZF9zdGF0aW9uYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9hZGRfc3RhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTI0NTA9c3RhdGljIGludCBzdGFfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjYzMy1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyNjM0OnN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjYzNS1cdFx0XHRcdCBjb25zdCB1OCAqbWFjLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5MC1cdC5zdG9wX2FwID0gaWVlZTgwMjExX3N0b3BfYXAsXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5MTpcdC5hZGRfc3RhdGlvbiA9IGllZWU4MDIxMV9hZGRfc3RhdGlvbixcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTkyLVx0LmRlbF9zdGF0aW9uID0gaWVlZTgwMjExX2RlbF9zdGF0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqU3RhdGljIHZzLiBOb24tU3RhdGljIFN0YXRpb24gQWRkaXRpb24qKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHdpcmVsZXNzIGRyaXZlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggYWRkaW5nIHN0YXRpb25zLiBUaGUgZmFjdCB0aGF0IGBpZWVlODAyMTFfYWRkX3N0YXRpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGF0IG1lYW5zIGl0IGhhcyBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB1c3VhbGx5IGluZGljYXRpbmcgaXQmIzM5O3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgbG9naWMuIEl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZXh0ZXJuYWxseS4gSXQgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBsb3ctbGV2ZWwgYXBwcm9hY2ggdG8gc3RhdGlvbiBhZGRpdGlvbi4gSSYjMzk7ZCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBleGFjdCByb2xlLCBidXQgdGhlIGBzdGF0aWNgIGtleXdvcmQgcG9pbnRzIHRvIHRoYXQgaW50ZXJuYWwgZm9jdXMuCgpUaGVuLCB0aGVyZSYjMzk7cyBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gLCB3aGljaCAqaXNuJiMzOTt0KiBgc3RhdGljYC4gVGhhdCYjMzk7cyB0aGUga2V5IGRpZmZlcmVuY2UuIFRoaXMgdGVsbHMgbWUgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBwcm9iYWJseSBwYXJ0IG9mIHRoZSBkcml2ZXImIzM5O3MgcHVibGljIEFQSSBvciBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UuIEl0cyBub24tYHN0YXRpY2Agc3RhdHVzIGltcGxpZXMgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IG90aGVyIG1vZHVsZXMgb3IgcGFydHMgb2YgdGhlIHN5c3RlbSwgcG90ZW50aWFsbHkgZXZlbiBieSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBvciBvdGhlciBkcml2ZXJzLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIG1vcmUgY29tcGxleCwgaGlnaGVyLWxldmVsIGFzcGVjdHMgb2Ygc3RhdGlvbiBhZGRpdGlvbiwgcGVyaGFwcyBtYW5hZ2luZyBsaW5rLXNwZWNpZmljIGRhdGEgb3IgaW50ZXJhY3Rpbmcgd2l0aCBuZXR3b3JrIG1hbmFnZW1lbnQgZnJhbWV3b3Jrcy4gVGhlICYjMzk7bGluayYjMzk7IGluIGl0cyBuYW1lIGlzIGFub3RoZXIgaW1wb3J0YW50IGNsdWUg4oCTIGl04oCZcyBwcm9iYWJseSBmb2N1c2VkIG9uIGFkZGluZyBzdGF0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIGxpbmtzIG9yIGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QgYW5kIHdoYXQgc3BlY2lmaWMgc2NlbmFyaW9zIGVhY2ggaGFuZGxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01ODE4PXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxMS9jZmcuYzo1ODE5OmllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTgyMC1cdFx0XHQgICBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTYwODMtXHQuZGVsX2ludGZfbGluayA9IGllZWU4MDIxMV9kZWxfaW50Zl9saW5rLFxubmV0L21hYzgwMjExL2NmZy5jOjYwODQ6XHQuYWRkX2xpbmtfc3RhdGlvbiA9IGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uLFxubmV0L21hYzgwMjExL2NmZy5jLTYwODUtXHQubW9kX2xpbmtfc3RhdGlvbiA9IGllZWU4MDIxMV9tb2RfbGlua19zdGF0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gRnVuY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBteSBmaXJzdCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBpZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBuYXJyb3dpbmcgZG93biB0aGUgc2NvcGUuIEkgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7V2hlcmUgZG9lcyB0aGUgc3RhdGlvbiBsaW5rIGluZm9ybWF0aW9uIGdldCBpbml0aWFsaXplZD8mIzM0OyBUaGlzIGxlYWRzIG1lIHRvIGZvY3VzIG9uIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzYCBhcyBwcm9taXNpbmcgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaG9zZSBzZWVtIGxpa2UgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIG1hbmFnaW5nIHRoZSByYXRlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBkdXJpbmcgbGluayBzZXR1cCwgd2hpY2ggaXMgbXkgbWFpbiBpbnRlcmVzdC4KCk5vdywgSSYjMzk7bSBwaXZvdGluZyB0byBjb25zaWRlciBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgLiBJIHNlZSB0aGF0ICppdCogaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgcGlxdWVzIG15IGN1cmlvc2l0eS4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCBpbXBsaWVzIHRoYXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpcyB0aGF0ICphY3R1YWxseSogdGhlIGNhc2U/IFRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICoqaXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgPyoqIEZpbmRpbmcgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLCBpZiBvbmUgZXhpc3RzLCBjb3VsZCBsZWFkIG1lIHRvIGEgdmFsdWFibGUgcG9pbnQgb2YgaW50ZWdyYXRpb24uIElmIG5vdCwgdGhlbiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgYXMgdGhleSByZWxhdGUuIE15IG5leHQgc3RlcHMgaGluZ2Ugb24gYW5zd2VyaW5nIHRoaXMgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9hc3NvY19zdWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTY4OTE9aWVlZTgwMjExX3BhcnNlX2Fkdl90Mmwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy02OTc1LVxubmV0L21hYzgwMjExL21sbWUuYzo2OTc2OnN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21sbWUuYy02OTc3LVx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTcxODc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTczNTktXG5uZXQvbWFjODAyMTEvbWxtZS5jOjczNjA6XHRcdGlmICghaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc2RhdGEsIG1nbXQsIGVsZW1zLFxubmV0L21hYzgwMjExL21sbWUuYy03MzYxLVx0XHRcdFx0XHQgICAgIGVsZW1fc3RhcnQsIGVsZW1fbGVuKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3BgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSwgZnJvbSBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBhbmQgdGhlIGNvbnRleHQgaXQmIzM5O3MgdXNlZCBpbiwgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpzdGF0aWMqLiBUaGF04oCZcyB0aGUga2V5IG9ic2VydmF0aW9uIGhlcmUuIEl0JiMzOTtzIG5vdCBleHRlcm5hbGx5IHZpc2libGUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgcGFydCBvZiBhbnkgcHVibGljIEFQSSwgbm9yIGlzIGl0IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMsIGJ1dCBpcyBvbmx5IHVzZWQgbG9jYWxseSB3aXRoaW4gdGhpcyBtb2R1bGUuIFRoaXMgaW1wYWN0cyBob3cgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIDgwMi4xMSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byByZWFzb24gYWJvdXQgaXQgaW4gaXNvbGF0aW9uLCBrbm93aW5nIEkgaGF2ZSBhIGxpbWl0ZWQgc2NvcGUgb2YgaW50ZXJhY3Rpb24gdG8gY29uc2lkZXIuIFRoaXMgYWxzbyBtZWFucyBhbnkgcmVmYWN0b3Jpbmcgd291bGQgcHJvYmFibHkgb25seSByZXF1aXJlIGNoYW5nZXMgd2l0aGluIHRoZSBleGlzdGluZyBtb2R1bGUuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwbHVzIGZvciBtYWludGFpbmFiaWxpdHkhIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvICp3aGF0KiB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxODYtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxODc6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzE4OC1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTExODA4PXZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0xMTg1NS1cdGNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDpcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE4NTY6XHRcdGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi1cdTAwM2VsZW4pO1xubmV0L21hYzgwMjExL21sbWUuYy0xMTg1Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBGcmFtZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lYCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyAqbm90KiBzdGF0aWMuIEFscmlnaHQsIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIHRoZSBsYXJnZXIgY29udGV4dC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBwaXZvdCBhbmQgZG91YmxlIGNoZWNrIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYC4gSSBiZXQgdGhlcmUmIzM5O3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgd2F5IHRoZSBjb25uZWN0aW9uIGlzIHByZXBwZWQgYW5kIHRoaXMgcXVldWVkIGZyYW1lIGhhbmRsZXIuIE1ha2VzIHNlbnNlIHRvIGxvb2sgYXQgdGhhdCBuZXh0LiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05NTkyLVxubmV0L21hYzgwMjExL21sbWUuYzo5NTkzOnN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTU5NC1cdFx0XHRcdCAgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcywgczggbGlua19pZCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk4OTQ9aW50IGllZWU4MDIxMV9tZ2RfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk5ODUtXHQgKiByZW1vdmFsIGFuZCByZS1hZGRpdGlvbiBvZiB0aGUgU1RBIGVudHJ5IGluXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk5ODY6XHQgKiBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKCkuXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk5ODctXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTEwMDYxLVxubmV0L21hYzgwMjExL21sbWUuYzoxMDA2MjpcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIHJlcS1cdTAwM2Vic3MsIHJlcS1cdTAwM2VsaW5rX2lkLFxubmV0L21hYzgwMjExL21sbWUuYy0xMDA2My1cdFx0XHRcdFx0cmVxLVx1MDAzZWFwX21sZF9hZGRyLCBjb250X2F1dGgsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz0xMDMxNz1pbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTEwNjY4LVxubmV0L21hYzgwMjExL21sbWUuYzoxMDY2OTpcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIGNic3MsIHJlcS1cdTAwM2VsaW5rX2lkLFxubmV0L21hYzgwMjExL21sbWUuYy0xMDY3MC1cdFx0XHRcdFx0cmVxLVx1MDAzZWFwX21sZF9hZGRyLCB0cnVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgV2lyZWxlc3MgRHJpdmVyIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2Ugd2lyZWxlc3MgZHJpdmVycyBpbml0aWFsaXplLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3RhdGlvbiBtYW5hZ2VtZW50LiBgaWVlZTgwMjExX21nZF9hdXRoYCBhbmQgYGllZWU4MDIxMV9tZ2RfYXNzb2NgIGRlZmluaXRlbHkgYXJlbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3Igd2hhdCB3ZSBjYW4gbGV2ZXJhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyB0aGVzZSBpbnRlcmFjdCB3aXRoIGtleSBmdW5jdGlvbnMgbGlrZSBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCB3aGljaCBJIHN1c3BlY3QgaXMgY2VudHJhbCB0byBmcmFtZSBwcm9jZXNzaW5nLCBhbmQgYWxzbyB0aGUgYXV0aGVudGljYXRpb24gYW5kIGFzc29jaWF0aW9uIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBuYXR1cmFsbHkuIEFsc28gaW4gdGhlIG1peCBhcmUgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLCB3aGljaCBhcmUgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHJhdGUgYWRhcHRhdGlvbi4KCk5vdywgSSB3YXMgYWxzbyByZXZpZXdpbmcgYSBzcGVjaWZpYyBwYXRjaCBkZWFsaW5nIHdpdGggUzFHIChTaW5nbGUtR2lnYWhlcnR6KSBzdXBwb3J0LCBhbmQgaXQgcmVtb3ZlZCBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmcm9tIGBuZXQvbWFjODAyMTEvczFnLmNgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCB0aGUgcGF0Y2ggZGlkbiYjMzk7dCB0b3VjaCBgaWVlZTgwMjExX3MxZ19pc190d3Rfc2V0dXBgLiBUaGlzIGdpdmVzIG1lIHNvbWUgaW1wb3J0YW50IGNsdWVzOiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCByYXRlIGluaXRpYWxpemF0aW9uIGluIHRoYXQgc2VjdGlvbiBhbnkgbW9yZS4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIHRoYXQgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlOiBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCBgaWVlZTgwMjExX21nZF9hdXRoYCwgYGllZWU4MDIxMV9tZ2RfYXNzb2NgLCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBUaGF0IGNvdmVycyB0aGUgY29yZSBzdHVmZi4KCkkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlndXJhdGlvbiBwb2ludHMuIE1BQzgwMjExIGl0c2VsZiBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHBvaW50LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSB0aGlzIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgYW5kIHRoZXJlZm9yZSBob3cgaXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvcmF0ZS5jPTI4PU1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyxcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMwLVxubmV0L21hYzgwMjExL3JhdGUuYzozMTp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxubmV0L21hYzgwMjExL3JhdGUuYy0zMi17XG4tLVxubmV0L21hYzgwMjExL3JhdGUuYy03MS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM6NzI6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbm5ldC9tYWM4MDIxMS9yYXRlLmMtNzMte1xuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmg9Mjk9dm9pZCByYXRlX2NvbnRyb2xfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzEtXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjMyOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpO1xubmV0L21hYzgwMjExL3JhdGUuaDozMzp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzQtdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzQ0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgQ29kZSoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSBpc24mIzM5O3QganVzdCBhIHNuYXBzaG90LiBUaGUgdmVyeSBjb25jZXB0IG9mICYjMzQ7c3RhdGljJiMzNDsgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFwcGx5aW5nIGhlcmUuIFRoZXJlJiMzOTtzIGNsZWFybHkgbW90aW9uLCBhY3Rpdml0eSwgYW5kLCBieSBleHRlbnNpb24sICpjaGFuZ2UqIGF0IHBsYXkuIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgY29kZSwgc28gbXkgbmV4dCB0aG91Z2h0IGlzLCBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyB1c2VkIG9ubHkgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgZnVuY3Rpb24gc2VlbXMgY2VudHJhbCB0byB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcsIHNvIEkgd2FudCB0byBjb25maXJtIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGV4Y2x1c2l2ZWx5IGZyb20gdGhlIHBvaW50cyBpbiB0aGUgY29kZSB0aGF0IGFyZSBzdXBwb3NlZCB0byBkcml2ZSBpdHMgYWN0aXZpdHksIHJhdGhlciB0aGFuIHNvbWV0aGluZyB1bmV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgaXRzIGNhbGwgZ3JhcGggdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21sbWUuYz01ODU0PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTYzNDgtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjYzNDk6c3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxubmV0L21hYzgwMjExL21sbWUuYy02MzUwLVx0XHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz02OTc2PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwNi1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzEwNzpcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwOC1cdFx0XHRcdFx0XHQgICBhc3NvY19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzKTtcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk1OTM9c3RhdGljIGludCBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY5OC1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTY5OTpcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTk3MDAtXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTEwOTE4PWllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTEwODgtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjExMDg5Olx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTEwOTAtXHRcdFx0XHRcdFx0IGFkZF9saW5rc19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTgKCQkJCQkJCW91dHB1dDogMjEzCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFdpcmVsZXNzIEFzc29jaWF0aW9uIEV2ZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IHBvaW50cyByZWxhdGVkIHRvIGhvdyB3aXJlbGVzcyBhc3NvY2lhdGlvbnMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIHRyaWdnZXJzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgZXhjbHVzaXZlbHkgZnJvbSBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgLCBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAsIGFuZCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgLiBUaGF0JiMzOTtzIGEgZm9jdXNlZCBzZXQgb2Ygc3RhcnRpbmcgcG9pbnRzLCB3aGljaCBpcyBnb29kLgoKVGhhdCBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWNhbGx5OiBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCBgaWVlZTgwMjExX21nZF9hdXRoYCwgYGllZWU4MDIxMV9tZ2RfYXNzb2NgLCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGV2YW50IHRvIHRoZSBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIGFuZCBwb3RlbnRpYWxseSByYXRlIGNvbnRyb2wgcHJvY2Vzc2VzLCB3aGljaCBhcmUgYWxsIGNyaXRpY2FsIHN0YWdlcy4KCkdpdmVuIHRoYXQgbXkgY29uZmlndXJhdGlvbiBpcyBidWlsdCBhcm91bmQgYE1BQzgwMjExYCwgSSBjYW4gZXhwZWN0IGNlcnRhaW4gc3BlY2lmaWMgYmVoYXZpb3JzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgbGV2ZXJhZ2UgaXQgYnkgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hdXRoJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ2RfYXNzb2MmIzM0OywKICAgICYjMzQ7cmF0ZV9jb250cm9sX3JhdGVfaW5pdCYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgc29mdHdhcmUgODAyLjExIHN1YnN5c3RlbSBieSByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLCB3aGljaCBwcmV2aW91c2x5IHNldCBzcGVjaWZpYyBmbGFncyBmb3IgUzFHIFNUQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBsaWtlIG1hYzgwMjExX2h3c2ltLiBUaGUgY2hhbmdlcyBhZmZlY3Qgc3RhdGlvbiBsaW5rIHNldHVwIGFuZCByYXRlIGNvbnRyb2wgaW5pdGlhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hdXRoJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ2RfYXNzb2MmIzM0OywKICAgICYjMzQ7cmF0ZV9jb250cm9sX3JhdGVfaW5pdCYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgc29mdHdhcmUgODAyLjExIHN1YnN5c3RlbSBieSByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLCB3aGljaCBwcmV2aW91c2x5IHNldCBzcGVjaWZpYyBmbGFncyBmb3IgUzFHIFNUQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBsaWtlIG1hYzgwMjExX2h3c2ltLiBUaGUgY2hhbmdlcyBhZmZlY3Qgc3RhdGlvbiBsaW5rIHNldHVwIGFuZCByYXRlIGNvbnRyb2wgaW5pdGlhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMDY6Mzk6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDU3NjFlOTYyMTQ5MTQuLmQwNmNiOGU3ZGZiMzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0yMzg4LDcgJiM0MzsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hlX29wZXJhdGlvbiAqaGVfb3BfaWVfZWxlbSk7CiAKIC8qIFMxRyAqLwotdm9pZCBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IGY1MTE2N2YwZmM0NmQuLjQ3ZWM3MDNmMTA5NDkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtNjM0Nyw3ICYjNDM7NjM0Nyw2IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaywKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLAotCQkJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLAogCQkJCQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKQogewpAQCAtNjM2MiwxMSAmIzQzOzYzNjEsOSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJbWVtY3B5KGxpbmtfc3RhLSZndDthZGRyLCBjYnNzLSZndDtic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShsaW5rX3N0YS0mZ3Q7cHViLSZndDthZGRyLCBjYnNzLSZndDtic3NpZCwgRVRIX0FMRU4pOwogCi0JLyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi8KLQlpZiAoY2Jzcy0mZ3Q7Y2hhbm5lbC0mZ3Q7YmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHsKLQkJaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7CiYjNDM7CS8qIFMxRyBkb2VzIG5vdCB1c2UgYmFzaWMgcmF0ZXMgKi8KJiM0MzsJaWYgKGNic3MtJmd0O2NoYW5uZWwtJmd0O2JhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlzYmFuZCA9IGxvY2FsLSZndDtody53aXBoeS0mZ3Q7YmFuZHNbY2Jzcy0mZ3Q7Y2hhbm5lbC0mZ3Q7YmFuZF07CiAKQEAgLTcxMDcsNyAmIzQzOzcxMDQsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCX0KIAkJfQogCi0JCWVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSwKJiM0MzsJCWVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsCiAJCQkJCQkgICBhc3NvY19kYXRhLSZndDtsaW5rW2xpbmtfaWRdLmJzcyk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9lcnI7CkBAIC05Njk5LDggJiM0Mzs5Njk2LDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJZ290byBvdXRfZXJyOwogCQl9CiAKLQkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBuZXdfc3RhLAotCQkJCQkJICAgbGlua19zdGEsIGNic3MpOwomIzQzOwkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7CiAJCWlmIChlcnIpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJc3RhX2luZm9fZnJlZShsb2NhbCwgbmV3X3N0YSk7CkBAIC0xMTA5MCw3ICYjNDM7MTEwODYsNyBAQCBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCWdvdG8gZGlzY29ubmVjdDsKIAkJfQogCi0JCWlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsCiYjNDM7CQlpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwKIAkJCQkJCSBhZGRfbGlua3NfZGF0YS0mZ3Q7bGlua1tsaW5rX2lkXS5ic3MpKQogCQkJZ290byBkaXNjb25uZWN0OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuYwppbmRleCA2NDc2OGFiYjBhNWYyLi5iY2M2YzQxNjczOTUwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKQEAgLTU3LDcgJiM0Mzs1Nyw2IEBAIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpCiAKIAkvKiBUT0RPOiBjaGVjayBmb3IgbWluc3RyZWxfczFnID8gKi8KIAlpZiAoc2JhbmQtJmd0O2JhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7Ci0JCWllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zMWcuYyBiL25ldC9tYWM4MDIxMS9zMWcuYwppbmRleCA4MjVmY2YzZjkwOWJlLi43Zjg5NzU1MmM2ODZmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvczFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3MxZy5jCkBAIC05LDE0ICYjNDM7OSw2IEBACiAjaW5jbHVkZSAmIzM0O2llZWU4MDIxMV9pLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtkcml2ZXItb3BzLmgmIzM0OwogCi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQkvKiBhdm9pZCBpbmRpY2F0aW5nIGxlZ2FjeSBiaXRyYXRlcyBmb3IgUzFHIFNUQXMgKi8KLQlzdGEtJmd0O2RlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTOwotCXN0YS0mZ3Q7ZGVmbGluay5yeF9zdGF0cy5sYXN0X3JhdGUgPQotCQkJU1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKTsKLX0KLQogYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItJmd0O2RhdGE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L21hYzgwMjExL2AuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoKWAgZnVuY3Rpb24gYW5kIGFsbCBpdHMgY2FsbHMuICBUaGlzIGZ1bmN0aW9uLCBhcyBJIHJlY2FsbCwgd2FzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHJhdGUgaW5mb3JtYXRpb24gc3BlY2lmaWNhbGx5IGZvciBTMUcgKFNpbmdsZS1TcGF0aWFsIFN0cmVhbSBHaWdhYml0KSBzdGF0aW9ucyB3aXRoaW4gdGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgc2V0dGluZyB0aGUgYElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTYCBmbGFnIGluIGB0eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBtYXJraW5nIHRoZSByYXRlIHR5cGUgZm9yIHRoZSByZWNlaXZlIHBhdGguCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyB3aGF0IGhhcHBlbnMgdG8gdGhvc2UgZmllbGRzICphZnRlciogdGhlIHJlbW92YWwuIElmIHRoZSBpbml0aWFsaXphdGlvbiBpcyBnb25lLCBhcmUgd2UgcG90ZW50aWFsbHkgbGVhdmluZyB0aG9zZSBmaWVsZHMgdW5pbml0aWFsaXplZD8gVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgcHJldHR5IHVucHJlZGljdGFibGUgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpZiB0aG9zZSB2YWx1ZXMgYXJlIHVzZWQgYmVmb3JlIGJlaW5nIHByb3Blcmx5IHNldCBlbHNld2hlcmUuIFdlIGtub3cgdGhhdCBgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YSgpYCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXQoKWAgd2VyZSBjYWxsaW5nIGl0LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIGZ1bmN0aW9ucyBpbiB0aGVpciBhYnNlbmNlLgoKVGhlIGtleSBxdWVzdGlvbiBpcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUuIElzIGl0ICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvLWluaXRpYWxpemVkIHdpdGggc29tZXRoaW5nIGxpa2UgYGt6YWxsb2NgPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0OyB0aGF04oCZcyB3aGVyZSB0aGUgc2FmZXR5IG5ldCBsaWVzLiBMZXQgbWUgY2hlY2sgdGhlIGBzdGFfaW5mb19hbGxvY2AgZnVuY3Rpb24gb3Igc2ltaWxhciB0byBzZWUgaG93IHRoZSBgc3RhX2luZm9gIHN0cnVjdCBpcyBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBJ4oCZbGwgZmlyZSB1cCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgYW5kIGdldCBkaWdnaW5nLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYHN0YWAgc3RydWN0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24sIG9yIGVsc2UgdGhpcyBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgYSBzZXJpb3VzIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhX2luZm9fYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTI2MzQ9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjY3MC1cdGlmIChwYXJhbXMtXHUwMDNlbGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKVxubmV0L21hYzgwMjExL2NmZy5jOjI2NzE6XHRcdHN0YSA9IHN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzZGF0YSwgbWFjLFxubmV0L21hYzgwMjExL2NmZy5jLTI2NzItXHRcdFx0XHRcdCAgICAgICBwYXJhbXMtXHUwMDNlbGlua19zdGFfcGFyYW1zLmxpbmtfaWQsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTI2NzUtXHRlbHNlXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjY3NjpcdFx0c3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIG1hYywgR0ZQX0tFUk5FTCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjY3Ny1cbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTU2Nz1pZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjb25zdCB1OCAqYnNzaWQsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy02MDUtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjYwNjpcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfS0VSTkVMKTtcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjA3LVx0aWYgKCFzdGEpIHtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTExNDA9dm9pZCBpZWVlODAyMTFfaWJzc19yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xMTc1LVxubmV0L21hYzgwMjExL2lic3MuYzoxMTc2Olx0c3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIEdGUF9BVE9NSUMpO1xubmV0L21hYzgwMjExL2lic3MuYy0xMTc3LVx0aWYgKCFzdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYz01MjI9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjUyMzpfX21lc2hfc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpod19hZGRyKVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYy01MjQte1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTM0LVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo1MzU6XHRzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaHdfYWRkciwgR0ZQX0tFUk5FTCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTUzNi1cdGlmICghc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM9NTUwPXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKlxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo1NTE6bWVzaF9zdGFfaW5mb19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIsXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU1Mi1cdFx0ICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcyxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU3Mi1cdH0gZWxzZVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo1NzM6XHRcdHN0YSA9IF9fbWVzaF9zdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkcik7XG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU3NC1cbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jPTU5MD1tZXNoX3N0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTYwMi1cdFx0LyogY2FuJiMzOTt0IHJ1biBhdG9taWMgKi9cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NjAzOlx0XHRzdGEgPSBtZXNoX3N0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBlbGVtcywgcnhfc3RhdHVzKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNjA0LVx0XHRpZiAoIXN0YSkge1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9OTU5Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05NjUzLVx0XHRpZiAobWxvKVxubmV0L21hYzgwMjExL21sbWUuYzo5NjU0Olx0XHRcdG5ld19zdGEgPSBzdGFfaW5mb19hbGxvY193aXRoX2xpbmsoc2RhdGEsIGFwX21sZF9hZGRyLFxubmV0L21hYzgwMjExL21sbWUuYy05NjU1LVx0XHRcdFx0XHRcdFx0ICAgbGlua19pZCwgY2Jzcy1cdTAwM2Vic3NpZCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk2NTctXHRcdGVsc2Vcbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTY1ODpcdFx0XHRuZXdfc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFwX21sZF9hZGRyLCBHRlBfS0VSTkVMKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY1OS1cbi0tXG5uZXQvbWFjODAyMTEvb2NiLmM9Mzk9dm9pZCBpZWVlODAyMTFfb2NiX3J4X25vX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvb2NiLmMtNzItXG5uZXQvbWFjODAyMTEvb2NiLmM6NzM6XHRzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7XG5uZXQvbWFjODAyMTEvb2NiLmMtNzQtXHRpZiAoIXN0YSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zNi0gKlxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Mzc6ICogVXBvbiBhbGxvY2F0aW5nIGEgU1RBIGluZm8gc3RydWN0dXJlIHdpdGggc3RhX2luZm9fYWxsb2MoKSwgdGhlIGNhbGxlclxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzgtICogb3ducyB0aGF0IHN0cnVjdHVyZS4gSXQgbXVzdCB0aGVuIGluc2VydCBpdCBpbnRvIHRoZSBoYXNoIHRhYmxlIHVzaW5nXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDIzPXN0YXRpYyB2b2lkIHN0YV9yZW1vdmVfbGluayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdW5zaWduZWQgaW50IGxpbmtfaWQsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDYyLSAqXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0NjM6ICogVGhpcyBmdW5jdGlvbiBtdXN0IHVuZG8gZXZlcnl0aGluZyBkb25lIGJ5IHN0YV9pbmZvX2FsbG9jKClcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTQ2NC0gKiB0aGF0IG1heSBoYXBwZW4gYmVmb3JlIHN0YV9pbmZvX2luc2VydCgpLiBJdCBtYXkgb25seSBiZVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTU0MT1zdGF0aWMgaW50IHN0YV9wcmVwYXJlX3JhdGVfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01NTUtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1NTY6c3RhdGljIGludCBzdGFfaW5mb19hbGxvY19saW5rKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTU3LVx0XHRcdCAgICAgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19pbmZvLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTYzMj1zdGF0aWMgc3RydWN0IHN0YV9pbmZvICpcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjYzMzpfX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjM0LVx0XHQgY29uc3QgdTggKmFkZHIsIGludCBsaW5rX2lkLCBjb25zdCB1OCAqbGlua19hZGRyLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY1MC1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjY1MTpcdGlmIChzdGFfaW5mb19hbGxvY19saW5rKGxvY2FsLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgZ2ZwKSlcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY1Mi1cdFx0Z290byBmcmVlO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTgwMi1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjgwMzpzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA0LVx0XHRcdFx0Y29uc3QgdTggKmFkZHIsIGdmcF90IGdmcClcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTgwNS17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo4MDY6XHRyZXR1cm4gX19zdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgLTEsIGFkZHIsIGdmcCk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MDctfVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA4LVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6ODA5OnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Nfd2l0aF9saW5rKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODEwLVx0XHRcdFx0XHQgIGNvbnN0IHU4ICptbGRfYWRkcixcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTQte1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6ODE1Olx0cmV0dXJuIF9fc3RhX2luZm9fYWxsb2Moc2RhdGEsIG1sZF9hZGRyLCBsaW5rX2lkLCBsaW5rX2FkZHIsIGdmcCk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTYtfVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTM0MTA9aW50IGllZWU4MDIxMV9zdGFfYWxsb2NhdGVfbGluayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdW5zaWduZWQgaW50IGxpbmtfaWQpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzQzMS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjM0MzI6XHRyZXQgPSBzdGFfaW5mb19hbGxvY19saW5rKHNkYXRhLVx1MDAzZWxvY2FsLCBcdTAwMjZhbGxvYy1cdTAwM2VpbmZvLCBHRlBfS0VSTkVMKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTM0MzMtXHRpZiAocmV0KSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9OTE4PXN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0X2J5X2lkeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05MjMtICovXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo5MjQ6c3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTkyNS1cdFx0XHRcdGNvbnN0IHU4ICphZGRyLCBnZnBfdCBnZnApO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTI2OnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Nfd2l0aF9saW5rKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTI3LVx0XHRcdFx0XHQgIGNvbnN0IHU4ICptbGRfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBTdGF0aW9uIEluZm9ybWF0aW9uIEFsbG9jYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN0YXRpb24gaW5mb3JtYXRpb24gaXMgYWxsb2NhdGVkIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBfX3N0YV9pbmZvX2FsbG9jYCDigJMgdGhhdCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gbG9vayBhdCBmb3IgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiBsb2dpYy4gSSYjMzk7bGwgb3BlbiB1cCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyBzdGF0aW9ucyBhcmUgbWFuYWdlZCwgc28gdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlIGFuZCBob3cgaXTigJlzIGhhbmRsZWQuIEhvcGVmdWxseSwgSSYjMzk7bGwgc2VlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiwgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSwgYW5kIGFueSBhc3NvY2lhdGVkIHNldHVwLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9zdGFfaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzI6XHRzdGF0aWMgc3RydWN0IHN0YV9pbmZvICpcbiA2MzM6XHRfX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIDYzNDpcdFx0XHQgY29uc3QgdTggKmFkZHIsIGludCBsaW5rX2lkLCBjb25zdCB1OCAqbGlua19hZGRyLFxuIDYzNTpcdFx0XHQgZ2ZwX3QgZ2ZwKVxuIDYzNjpcdHtcbiA2Mzc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4gNjM4Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IFx1MDAyNmxvY2FsLVx1MDAzZWh3O1xuIDYzOTpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gNjQwOlx0XHR2b2lkICp0eHFfZGF0YTtcbiA2NDE6XHRcdGludCBzaXplO1xuIDY0MjpcdFx0aW50IGk7XG4gNjQzOlx0XG4gNjQ0Olx0XHRzdGEgPSBremFsbG9jKHNpemVvZigqc3RhKSAmIzQzOyBody1cdTAwM2VzdGFfZGF0YV9zaXplLCBnZnApO1xuIDY0NTpcdFx0aWYgKCFzdGEpXG4gNjQ2Olx0XHRcdHJldHVybiBOVUxMO1xuIDY0NzpcdFxuIDY0ODpcdFx0c3RhLVx1MDAzZWxvY2FsID0gbG9jYWw7XG4gNjQ5Olx0XHRzdGEtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiA2NTA6XHRcbiA2NTE6XHRcdGlmIChzdGFfaW5mb19hbGxvY19saW5rKGxvY2FsLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgZ2ZwKSlcbiA2NTI6XHRcdFx0Z290byBmcmVlO1xuIDY1MzpcdFxuIDY1NDpcdFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4gNjU1Olx0XHRcdHN0YV9pbmZvX2FkZF9saW5rKHN0YSwgbGlua19pZCwgXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmssXG4gNjU2Olx0XHRcdFx0XHQgIFx1MDAyNnN0YS1cdTAwM2VzdGEuZGVmbGluayk7XG4gNjU3Olx0XHRcdHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgPSBCSVQobGlua19pZCk7XG4gNjU4Olx0XHR9IGVsc2Uge1xuIDY1OTpcdFx0XHRzdGFfaW5mb19hZGRfbGluayhzdGEsIDAsIFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLCBcdTAwMjZzdGEtXHUwMDNlc3RhLmRlZmxpbmspO1xuIDY2MDpcdFx0fVxuIDY2MTpcdFxuIDY2MjpcdFx0c3RhLVx1MDAzZXN0YS5jdXIgPSBcdTAwMjZzdGEtXHUwMDNlc3RhLmRlZmxpbmsuYWdnO1xuIDY2MzpcdFxuIDY2NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhLVx1MDAzZWxvY2spO1xuIDY2NTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhLVx1MDAzZXBzX2xvY2spO1xuIDY2NjpcdFx0SU5JVF9XT1JLKFx1MDAyNnN0YS1cdTAwM2VkcnZfZGVsaXZlcl93aywgc3RhX2RlbGl2ZXJfcHNfZnJhbWVzKTtcbiA2Njc6XHRcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZzdGEtXHUwMDNlYW1wZHVfbWxtZS53b3JrLCBpZWVlODAyMTFfYmFfc2Vzc2lvbl93b3JrKTtcbiA2Njg6XHQjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbiA2Njk6XHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXHUwMDI2c2RhdGEtXHUwMDNldmlmKSkge1xuIDY3MDpcdFx0XHRzdGEtXHUwMDNlbWVzaCA9IGt6YWxsb2Nfb2JqKCpzdGEtXHUwMDNlbWVzaCwgZ2ZwKTtcbiA2NzE6XHRcdFx0aWYgKCFzdGEtXHUwMDNlbWVzaClcbiA2NzI6XHRcdFx0XHRnb3RvIGZyZWU7XG4gNjczOlx0XHRcdHN0YS1cdTAwM2VtZXNoLVx1MDAzZXBsaW5rX3N0YSA9IHN0YTtcbiA2NzQ6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhLVx1MDAzZW1lc2gtXHUwMDNlcGxpbmtfbG9jayk7XG4gNjc1Olx0XHRcdGlmICghc2RhdGEtXHUwMDNldS5tZXNoLnVzZXJfbXBtKVxuIDY3NjpcdFx0XHRcdHRpbWVyX3NldHVwKFx1MDAyNnN0YS1cdTAwM2VtZXNoLVx1MDAzZXBsaW5rX3RpbWVyLCBtZXNoX3BsaW5rX3RpbWVyLFxuIDY3NzpcdFx0XHRcdFx0ICAgIDApO1xuIDY3ODpcdFx0XHRzdGEtXHUwMDNlbWVzaC1cdTAwM2Vub25wZWVyX3BtID0gTkw4MDIxMV9NRVNIX1BPV0VSX0FDVElWRTtcbiA2Nzk6XHRcdH1cbiA2ODA6XHQjZW5kaWZcbiA2ODE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4MQoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiAyODM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBTMUcgSW5pdGlhbGl6YXRpb24gUmVtb3ZhbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGlzIHRoYXQgdGhlIGBzdGFgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBpdHMgZmllbGRzIHN0YXJ0IGF0IHplcm8uIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aGUgcmVtb3ZhbCBvZiBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YC4gVGhpcyBmdW5jdGlvbiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgc29tZSBmbGFncyByZWxhdGVkIHRvIFMxRyBNQ1MgYW5kIGEgc3BlY2lmaWMgcmF0ZSB0eXBlIHdpdGhpbiB0aGUgYHN0YWAgc3RydWN0dXJlJiMzOTtzIGBkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZWAgYW5kIGBkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZWAgZmllbGRzLgoKU2luY2UgdGhlIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IGBremFsbG9jYCwgcmVtb3ZpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBzY2VuYXJpb3MuIFRoZSByZWxldmFudCBmaWVsZHMgd2lsbCBzaW1wbHkgcmVtYWluIGF0IHRoZWlyIGRlZmF1bHQgemVybyB2YWx1ZXMuIFRoaXMgaXMgbm90IHRoZSB0eXBlIG9mIGlzc3VlIHRoYXQgS01TQU4sIGFzIGEgdG9vbCBmb3IgZGV0ZWN0aW5nIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIHdvdWxkIGZsYWcuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBsb2dpY2FsIGNoYW5nZSwgYSBkZWNpc2lvbiB0byAqbm90KiBzZXQgY2VydGFpbiBmbGFncyBvciB0eXBlcywgcmF0aGVyIHRoYW4gYSBzY2VuYXJpbyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0by4KCkZ1cnRoZXJtb3JlLCB0aGUgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZSBjaGFuZ2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGBzdGFgIGFyZ3VtZW50IGlzIHJlbW92ZWQuIFRoaXMgYXJndW1lbnQgd2FzIG9ubHkgdXNlZCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHRoYXQmIzM5O3Mgbm93IHJlbW92ZWQuIFRoZSBsb2dpYyBmbG93IGlzIHRoYXQgdGhlIGBsaW5rX3N0YWAgc3RydWN0dXJlIGlzIHVzZWQgaW5zdGVhZCwgd2hpY2ggZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50cy4KCkkmIzM5O3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgd2hlcmUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgd2FzIHJlbW92ZWQgaW4gb3RoZXIgcGxhY2VzLCBzcGVjaWZpY2FsbHkgaW4gYHJhdGVfY29udHJvbF9yYXRlX2luaXRgLCBhbmQgdGhlIHNhbWUgcmVhc29uaW5nIGFwcGxpZXMuIFRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgYXJpc2UgaGVyZSwgZWl0aGVyLgoKVGhlcmVmb3JlLCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycywgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlJiMzOTtzIGp1c3QgYSBmdW5jdGlvbmFsIHJlZ3Jlc3Npb24uIEJ1dCBLTVNBTiwgc3BlY2lmaWNhbGx5LCBpcyBub3QgZ29pbmcgdG8gcHJvdmlkZSBhbnkgdmFsdWUgaGVyZS4gSSBhbSBjb25maWRlbnQgdGhhdCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozOTo1MC43NTk3ODY5NDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY3NjE4MDUzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZVwiLFxuICAgIFwiaWVlZTgwMjExX21nZF9hdXRoXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2Fzc29jXCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0XCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXFx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzYCBhbmQgYHN0YS1cXHUwMDNlZGVmbGluay5yeF9zdGF0cy5sYXN0X3JhdGVgKSBmb3IgUzFHIHN0YXRpb25zLiBUaGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCAodmlhIGBfX3N0YV9pbmZvX2FsbG9jYCksIG1lYW5pbmcgYWxsIGl0cyBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gUmVtb3ZpbmcgdGhpcyBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBtZXJlbHkgbGVhdmVzIHRoZXNlIGZpZWxkcyBhcyB6ZXJvLCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGxvZ2ljIGNoYW5nZSB3b3VsZCBiZSBmdW5jdGlvbmFsIGJ1Z3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb25zIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB0aGF0IGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozOTo1MC43NTk3OTEyNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQyNjY3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjM5OjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5kMDZjYjhlN2RmYjMzIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtMjM4OCw3ICsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGVfb3BlcmF0aW9uICpoZV9vcF9pZV9lbGVtKTtcXG4gXFxuIC8qIFMxRyAqL1xcbi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XFxuIGJvb2wgaWVlZTgwMjExX3MxZ19pc190d3Rfc2V0dXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXFxuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uNDdlYzcwM2YxMDk0OSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbkBAIC02MzQ3LDcgKzYzNDcsNiBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2NfY29uZmlnX2xpbmsoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcylcXG4ge1xcbkBAIC02MzYyLDExICs2MzYxLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBcXHRtZW1jcHkobGlua19zdGEtXFx1MDAzZWFkZHIsIGNic3MtXFx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XFxuIFxcdG1lbWNweShsaW5rX3N0YS1cXHUwMDNlcHViLVxcdTAwM2VhZGRyLCBjYnNzLVxcdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xcbiBcXG4tXFx0LyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi9cXG4tXFx0aWYgKGNic3MtXFx1MDAzZWNoYW5uZWwtXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7XFxuLVxcdFxcdGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpO1xcbitcXHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXFxuK1xcdGlmIChjYnNzLVxcdTAwM2VjaGFubmVsLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4gXFxuIFxcdHNiYW5kID0gbG9jYWwtXFx1MDAzZWh3LndpcGh5LVxcdTAwM2ViYW5kc1tjYnNzLVxcdTAwM2VjaGFubmVsLVxcdTAwM2ViYW5kXTtcXG4gXFxuQEAgLTcxMDcsNyArNzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSxcXG4rXFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuQEAgLTk2OTksOCArOTY5Niw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIG5ld19zdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGxpbmtfc3RhLCBjYnNzKTtcXG4rXFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIG5ld19zdGEpO1xcbkBAIC0xMTA5MCw3ICsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHRnb3RvIGRpc2Nvbm5lY3Q7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsXFxuK1xcdFxcdGlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgYWRkX2xpbmtzX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcXG4gXFx0XFx0XFx0Z290byBkaXNjb25uZWN0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcXG5pbmRleCA2NDc2OGFiYjBhNWYyLi5iY2M2YzQxNjczOTUwIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5jXFxuQEAgLTU3LDcgKzU3LDYgQEAgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcXG4gXFxuIFxcdC8qIFRPRE86IGNoZWNrIGZvciBtaW5zdHJlbF9zMWcgPyAqL1xcbiBcXHRpZiAoc2JhbmQtXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7XFxuLVxcdFxcdGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zMWcuYyBiL25ldC9tYWM4MDIxMS9zMWcuY1xcbmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3MxZy5jXFxuKysrIGIvbmV0L21hYzgwMjExL3MxZy5jXFxuQEAgLTksMTQgKzksNiBAQFxcbiAjaW5jbHVkZSBcXFwiaWVlZTgwMjExX2kuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImRyaXZlci1vcHMuaFxcXCJcXG4gXFxuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi17XFxuLVxcdC8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqL1xcbi1cXHRzdGEtXFx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTO1xcbi1cXHRzdGEtXFx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlID1cXG4tXFx0XFx0XFx0U1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKTtcXG4tfVxcbi1cXG4gYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItXFx1MDAzZWRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjM5OjUyLjA5NDY4MTQ0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyODIxMzI1Nzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2F1dGhcIixcbiAgICBcImllZWU4MDIxMV9tZ2RfYXNzb2NcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6Mzk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5kMDZjYjhlN2RmYjMzIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjM4OCw3ICsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZV9vcGVyYXRpb24gKmhlX29wX2llX2VsZW0pO1xuIFxuIC8qIFMxRyAqL1xuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi40N2VjNzAzZjEwOTQ5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTYzNDcsNyArNjM0Nyw2IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKVxuIHtcbkBAIC02MzYyLDExICs2MzYxLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0bWVtY3B5KGxpbmtfc3RhLVx1MDAzZWFkZHIsIGNic3MtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiBcdG1lbWNweShsaW5rX3N0YS1cdTAwM2VwdWItXHUwMDNlYWRkciwgY2Jzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFxuLVx0LyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi9cbi1cdGlmIChjYnNzLVx1MDAzZWNoYW5uZWwtXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHtcbi1cdFx0aWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7XG4rXHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXG4rXHRpZiAoY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbiBcdHNiYW5kID0gbG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlYmFuZHNbY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmRdO1xuIFxuQEAgLTcxMDcsNyArNzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsXG4rXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0ICAgYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuQEAgLTk2OTksOCArOTY5Niw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBuZXdfc3RhLFxuLVx0XHRcdFx0XHRcdCAgIGxpbmtfc3RhLCBjYnNzKTtcbitcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRzdGFfaW5mb19mcmVlKGxvY2FsLCBuZXdfc3RhKTtcbkBAIC0xMTA5MCw3ICsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLFxuK1x0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbiBcdFx0XHRcdFx0XHQgYWRkX2xpbmtzX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpKVxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuY1xuaW5kZXggNjQ3NjhhYmIwYTVmMi4uYmNjNmM0MTY3Mzk1MCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmNcbisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcbkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4gXG4gXHQvKiBUT0RPOiBjaGVjayBmb3IgbWluc3RyZWxfczFnID8gKi9cbiBcdGlmIChzYmFuZC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikge1xuLVx0XHRpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvczFnLmMgYi9uZXQvbWFjODAyMTEvczFnLmNcbmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvczFnLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zMWcuY1xuQEAgLTksMTQgKzksNiBAQFxuICNpbmNsdWRlIFwiaWVlZTgwMjExX2kuaFwiXG4gI2luY2x1ZGUgXCJkcml2ZXItb3BzLmhcIlxuIFxuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLXtcbi1cdC8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqL1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTO1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlID1cbi1cdFx0XHRTVEFfU1RBVFNfRklFTEQoVFlQRSwgU1RBX1NUQVRTX1JBVEVfVFlQRV9TMUcpO1xuLX1cbi1cbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi1cdTAwM2VkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mzk6NTIuMDk0NjgzODg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzY3MDk4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbjogUzFHIFNUQSBSYXRlIEluaXRpYWxpemF0aW9uIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIExpbnV4IGtlcm5lbC4gSXQncyB0b3VjaGluZyBzb21lIGNvcmUgYG1hYzgwMjExYCBmaWxlczogYG1sbWUuY2AsIGByYXRlLmNgLCBgczFnLmNgLCBhbmQgYGllZWU4MDIxMV9pLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyByZW1vdmluZyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBjYWxscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwid2h5PyBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT9cIlxuXG5UaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoaXMgZnVuY3Rpb24gd2FzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgZmxhZ3Mgc3BlY2lmaWMgdG8gUzFHIFNUQXMuIFNvLCBpcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIGJ1ZyBmaXg/IFdoYXQgd2VyZSB0aG9zZSBmbGFncyBhbmQgd2h5IGFyZSB0aGV5IG5vIGxvbmdlciBuZWVkZWQ/IEkgbmVlZCBtb3JlIGRldGFpbCBoZXJlLCBidXQgSSBuZWVkIHRvIHN0YXJ0IHNvbWV3aGVyZS5cblxuVGhlIG5leHQgdGhpbmcgSSdtIGNvbnNpZGVyaW5nIGlzLCBob3cgY2FuIEkgZXZhbHVhdGUgdGhpcyBwcm9wZXJseT8gQ2FuIEkgZXZlbiByZXByb2R1Y2UgdGhlIHNjZW5hcmlvPyBXZWxsLCBzaW5jZSB0aGlzIGlzIGluIGBtYWM4MDIxMWAsIHdoaWNoIGlzIHRoZSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtLCBJIGNhbiB1c2UgYSBgbWFjODAyMTFfaHdzaW1gIGVudmlyb25tZW50LiBUaGF0IG1lYW5zLCB5ZXMsIEkgY2FuIGFic29sdXRlbHkgcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBhIGJpZyByZWxpZWYuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciB3aGF0IGlzIG5lZWRlZCB0byByZXByb2R1Y2UgdGhlIGlzc3VlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGF0IEkgdGhpbmsgaXMgbmVlZGVkLiBJIGtub3cgSSBuZWVkIGBDT05GSUdfTUFDODAyMTFgIGVuYWJsZWQsIGJ1dCBJIHNob3VsZCBsb29rIGZvciBvdGhlcnMgZm9yIGBzMWdgIGNvbmZpZ3VyYXRpb24uXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDoyNC4zNzEzOTYwMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1MDA1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6MjQuNDM4OTAwNDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxODg5OTQzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGluIGBuZXQvbWFjODAyMTEvbWxtZS5jYC4gUmlnaHQsIHRoYXQgZnVuY3Rpb24uLi4gdGhhdCdzIHdoZXJlIHdlIHNldCB1cCB0aGUgc3RhdGlvbiBsaW5rIGZvciBtYW5hZ2VkIG1vZGUsIGlzbid0IGl0PyBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhbGwgYWJvdXQuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggdGhlIHNwZWNpZmljIHJlc3BvbnNpYmlsaXRpZXMgb2YgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIHdpdGhpbiB0aGUgbGFyZ2VyIE1BQzgwMjExIGNvbnRleHQuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIGV4YWN0IHJvbGUgaW4gdGhlIGxpbmsgZXN0YWJsaXNobWVudCBwcm9jZXNzLCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBNTE1FIGFuZCBwb3RlbnRpYWxseSBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgaW1wYWN0IGlzLCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDA0LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6NDQuNjI3ODk3Mjg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzExNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL21sbWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWxtZS5jPTU4NTQ9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy02MzQ4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NjM0OTpzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxubmV0L21hYzgwMjExL21sbWUuYy02MzUwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwNi1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxMDc6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxMDgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz05NTkzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY5OC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2OTk6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XFxubmV0L21hYzgwMjExL21sbWUuYy05NzAwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTA5MTg9aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTExMDg4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTEwODk6XFx0XFx0aWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTA5MC1cXHRcXHRcXHRcXHRcXHRcXHQgYWRkX2xpbmtzX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6NDQuNjczNjEyMTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5MTY5Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYW5pbmcgdXAgc29tZSBzdHVmZiBpbiBgbWFjODAyMTFgLiBTcGVjaWZpY2FsbHksIGl0J3MgZ2V0dGluZyByaWQgb2YgdGhlIGBzdGFgIHBhcmFtZXRlciBmcm9tIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBhbmQgYWxzbyByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmcm9tIGBuZXQvbWFjODAyMTEvczFnLmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVsYXRpdmVseSBtaW5vciBvbmUsIGJ1dCBpdCBkb2VzIHJlbW92ZSB0aGUgc2V0dGluZyBvZiBgSUVFRTgwMjExX1RYX1JDX1MxR19NQ1NgIGFuZCBgU1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKWAgZmxhZ3MgZm9yIFMxRyBTVEFzLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGEgZGVlcGVyIGRpdmUsIGVzcGVjaWFsbHkgZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHllcy4gSXQncyB0b3VjaGluZyBgbWFjODAyMTFgLCBhbmQgd2Uga25vdyBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgZGVjZW50IHRlc3Rpbmcgc3VyZmFjZS5cblxuTm93LCBsZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBnb29kIGZvY3VzIHN5bWJvbHMgdG8gY2hlY2sgYXJvdW5kIHRoaXMgY2hhbmdlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdGhlIHBhcnRzIGJlaW5nIGNoYW5nZWQgb3IgcmVsYXRlZCB0byB0aGUgcmVsYXRlZCBjb25jZXB0cywgbGlrZSBhc3NvY2lhdGlvbiwgcmF0ZSBjb250cm9sIG9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjbG9zZSBieS5cblxuSGVyZSdzIHdoYXQgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgYGllZWU4MDIxMV9hc3NvY19zdWNjZXNzYFxuKiAgIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYFxuKiAgIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGBcbiogICBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGBcblxuTm93IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXNlIHN5bWJvbHMgYXJlIHN0YXRpYywgYXMgc3RhdGljIHN5bWJvbHMgY2FuIGJlIGEgZ29vZCBjbHVlIHRvIGFuIGlzb2xhdGVkIGFyZWEgdGhhdCBjb3VsZCBiZSB0YXJnZXRlZC4gSSd2ZSBmb3VuZCBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgIGFuZCBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAgYXJlIHN0YXRpYywgd2hpbGUgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGFyZSBub3QuIEdvb2QsIHRoaXMgZ2l2ZXMgbWUgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6NTIuMjY1MzExMjc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTE0MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL21sbWUuYz0xMDkxNz1zdGF0aWMgdm9pZFxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTA5MTg6aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDkxOS1cXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz0xMTgwOD12b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTk0NS1cXHRcXHRcXHRjYXNlIFdMQU5fUFJPVEVDVEVEX0VIVF9BQ1RJT05fTElOS19SRUNPTkZJR19SRVNQOlxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE5NDY6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc2RhdGEsIG1nbXQsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTk0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDo1Mi4zMTEyMjkxOTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMwNzEyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0J3MgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIDgwMi4xMSBmcmFtZXdvcmsuIFRoZSBpbXBsaWNhdGlvbnMgb2YgXCJzdGF0aWNcIiBhcmUgaW1wb3J0YW50IGhlcmU7IGl0IGxpa2VseSBtZWFucyBpdCdzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQncyBhIGdvb2QgZGVzaWduIGNob2ljZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gaGFuZGxpbmcgcmVjb25maWd1cmF0aW9ucy4gSXMgaXQgZWZmZWN0aXZlbHkgZW5jYXBzdWxhdGVkLCBvciBpcyBpdCBhIHNpZ24gb2YgcG90ZW50aWFsIGNvZGUgc21lbGwgZG93biB0aGUgbGluZT9cblxuTmV4dCwgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGNvbnNpZGVyIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YC4gVGhpcyBpcyBjcnVjaWFsLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggcmF0ZSBjb250cm9sLCB3aGljaCBpcyBhIGZhaXJseSBjb21wbGV4IHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGNhbiB2YXJ5IHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHRoZSBkZXNpZ24gYW5kIGhhcmR3YXJlLCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBXaGF0IGFyZSB0aGUgaW5wdXRzIHRvIHRoaXMgZnVuY3Rpb24/IElzIGl0IGhhbmRsaW5nIHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIG9mIHRoZSBsaW5rLCBvciBpcyB0aGVyZSBhIGdlbmVyYWwgcmF0ZSB0YWJsZSBvciBhIHNwZWNpZmljIHJhdGUgY29udHJvbCBhbGdvcml0aG0gdGhhdCdzIGJlaW5nIHNldCB1cD8gTGV0J3MgdHJhY2UgaG93IHRoZSBkYXRhIGlzIGJlaW5nIHBhc3NlZCBhcm91bmQsIGhvdyB0aGUgcmF0ZSB0YWJsZXMgYXJlIGJlaW5nIGJ1aWx0LCBvciB3aGV0aGVyIGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXNpZ24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWF0aW9uIHByb2Nlc3MgaXMgY3JpdGljYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBlbnN1cmluZyBzZWFtbGVzcyBhZGFwdGF0aW9uIHRvIGNoYW5naW5nIGNoYW5uZWwgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJhdGUgY29udHJvbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDo1Ni45NDE5NDQyNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg3MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9MjEzMD1zdGF0aWMgaW50IHN0YV9hcHBseV9hdXRoX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxNTItXFx0XFx0aWYgKCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfUkFURV9DT05UUk9MKSlcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1MzpcXHRcXHRcXHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTU0LVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTI2MzQ9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNzAwLVxcdCAgICB0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyNzAxOlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0YSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTI3MDItXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTgxOT1pZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU4NTItXFx0XFx0bGlua19zdGEgPSBzZGF0YV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbcGFyYW1zLVxcdTAwM2VsaW5rX2lkXSwgc2RhdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1ODUzOlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01ODU0LVxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9NTM4PXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2ZpbmlzaF9zdGEoc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTU1Ny1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjU1ODpcXHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmspO1xcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTU5LVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYz05MjY9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VwZGF0ZV9zdGFfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTAzNC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rLmNvbmYtXFx1MDAzZWNoYW5yZXEub3Blcik7XFxubmV0L21hYzgwMjExL2lic3MuYzoxMDM1OlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQoXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayk7XFxubmV0L21hYzgwMjExL2lic3MuYy0xMDM2LVxcdFxcdGlmIChzdGEtXFx1MDAzZXN0YS5kZWZsaW5rLnJ4X25zcyAhPSByeF9uc3MpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jPTQyMz1zdGF0aWMgdm9pZCBtZXNoX3N0YV9pbmZvX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTQ4Ny1cXHRpZiAoIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9SQVRFX0NPTlRST0wpKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NDg4OlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQoXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayk7XFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYy00ODktXFx0ZWxzZVxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz02OTc2PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy03MTMzLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzEzNDpcXHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdGEpO1xcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEzNS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9vY2IuYz04Nz1zdGF0aWMgc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfb2NiX2ZpbmlzaF9zdGEoc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvb2NiLmMtMTA0LVxcbm5ldC9tYWM4MDIxMS9vY2IuYzoxMDU6XFx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rKTtcXG5uZXQvbWFjODAyMTEvb2NiLmMtMTA2LVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYz0yOD1NT0RVTEVfUEFSTV9ERVNDKGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28sXFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMwLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmM6MzE6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMyLXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtNzEtXFxubmV0L21hYzgwMjExL3JhdGUuYzo3Mjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtNzMte1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy04Mi1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjgzOlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtODQtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD0yOT12b2lkIHJhdGVfY29udHJvbF90eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTMxLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmg6MzI6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSk7XFxubmV0L21hYzgwMjExL3JhdGUuaDozMzp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTM0LXZvaWQgcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDo1Ni45ODc2MzQ5MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzMjEyNjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmF0ZSBDb250cm9sIEluaXRpYWxpemF0aW9uIGluIHRoZSBtYWM4MDIxMSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyByYXRlIGNvbnRyb2wgaXMgaW5pdGlhbGl6ZWQgaW4gdGhpcyBtYWM4MDIxMSBjb2RlLCBhbmQgSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEZpcnN0IG9mZiwgSSdtIG5vdGljaW5nIHRoYXQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU2FtZSBnb2VzIGZvciBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgIGFuZCBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgYWxsIGxpbmtlZC5cblxuTGV0J3Mgc2Vl4oCmIEkgd2FzIGdvaW5nIHRvIGNoZWNrIGBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cGAgaW4gYG5ldC9tYWM4MDIxMS9zMWcuY2AsIGJ1dCB3YWl0Li4uIHRoaXMgcGF0Y2ggcmVtb3ZlZCBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLiBSaWdodCwgdGhlIGNhbGxzIHdlcmUgaW4gYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAuIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyBzdGF0aWMgYnV0IGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBpcyBub3QuIFRoaXMgbWFrZXMgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0PyBPa2F5LCBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gIGNhbGxzIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCwgYW5kIGBpZWVlODAyMTFfYWRkX3N0YXRpb25gIGNhbGxzIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc2AuIFRoYXQncyBpbXBvcnRhbnQuIEkgc2VlIHRoYXQgYGllZWU4MDIxMV9hc3NvY19zdWNjZXNzYCwgYGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb25gLCBhbmQgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYCBhcmUgc3RhdGljLCBzbyB0aGV5J3JlIHByb2JhYmx5IG5vdCBhcyBpbXBvcnRhbnQgdG8gbG9vayBhdCByaWdodCBub3cuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGNoZWNrIHRoYXQgYGllZWU4MDIxMV9hZGRfc3RhdGlvbmAgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJhdGUgY29udHJvbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTowMy4wMTk3NjM5MTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjAxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9hZGRfc3RhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz0yNDUwPXN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjYzMy1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjYzNDpzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNjM1LVxcdFxcdFxcdFxcdCBjb25zdCB1OCAqbWFjLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU5NzY9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTAtXFx0LnN0b3BfYXAgPSBpZWVlODAyMTFfc3RvcF9hcCxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5MTpcXHQuYWRkX3N0YXRpb24gPSBpZWVlODAyMTFfYWRkX3N0YXRpb24sXFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTItXFx0LmRlbF9zdGF0aW9uID0gaWVlZTgwMjExX2RlbF9zdGF0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTowMy4wNjczNzAyMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkxMDA0NzM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMgU3RhdGlvbiBBZGRpdGlvbioqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoZXNlIHdpcmVsZXNzIGRyaXZlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggYWRkaW5nIHN0YXRpb25zLiBUaGUgZmFjdCB0aGF0IGBpZWVlODAyMTFfYWRkX3N0YXRpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGF0IG1lYW5zIGl0IGhhcyBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB1c3VhbGx5IGluZGljYXRpbmcgaXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGxpa2VseSBvbmx5IHVzZWQgd2l0aGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBJdCdzIGEgaGVscGVyIGZ1bmN0aW9uLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZXh0ZXJuYWxseS4gSXQgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBsb3ctbGV2ZWwgYXBwcm9hY2ggdG8gc3RhdGlvbiBhZGRpdGlvbi4gSSdkIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIGV4YWN0IHJvbGUsIGJ1dCB0aGUgYHN0YXRpY2Aga2V5d29yZCBwb2ludHMgdG8gdGhhdCBpbnRlcm5hbCBmb2N1cy5cblxuVGhlbiwgdGhlcmUncyBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gLCB3aGljaCAqaXNuJ3QqIGBzdGF0aWNgLiBUaGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGlzIHRlbGxzIG1lIGl0J3MgZGVzaWduZWQgdG8gYmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBwcm9iYWJseSBwYXJ0IG9mIHRoZSBkcml2ZXIncyBwdWJsaWMgQVBJIG9yIGEgaGlnaGVyLWxldmVsIGludGVyZmFjZS4gSXRzIG5vbi1gc3RhdGljYCBzdGF0dXMgaW1wbGllcyBpdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBvdGhlciBtb2R1bGVzIG9yIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGV2ZW4gYnkgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgb3Igb3RoZXIgZHJpdmVycy4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIG1vcmUgY29tcGxleCwgaGlnaGVyLWxldmVsIGFzcGVjdHMgb2Ygc3RhdGlvbiBhZGRpdGlvbiwgcGVyaGFwcyBtYW5hZ2luZyBsaW5rLXNwZWNpZmljIGRhdGEgb3IgaW50ZXJhY3Rpbmcgd2l0aCBuZXR3b3JrIG1hbmFnZW1lbnQgZnJhbWV3b3Jrcy4gVGhlICdsaW5rJyBpbiBpdHMgbmFtZSBpcyBhbm90aGVyIGltcG9ydGFudCBjbHVlIOKAkyBpdOKAmXMgcHJvYmFibHkgZm9jdXNlZCBvbiBhZGRpbmcgc3RhdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBsaW5rcyBvciBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IGFuZCB3aGF0IHNwZWNpZmljIHNjZW5hcmlvcyBlYWNoIGhhbmRsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6MDkuOTc3NDE5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNjE3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9NTgxOD1zdGF0aWMgaW50XFxubmV0L21hYzgwMjExL2NmZy5jOjU4MTk6aWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTgyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDgzLVxcdC5kZWxfaW50Zl9saW5rID0gaWVlZTgwMjExX2RlbF9pbnRmX2xpbmssXFxubmV0L21hYzgwMjExL2NmZy5jOjYwODQ6XFx0LmFkZF9saW5rX3N0YXRpb24gPSBpZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbixcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA4NS1cXHQubW9kX2xpbmtfc3RhdGlvbiA9IGllZWU4MDIxMV9tb2RfbGlua19zdGF0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MToxMC4wMjE1ODQ0NjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5ODEwNjI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEZ1bmN0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSwgYW5kIG15IGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgYGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlLiBJIGltbWVkaWF0ZWx5IHRoaW5rLCBcIldoZXJlIGRvZXMgdGhlIHN0YXRpb24gbGluayBpbmZvcm1hdGlvbiBnZXQgaW5pdGlhbGl6ZWQ/XCIgVGhpcyBsZWFkcyBtZSB0byBmb2N1cyBvbiBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc2AgYXMgcHJvbWlzaW5nIHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gVGhvc2Ugc2VlbSBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBtYW5hZ2luZyB0aGUgcmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGxpbmsgc2V0dXAsIHdoaWNoIGlzIG15IG1haW4gaW50ZXJlc3QuXG5cbk5vdywgSSdtIHBpdm90aW5nIHRvIGNvbnNpZGVyIGBpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc2AuIEkgc2VlIHRoYXQgKml0KiBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gVGhpcyBwaXF1ZXMgbXkgY3VyaW9zaXR5LiBJZiBpdCdzIHN0YXRpYywgaXQgaW1wbGllcyB0aGF0IGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpcyB0aGF0ICphY3R1YWxseSogdGhlIGNhc2U/IFRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICoqaXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgPyoqIEZpbmRpbmcgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLCBpZiBvbmUgZXhpc3RzLCBjb3VsZCBsZWFkIG1lIHRvIGEgdmFsdWFibGUgcG9pbnQgb2YgaW50ZWdyYXRpb24uIElmIG5vdCwgdGhlbiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgYXMgdGhleSByZWxhdGUuIE15IG5leHQgc3RlcHMgaGluZ2Ugb24gYW5zd2VyaW5nIHRoaXMgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzQ3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6MTYuNzE5NjkzMjM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0OTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tbG1lLmM9Njg5MT1pZWVlODAyMTFfcGFyc2VfYWR2X3QybChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNjk3NS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjY5NzY6c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy02OTc3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTcxODc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzM1OS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjczNjA6XFx0XFx0aWYgKCFpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzZGF0YSwgbWdtdCwgZWxlbXMsXFxubmV0L21hYzgwMjExL21sbWUuYy03MzYxLVxcdFxcdFxcdFxcdFxcdCAgICAgZWxlbV9zdGFydCwgZWxlbV9sZW4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjE2Ljc2NTM0NTA2NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzEwMjQ1MzcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSwgZnJvbSBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBhbmQgdGhlIGNvbnRleHQgaXQncyB1c2VkIGluLCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKnN0YXRpYyouIFRoYXTigJlzIHRoZSBrZXkgb2JzZXJ2YXRpb24gaGVyZS4gSXQncyBub3QgZXh0ZXJuYWxseSB2aXNpYmxlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXNuJ3QgcGFydCBvZiBhbnkgcHVibGljIEFQSSwgbm9yIGlzIGl0IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMsIGJ1dCBpcyBvbmx5IHVzZWQgbG9jYWxseSB3aXRoaW4gdGhpcyBtb2R1bGUuIFRoaXMgaW1wYWN0cyBob3cgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIDgwMi4xMSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byByZWFzb24gYWJvdXQgaXQgaW4gaXNvbGF0aW9uLCBrbm93aW5nIEkgaGF2ZSBhIGxpbWl0ZWQgc2NvcGUgb2YgaW50ZXJhY3Rpb24gdG8gY29uc2lkZXIuIFRoaXMgYWxzbyBtZWFucyBhbnkgcmVmYWN0b3Jpbmcgd291bGQgcHJvYmFibHkgb25seSByZXF1aXJlIGNoYW5nZXMgd2l0aGluIHRoZSBleGlzdGluZyBtb2R1bGUuIFRoYXQncyBhIGRlZmluaXRlIHBsdXMgZm9yIG1haW50YWluYWJpbGl0eSEgTm93LCBsZXQncyBkaWcgaW50byAqd2hhdCogdGhlIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjI5Ljg2NzgwMTg3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzE4Ni1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxODc6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxODgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTE4MDg9dm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE4NTUtXFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOlxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE4NTY6XFx0XFx0aWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE4NTctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjI5LjkxNDg1MDU4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY1OTk1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIEZyYW1lIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lYCBhbmQgaXQncyBmbGFnZ2VkIGFzICpub3QqIHN0YXRpYy4gQWxyaWdodCwgdGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcGl2b3QgYW5kIGRvdWJsZSBjaGVjayBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAuIEkgYmV0IHRoZXJlJ3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgd2F5IHRoZSBjb25uZWN0aW9uIGlzIHByZXBwZWQgYW5kIHRoaXMgcXVldWVkIGZyYW1lIGhhbmRsZXIuIE1ha2VzIHNlbnNlIHRvIGxvb2sgYXQgdGhhdCBuZXh0LiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlJ3MgYSBkZXBlbmRlbmN5IEkgbmVlZCB0byBmdWxseSBncmFzcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTozMy4yODA4NDgwOTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODIwOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk1OTItXFxubmV0L21hYzgwMjExL21sbWUuYzo5NTkzOnN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk1OTQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzLCBzOCBsaW5rX2lkLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz05ODk0PWludCBpZWVlODAyMTFfbWdkX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk5ODUtXFx0ICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24gb2YgdGhlIFNUQSBlbnRyeSBpblxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTk4NjpcXHQgKiBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKCkuXFxubmV0L21hYzgwMjExL21sbWUuYy05OTg3LVxcdCAqL1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDA2MS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjEwMDYyOlxcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIHJlcS1cXHUwMDNlYnNzLCByZXEtXFx1MDAzZWxpbmtfaWQsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDA2My1cXHRcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWFwX21sZF9hZGRyLCBjb250X2F1dGgsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTEwMzE3PWludCBpZWVlODAyMTFfbWdkX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDY2OC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjEwNjY5OlxcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIGNic3MsIHJlcS1cXHUwMDNlbGlua19pZCxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTEwNjcwLVxcdFxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlYXBfbWxkX2FkZHIsIHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjMzLjMyNjY3MDk4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU5NTI2NjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgV2lyZWxlc3MgRHJpdmVyIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIHdpcmVsZXNzIGRyaXZlcnMgaW5pdGlhbGl6ZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN0YXRpb24gbWFuYWdlbWVudC4gYGllZWU4MDIxMV9tZ2RfYXV0aGAgYW5kIGBpZWVlODAyMTFfbWdkX2Fzc29jYCBkZWZpbml0ZWx5IGFyZW4ndCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3Igd2hhdCB3ZSBjYW4gbGV2ZXJhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyB0aGVzZSBpbnRlcmFjdCB3aXRoIGtleSBmdW5jdGlvbnMgbGlrZSBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCB3aGljaCBJIHN1c3BlY3QgaXMgY2VudHJhbCB0byBmcmFtZSBwcm9jZXNzaW5nLCBhbmQgYWxzbyB0aGUgYXV0aGVudGljYXRpb24gYW5kIGFzc29jaWF0aW9uIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBuYXR1cmFsbHkuIEFsc28gaW4gdGhlIG1peCBhcmUgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLCB3aGljaCBhcmUgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHJhdGUgYWRhcHRhdGlvbi5cblxuTm93LCBJIHdhcyBhbHNvIHJldmlld2luZyBhIHNwZWNpZmljIHBhdGNoIGRlYWxpbmcgd2l0aCBTMUcgKFNpbmdsZS1HaWdhaGVydHopIHN1cHBvcnQsIGFuZCBpdCByZW1vdmVkIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZyb20gYG5ldC9tYWM4MDIxMS9zMWcuY2AuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHRoZSBwYXRjaCBkaWRuJ3QgdG91Y2ggYGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwYC4gVGhpcyBnaXZlcyBtZSBzb21lIGltcG9ydGFudCBjbHVlczogV2UncmUgbm90IGRlYWxpbmcgd2l0aCByYXRlIGluaXRpYWxpemF0aW9uIGluIHRoYXQgc2VjdGlvbiBhbnkgbW9yZS5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmU6IGBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZWAsIGBpZWVlODAyMTFfbWdkX2F1dGhgLCBgaWVlZTgwMjExX21nZF9hc3NvY2AsIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCwgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc2AuIFRoYXQgY292ZXJzIHRoZSBjb3JlIHN0dWZmLlxuXG5JIGFsc28gbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb24gcG9pbnRzLiBNQUM4MDIxMSBpdHNlbGYgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBwb2ludC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSB0aGlzIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgYW5kIHRoZXJlZm9yZSBob3cgaXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6NDMuOTIxOTQwNTQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg5MjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvcmF0ZS5jPTI4PU1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMzAtXFxubmV0L21hYzgwMjExL3JhdGUuYzozMTp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMzIte1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy03MS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjcyOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3Moc3RydWN0IHN0YV9pbmZvICpzdGEpXFxubmV0L21hYzgwMjExL3JhdGUuYy03My17XFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5oPTI5PXZvaWQgcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzEtXFxubmV0L21hYzgwMjExL3JhdGUuaDozMjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKTtcXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjMzOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3Moc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzQtdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjQzLjk2NjgzNjQ3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE4NDkyODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBDb2RlKipcblxuUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXNuJ3QganVzdCBhIHNuYXBzaG90LiBUaGUgdmVyeSBjb25jZXB0IG9mIFwic3RhdGljXCIgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFwcGx5aW5nIGhlcmUuIFRoZXJlJ3MgY2xlYXJseSBtb3Rpb24sIGFjdGl2aXR5LCBhbmQsIGJ5IGV4dGVuc2lvbiwgKmNoYW5nZSogYXQgcGxheS4gSSdtIGFscmVhZHkgYXdhcmUgb2YgdGhlIGNvZGUsIHNvIG15IG5leHQgdGhvdWdodCBpcywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyB1c2VkIG9ubHkgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgZnVuY3Rpb24gc2VlbXMgY2VudHJhbCB0byB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZywgc28gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpdCdzIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZHJpdmUgaXRzIGFjdGl2aXR5LCByYXRoZXIgdGhhbiBzb21ldGhpbmcgdW5leHBlY3RlZC4gSSdsbCBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgaXRzIGNhbGwgZ3JhcGggdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NDQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTo1My4yODUzMzI2NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTk0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWxtZS5jPTU4NTQ9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy02MzQ4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NjM0OTpzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxubmV0L21hYzgwMjExL21sbWUuYy02MzUwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwNi1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxMDc6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxMDgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz05NTkzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY5OC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2OTk6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XFxubmV0L21hYzgwMjExL21sbWUuYy05NzAwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTA5MTg9aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTExMDg4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTEwODk6XFx0XFx0aWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTA5MC1cXHRcXHRcXHRcXHRcXHRcXHQgYWRkX2xpbmtzX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6NTMuMzMwMzMxNzU1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDI4NzU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgV2lyZWxlc3MgQXNzb2NpYXRpb24gRXZlbnRzKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHBvaW50cyByZWxhdGVkIHRvIGhvdyB3aXJlbGVzcyBhc3NvY2lhdGlvbnMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIHRyaWdnZXJzIEknbSBpbnRlcmVzdGVkIGluIGFyZSBleGNsdXNpdmVseSBmcm9tIGBpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc2AsIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYCwgYW5kIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGAuIFRoYXQncyBhIGZvY3VzZWQgc2V0IG9mIHN0YXJ0aW5nIHBvaW50cywgd2hpY2ggaXMgZ29vZC5cblxuVGhhdCBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWNhbGx5OiBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCBgaWVlZTgwMjExX21nZF9hdXRoYCwgYGllZWU4MDIxMV9tZ2RfYXNzb2NgLCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGV2YW50IHRvIHRoZSBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIGFuZCBwb3RlbnRpYWxseSByYXRlIGNvbnRyb2wgcHJvY2Vzc2VzLCB3aGljaCBhcmUgYWxsIGNyaXRpY2FsIHN0YWdlcy5cblxuR2l2ZW4gdGhhdCBteSBjb25maWd1cmF0aW9uIGlzIGJ1aWx0IGFyb3VuZCBgTUFDODAyMTFgLCBJIGNhbiBleHBlY3QgY2VydGFpbiBzcGVjaWZpYyBiZWhhdmlvcnMuIEknbSBnb2luZyB0byB0YWtlIHRoaXMgaW5mb3JtYXRpb24gYW5kIGxldmVyYWdlIGl0IGJ5IHVzaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjU4LCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MjowMC4yMzMyMDk0NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcyNzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZVwiLFxuICAgIFwiaWVlZTgwMjExX21nZF9hdXRoXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2Fzc29jXCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0XCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgc2V0IHNwZWNpZmljIGZsYWdzIGZvciBTMUcgU1RBcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgbWFjODAyMTFfaHdzaW0uIFRoZSBjaGFuZ2VzIGFmZmVjdCBzdGF0aW9uIGxpbmsgc2V0dXAgYW5kIHJhdGUgY29udHJvbCBpbml0aWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2F1dGhcIixcbiAgICBcImllZWU4MDIxMV9tZ2RfYXNzb2NcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MjowMC4zMDc5NDI2NThaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MjEzNjQxMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MDAuMzA4Mzk0MTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3MjEzMTg2MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxzLCB3aGljaCBwcmV2aW91c2x5IGluaXRpYWxpemVkIHNvbWUgcmF0ZSBmbGFncyAoYHN0YS1cXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVxcdTAwM2VkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZWApIGZvciBTMUcgc3RhdGlvbnMuIFRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgICh2aWEgYF9fc3RhX2luZm9fYWxsb2NgKSwgbWVhbmluZyBhbGwgaXRzIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBSZW1vdmluZyB0aGlzIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG1lcmVseSBsZWF2ZXMgdGhlc2UgZmllbGRzIGFzIHplcm8sIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgY2hhbmdlIHdvdWxkIGJlIGZ1bmN0aW9uYWwgYnVncyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHRoYXQgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6Mzk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5kMDZjYjhlN2RmYjMzIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjM4OCw3ICsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZV9vcGVyYXRpb24gKmhlX29wX2llX2VsZW0pO1xuIFxuIC8qIFMxRyAqL1xuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi40N2VjNzAzZjEwOTQ5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTYzNDcsNyArNjM0Nyw2IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKVxuIHtcbkBAIC02MzYyLDExICs2MzYxLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0bWVtY3B5KGxpbmtfc3RhLVx1MDAzZWFkZHIsIGNic3MtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiBcdG1lbWNweShsaW5rX3N0YS1cdTAwM2VwdWItXHUwMDNlYWRkciwgY2Jzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFxuLVx0LyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi9cbi1cdGlmIChjYnNzLVx1MDAzZWNoYW5uZWwtXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHtcbi1cdFx0aWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7XG4rXHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXG4rXHRpZiAoY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbiBcdHNiYW5kID0gbG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlYmFuZHNbY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmRdO1xuIFxuQEAgLTcxMDcsNyArNzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsXG4rXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0ICAgYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuQEAgLTk2OTksOCArOTY5Niw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBuZXdfc3RhLFxuLVx0XHRcdFx0XHRcdCAgIGxpbmtfc3RhLCBjYnNzKTtcbitcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRzdGFfaW5mb19mcmVlKGxvY2FsLCBuZXdfc3RhKTtcbkBAIC0xMTA5MCw3ICsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLFxuK1x0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbiBcdFx0XHRcdFx0XHQgYWRkX2xpbmtzX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpKVxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuY1xuaW5kZXggNjQ3NjhhYmIwYTVmMi4uYmNjNmM0MTY3Mzk1MCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmNcbisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcbkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4gXG4gXHQvKiBUT0RPOiBjaGVjayBmb3IgbWluc3RyZWxfczFnID8gKi9cbiBcdGlmIChzYmFuZC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikge1xuLVx0XHRpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvczFnLmMgYi9uZXQvbWFjODAyMTEvczFnLmNcbmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvczFnLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zMWcuY1xuQEAgLTksMTQgKzksNiBAQFxuICNpbmNsdWRlIFwiaWVlZTgwMjExX2kuaFwiXG4gI2luY2x1ZGUgXCJkcml2ZXItb3BzLmhcIlxuIFxuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLXtcbi1cdC8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqL1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTO1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlID1cbi1cdFx0XHRTVEFfU1RBVFNfRklFTEQoVFlQRSwgU1RBX1NUQVRTX1JBVEVfVFlQRV9TMUcpO1xuLX1cbi1cbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi1cdTAwM2VkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MDAuMzA4Mzk3MDg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NjEwMDQ5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG1hYzgwMjExIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L21hYzgwMjExL2AuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyByZW1vdmluZyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdCgpYCBmdW5jdGlvbiBhbmQgYWxsIGl0cyBjYWxscy4gIFRoaXMgZnVuY3Rpb24sIGFzIEkgcmVjYWxsLCB3YXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgcmF0ZSBpbmZvcm1hdGlvbiBzcGVjaWZpY2FsbHkgZm9yIFMxRyAoU2luZ2xlLVNwYXRpYWwgU3RyZWFtIEdpZ2FiaXQpIHN0YXRpb25zIHdpdGhpbiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBzZXR0aW5nIHRoZSBgSUVFRTgwMjExX1RYX1JDX1MxR19NQ1NgIGZsYWcgaW4gYHR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFnc2AgYW5kIG1hcmtpbmcgdGhlIHJhdGUgdHlwZSBmb3IgdGhlIHJlY2VpdmUgcGF0aC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIHRob3VnaCwgaXMgd2hhdCBoYXBwZW5zIHRvIHRob3NlIGZpZWxkcyAqYWZ0ZXIqIHRoZSByZW1vdmFsLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZ29uZSwgYXJlIHdlIHBvdGVudGlhbGx5IGxlYXZpbmcgdGhvc2UgZmllbGRzIHVuaW5pdGlhbGl6ZWQ/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaWYgdGhvc2UgdmFsdWVzIGFyZSB1c2VkIGJlZm9yZSBiZWluZyBwcm9wZXJseSBzZXQgZWxzZXdoZXJlLiBXZSBrbm93IHRoYXQgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoKWAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KClgIHdlcmUgY2FsbGluZyBpdCwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBmdW5jdGlvbnMgaW4gdGhlaXIgYWJzZW5jZS5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUuIElzIGl0ICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvLWluaXRpYWxpemVkIHdpdGggc29tZXRoaW5nIGxpa2UgYGt6YWxsb2NgPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0OyB0aGF04oCZcyB3aGVyZSB0aGUgc2FmZXR5IG5ldCBsaWVzLiBMZXQgbWUgY2hlY2sgdGhlIGBzdGFfaW5mb19hbGxvY2AgZnVuY3Rpb24gb3Igc2ltaWxhciB0byBzZWUgaG93IHRoZSBgc3RhX2luZm9gIHN0cnVjdCBpcyBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBJ4oCZbGwgZmlyZSB1cCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgYW5kIGdldCBkaWdnaW5nLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYHN0YWAgc3RydWN0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24sIG9yIGVsc2UgdGhpcyBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgYSBzZXJpb3VzIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQyOjA3LjA2OTQwNDczNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzNDQwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhX2luZm9fYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz0yNjM0PXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjY3MC1cXHRpZiAocGFyYW1zLVxcdTAwM2VsaW5rX3N0YV9wYXJhbXMubGlua19pZCBcXHUwMDNlPSAwKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyNjcxOlxcdFxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzZGF0YSwgbWFjLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNjcyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBwYXJhbXMtXFx1MDAzZWxpbmtfc3RhX3BhcmFtcy5saW5rX2lkLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTI2NzUtXFx0ZWxzZVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyNjc2OlxcdFxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBtYWMsIEdGUF9LRVJORUwpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNjc3LVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYz01Njc9aWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmJzc2lkLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy02MDUtXFxubmV0L21hYzgwMjExL2lic3MuYzo2MDY6XFx0c3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIEdGUF9LRVJORUwpO1xcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjA3LVxcdGlmICghc3RhKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jPTExNDA9dm9pZCBpZWVlODAyMTFfaWJzc19yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNzUtXFxubmV0L21hYzgwMjExL2lic3MuYzoxMTc2OlxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTtcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNzctXFx0aWYgKCFzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jPTUyMj1zdGF0aWMgc3RydWN0IHN0YV9pbmZvICpcXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjUyMzpfX21lc2hfc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpod19hZGRyKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTI0LXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTM0LVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NTM1OlxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBod19hZGRyLCBHRlBfS0VSTkVMKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTUzNi1cXHRpZiAoIXN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM9NTUwPXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKlxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NTUxOm1lc2hfc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICphZGRyLFxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTUyLVxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU3Mi1cXHR9IGVsc2VcXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjU3MzpcXHRcXHRzdGEgPSBfX21lc2hfc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTc0LVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYz01OTA9bWVzaF9zdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTYwMi1cXHRcXHQvKiBjYW4ndCBydW4gYXRvbWljICovXFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo2MDM6XFx0XFx0c3RhID0gbWVzaF9zdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgZWxlbXMsIHJ4X3N0YXR1cyk7XFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYy02MDQtXFx0XFx0aWYgKCFzdGEpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9OTU5Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk2NTMtXFx0XFx0aWYgKG1sbylcXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2NTQ6XFx0XFx0XFx0bmV3X3N0YSA9IHN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzZGF0YSwgYXBfbWxkX2FkZHIsXFxubmV0L21hYzgwMjExL21sbWUuYy05NjU1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGxpbmtfaWQsIGNic3MtXFx1MDAzZWJzc2lkLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy05NjU3LVxcdFxcdGVsc2VcXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2NTg6XFx0XFx0XFx0bmV3X3N0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhcF9tbGRfYWRkciwgR0ZQX0tFUk5FTCk7XFxubmV0L21hYzgwMjExL21sbWUuYy05NjU5LVxcbi0tXFxubmV0L21hYzgwMjExL29jYi5jPTM5PXZvaWQgaWVlZTgwMjExX29jYl9yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvb2NiLmMtNzItXFxubmV0L21hYzgwMjExL29jYi5jOjczOlxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTtcXG5uZXQvbWFjODAyMTEvb2NiLmMtNzQtXFx0aWYgKCFzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zNi0gKlxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjM3OiAqIFVwb24gYWxsb2NhdGluZyBhIFNUQSBpbmZvIHN0cnVjdHVyZSB3aXRoIHN0YV9pbmZvX2FsbG9jKCksIHRoZSBjYWxsZXJcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zOC0gKiBvd25zIHRoYXQgc3RydWN0dXJlLiBJdCBtdXN0IHRoZW4gaW5zZXJ0IGl0IGludG8gdGhlIGhhc2ggdGFibGUgdXNpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTQyMz1zdGF0aWMgdm9pZCBzdGFfcmVtb3ZlX2xpbmsoc3RydWN0IHN0YV9pbmZvICpzdGEsIHVuc2lnbmVkIGludCBsaW5rX2lkLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDYyLSAqXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NDYzOiAqIFRoaXMgZnVuY3Rpb24gbXVzdCB1bmRvIGV2ZXJ5dGhpbmcgZG9uZSBieSBzdGFfaW5mb19hbGxvYygpXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDY0LSAqIHRoYXQgbWF5IGhhcHBlbiBiZWZvcmUgc3RhX2luZm9faW5zZXJ0KCkuIEl0IG1heSBvbmx5IGJlXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz01NDE9c3RhdGljIGludCBzdGFfcHJlcGFyZV9yYXRlX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01NTUtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NTU2OnN0YXRpYyBpbnQgc3RhX2luZm9fYWxsb2NfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01NTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX2luZm8sXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz02MzI9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjMzOl9fc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjM0LVxcdFxcdCBjb25zdCB1OCAqYWRkciwgaW50IGxpbmtfaWQsIGNvbnN0IHU4ICpsaW5rX2FkZHIsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy02NTAtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjUxOlxcdGlmIChzdGFfaW5mb19hbGxvY19saW5rKGxvY2FsLCBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rLCBnZnApKVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY1Mi1cXHRcXHRnb3RvIGZyZWU7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MDItXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6ODAzOnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA0LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICphZGRyLCBnZnBfdCBnZnApXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA1LXtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo4MDY6XFx0cmV0dXJuIF9fc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIC0xLCBhZGRyLCBnZnApO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTgwNy19XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA4LVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjgwOTpzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTAtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1OCAqbWxkX2FkZHIsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTQte1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjgxNTpcXHRyZXR1cm4gX19zdGFfaW5mb19hbGxvYyhzZGF0YSwgbWxkX2FkZHIsIGxpbmtfaWQsIGxpbmtfYWRkciwgZ2ZwKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTYtfVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzQxMD1pbnQgaWVlZTgwMjExX3N0YV9hbGxvY2F0ZV9saW5rKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1bnNpZ25lZCBpbnQgbGlua19pZClcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTM0MzEtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MzQzMjpcXHRyZXQgPSBzdGFfaW5mb19hbGxvY19saW5rKHNkYXRhLVxcdTAwM2Vsb2NhbCwgXFx1MDAyNmFsbG9jLVxcdTAwM2VpbmZvLCBHRlBfS0VSTkVMKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zNDMzLVxcdGlmIChyZXQpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTkxOD1zdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldF9ieV9pZHgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05MjMtICovXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTI0OnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTI1LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICphZGRyLCBnZnBfdCBnZnApO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjkyNjpzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05MjctXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1OCAqbWxkX2FkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQyOjA3LjEzODc1MzUxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk0NDk3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgU3RhdGlvbiBJbmZvcm1hdGlvbiBBbGxvY2F0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN0YXRpb24gaW5mb3JtYXRpb24gaXMgYWxsb2NhdGVkIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYF9fc3RhX2luZm9fYWxsb2NgIOKAkyB0aGF0IHNvdW5kcyBsaWtlIHRoZSByaWdodCBmdW5jdGlvbiB0byBsb29rIGF0IGZvciB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uIGxvZ2ljLiBJJ2xsIG9wZW4gdXAgYG5ldC9tYWM4MDIxMS9zdGFfaW5mby5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uIEl0J3MgdGhlIGNvcmUgb2YgaG93IHN0YXRpb25zIGFyZSBtYW5hZ2VkLCBzbyB0aGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGF0YSBzdHJ1Y3R1cmUgYW5kIGhvdyBpdOKAmXMgaGFuZGxlZC4gSG9wZWZ1bGx5LCBJJ2xsIHNlZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24sIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUsIGFuZCBhbnkgYXNzb2NpYXRlZCBzZXR1cC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MTAuNDMzMjUzMjUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzI6XFx0c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqXFxuIDYzMzpcXHRfX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiA2MzQ6XFx0XFx0XFx0IGNvbnN0IHU4ICphZGRyLCBpbnQgbGlua19pZCwgY29uc3QgdTggKmxpbmtfYWRkcixcXG4gNjM1OlxcdFxcdFxcdCBnZnBfdCBnZnApXFxuIDYzNjpcXHR7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4gNjM4OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VodztcXG4gNjM5OlxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiA2NDA6XFx0XFx0dm9pZCAqdHhxX2RhdGE7XFxuIDY0MTpcXHRcXHRpbnQgc2l6ZTtcXG4gNjQyOlxcdFxcdGludCBpO1xcbiA2NDM6XFx0XFxuIDY0NDpcXHRcXHRzdGEgPSBremFsbG9jKHNpemVvZigqc3RhKSArIGh3LVxcdTAwM2VzdGFfZGF0YV9zaXplLCBnZnApO1xcbiA2NDU6XFx0XFx0aWYgKCFzdGEpXFxuIDY0NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0c3RhLVxcdTAwM2Vsb2NhbCA9IGxvY2FsO1xcbiA2NDk6XFx0XFx0c3RhLVxcdTAwM2VzZGF0YSA9IHNkYXRhO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRpZiAoc3RhX2luZm9fYWxsb2NfbGluayhsb2NhbCwgXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaywgZ2ZwKSlcXG4gNjUyOlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0XFx0aWYgKGxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbiA2NTU6XFx0XFx0XFx0c3RhX2luZm9fYWRkX2xpbmsoc3RhLCBsaW5rX2lkLCBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rLFxcbiA2NTY6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c3RhLVxcdTAwM2VzdGEuZGVmbGluayk7XFxuIDY1NzpcXHRcXHRcXHRzdGEtXFx1MDAzZXN0YS52YWxpZF9saW5rcyA9IEJJVChsaW5rX2lkKTtcXG4gNjU4OlxcdFxcdH0gZWxzZSB7XFxuIDY1OTpcXHRcXHRcXHRzdGFfaW5mb19hZGRfbGluayhzdGEsIDAsIFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmssIFxcdTAwMjZzdGEtXFx1MDAzZXN0YS5kZWZsaW5rKTtcXG4gNjYwOlxcdFxcdH1cXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0c3RhLVxcdTAwM2VzdGEuY3VyID0gXFx1MDAyNnN0YS1cXHUwMDNlc3RhLmRlZmxpbmsuYWdnO1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c3RhLVxcdTAwM2Vsb2NrKTtcXG4gNjY1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzdGEtXFx1MDAzZXBzX2xvY2spO1xcbiA2NjY6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzdGEtXFx1MDAzZWRydl9kZWxpdmVyX3drLCBzdGFfZGVsaXZlcl9wc19mcmFtZXMpO1xcbiA2Njc6XFx0XFx0d2lwaHlfd29ya19pbml0KFxcdTAwMjZzdGEtXFx1MDAzZWFtcGR1X21sbWUud29yaywgaWVlZTgwMjExX2JhX3Nlc3Npb25fd29yayk7XFxuIDY2ODpcXHQjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG4gNjY5OlxcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuIDY3MDpcXHRcXHRcXHRzdGEtXFx1MDAzZW1lc2ggPSBremFsbG9jX29iaigqc3RhLVxcdTAwM2VtZXNoLCBnZnApO1xcbiA2NzE6XFx0XFx0XFx0aWYgKCFzdGEtXFx1MDAzZW1lc2gpXFxuIDY3MjpcXHRcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDY3MzpcXHRcXHRcXHRzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZXBsaW5rX3N0YSA9IHN0YTtcXG4gNjc0OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZXBsaW5rX2xvY2spO1xcbiA2NzU6XFx0XFx0XFx0aWYgKCFzZGF0YS1cXHUwMDNldS5tZXNoLnVzZXJfbXBtKVxcbiA2NzY6XFx0XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnN0YS1cXHUwMDNlbWVzaC1cXHUwMDNlcGxpbmtfdGltZXIsIG1lc2hfcGxpbmtfdGltZXIsXFxuIDY3NzpcXHRcXHRcXHRcXHRcXHQgICAgMCk7XFxuIDY3ODpcXHRcXHRcXHRzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZW5vbnBlZXJfcG0gPSBOTDgwMjExX01FU0hfUE9XRVJfQUNUSVZFO1xcbiA2Nzk6XFx0XFx0fVxcbiA2ODA6XFx0I2VuZGlmXFxuIDY4MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MTAuNDMzNDY5NTkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDg4MDkyMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTMUcgSW5pdGlhbGl6YXRpb24gUmVtb3ZhbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGlzIHRoYXQgdGhlIGBzdGFgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBpdHMgZmllbGRzIHN0YXJ0IGF0IHplcm8uIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aGUgcmVtb3ZhbCBvZiBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YC4gVGhpcyBmdW5jdGlvbiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgc29tZSBmbGFncyByZWxhdGVkIHRvIFMxRyBNQ1MgYW5kIGEgc3BlY2lmaWMgcmF0ZSB0eXBlIHdpdGhpbiB0aGUgYHN0YWAgc3RydWN0dXJlJ3MgYGRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlYCBhbmQgYGRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCBmaWVsZHMuXG5cblNpbmNlIHRoZSBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBieSBga3phbGxvY2AsIHJlbW92aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBzY2VuYXJpb3MuIFRoZSByZWxldmFudCBmaWVsZHMgd2lsbCBzaW1wbHkgcmVtYWluIGF0IHRoZWlyIGRlZmF1bHQgemVybyB2YWx1ZXMuIFRoaXMgaXMgbm90IHRoZSB0eXBlIG9mIGlzc3VlIHRoYXQgS01TQU4sIGFzIGEgdG9vbCBmb3IgZGV0ZWN0aW5nIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIHdvdWxkIGZsYWcuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGxvZ2ljYWwgY2hhbmdlLCBhIGRlY2lzaW9uIHRvICpub3QqIHNldCBjZXJ0YWluIGZsYWdzIG9yIHR5cGVzLCByYXRoZXIgdGhhbiBhIHNjZW5hcmlvIHdoZXJlIG1lbW9yeSBpcyB1c2VkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvLlxuXG5GdXJ0aGVybW9yZSwgdGhlIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBmdW5jdGlvbidzIHNpZ25hdHVyZSBjaGFuZ2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGBzdGFgIGFyZ3VtZW50IGlzIHJlbW92ZWQuIFRoaXMgYXJndW1lbnQgd2FzIG9ubHkgdXNlZCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHRoYXQncyBub3cgcmVtb3ZlZC4gVGhlIGxvZ2ljIGZsb3cgaXMgdGhhdCB0aGUgYGxpbmtfc3RhYCBzdHJ1Y3R1cmUgaXMgdXNlZCBpbnN0ZWFkLCB3aGljaCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSB0aGUgc2FtZSBpbml0aWFsaXphdGlvbiByZXF1aXJlbWVudHMuXG5cbkkndmUgYWxzbyBkb3VibGUtY2hlY2tlZCB3aGVyZSBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCB3YXMgcmVtb3ZlZCBpbiBvdGhlciBwbGFjZXMsIHNwZWNpZmljYWxseSBpbiBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCB0aGUgc2FtZSByZWFzb25pbmcgYXBwbGllcy4gVGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBhcmlzZSBoZXJlLCBlaXRoZXIuXG5cblRoZXJlZm9yZSwgdGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgbG9naWNhbCBlcnJvcnMsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlJ3MganVzdCBhIGZ1bmN0aW9uYWwgcmVncmVzc2lvbi4gQnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIGlzIG5vdCBnb2luZyB0byBwcm92aWRlIGFueSB2YWx1ZSBoZXJlLiBJIGFtIGNvbmZpZGVudCB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjgxLCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MjozNy41MjE1NjM2MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc29tZSByYXRlIGZsYWdzIChgc3RhLVxcdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFnc2AgYW5kIGBzdGEtXFx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc29tZSByYXRlIGZsYWdzIChgc3RhLVxcdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFnc2AgYW5kIGBzdGEtXFx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 05:57:38 +0000 UTC FinishedAt: 2026-08-27 06:42:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211" ], "series_id": "f36cc8b8-ec6a-4927-b423-d924acba76e2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_sta_rx_queued_frame", "ieee80211_mgd_auth", "ieee80211_mgd_assoc", "rate_control_rate_init", "rate_control_rate_init_all_links" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hdXRoJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ2RfYXNzb2MmIzM0OywKICAgICYjMzQ7cmF0ZV9jb250cm9sX3JhdGVfaW5pdCYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc29tZSByYXRlIGZsYWdzIChgc3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzYCBhbmQgYHN0YS1cdTAwM2VkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZWApIGZvciBTMUcgc3RhdGlvbnMuIFRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgICh2aWEgYF9fc3RhX2luZm9fYWxsb2NgKSwgbWVhbmluZyBhbGwgaXRzIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBSZW1vdmluZyB0aGlzIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG1lcmVseSBsZWF2ZXMgdGhlc2UgZmllbGRzIGFzIHplcm8sIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgY2hhbmdlIHdvdWxkIGJlIGZ1bmN0aW9uYWwgYnVncyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHRoYXQgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmQ0NTA1NmFlZWU2Mzc2Y2M1N2FhYWEwMzRiNmI2ZDEzMDQ4M2M4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjM5OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDU3NjFlOTYyMTQ5MTQuLmQwNmNiOGU3ZGZiMzMgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0yMzg4LDcgJiM0MzsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZV9vcGVyYXRpb24gKmhlX29wX2llX2VsZW0pO1xuIFxuIC8qIFMxRyAqL1xuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi40N2VjNzAzZjEwOTQ5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTYzNDcsNyAmIzQzOzYzNDcsNiBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2NfY29uZmlnX2xpbmsoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbi1cdFx0XHRcdFx0c3RydWN0IHN0YV9pbmZvICpzdGEsXG4gXHRcdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcbiBcdFx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcylcbiB7XG5AQCAtNjM2MiwxMSAmIzQzOzYzNjEsOSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4gXHRtZW1jcHkobGlua19zdGEtXHUwMDNlYWRkciwgY2Jzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFx0bWVtY3B5KGxpbmtfc3RhLVx1MDAzZXB1Yi1cdTAwM2VhZGRyLCBjYnNzLVx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XG4gXG4tXHQvKiBUT0RPOiBTMUcgQmFzaWMgUmF0ZSBTZXQgaXMgZXhwcmVzc2VkIGVsc2V3aGVyZSAqL1xuLVx0aWYgKGNic3MtXHUwMDNlY2hhbm5lbC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikge1xuLVx0XHRpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTtcbiYjNDM7XHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXG4mIzQzO1x0aWYgKGNic3MtXHUwMDNlY2hhbm5lbC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWilcbiBcdFx0cmV0dXJuIDA7XG4tXHR9XG4gXG4gXHRzYmFuZCA9IGxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZWJhbmRzW2Nic3MtXHUwMDNlY2hhbm5lbC1cdTAwM2ViYW5kXTtcbiBcbkBAIC03MTA3LDcgJiM0Mzs3MTA0LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSxcbiYjNDM7XHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0ICAgYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuQEAgLTk2OTksOCAmIzQzOzk2OTYsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4gXG4tXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbmV3X3N0YSxcbi1cdFx0XHRcdFx0XHQgICBsaW5rX3N0YSwgY2Jzcyk7XG4mIzQzO1x0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLCBjYnNzKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIG5ld19zdGEpO1xuQEAgLTExMDkwLDcgJiM0MzsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLFxuJiM0MztcdFx0aWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0IGFkZF9saW5rc19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcbiBcdFx0XHRnb3RvIGRpc2Nvbm5lY3Q7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcbmluZGV4IDY0NzY4YWJiMGE1ZjIuLmJjYzZjNDE2NzM5NTAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvcmF0ZS5jXG5AQCAtNTcsNyAmIzQzOzU3LDYgQEAgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcbiBcbiBcdC8qIFRPRE86IGNoZWNrIGZvciBtaW5zdHJlbF9zMWcgPyAqL1xuIFx0aWYgKHNiYW5kLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7XG4tXHRcdGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zMWcuYyBiL25ldC9tYWM4MDIxMS9zMWcuY1xuaW5kZXggODI1ZmNmM2Y5MDliZS4uN2Y4OTc1NTJjNjg2ZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zMWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3MxZy5jXG5AQCAtOSwxNCAmIzQzOzksNiBAQFxuICNpbmNsdWRlIFwmIzM0O2llZWU4MDIxMV9pLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtkcml2ZXItb3BzLmhcJiMzNDtcbiBcbi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi17XG4tXHQvKiBhdm9pZCBpbmRpY2F0aW5nIGxlZ2FjeSBiaXRyYXRlcyBmb3IgUzFHIFNUQXMgKi9cbi1cdHN0YS1cdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfUzFHX01DUztcbi1cdHN0YS1cdTAwM2VkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZSA9XG4tXHRcdFx0U1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKTtcbi19XG4tXG4gYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItXHUwMDNlZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfbWdkX2F1dGgmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hc3NvYyYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0JiMzNDssCiAgICAmIzM0O3JhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgc2V0IHNwZWNpZmljIGZsYWdzIGZvciBTMUcgU1RBcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgbWFjODAyMTFfaHdzaW0uIFRoZSBjaGFuZ2VzIGFmZmVjdCBzdGF0aW9uIGxpbmsgc2V0dXAgYW5kIHJhdGUgY29udHJvbCBpbml0aWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkNDUwNTZhZWVlNjM3NmNjNTdhYWFhMDM0YjZiNmQxMzA0ODNjOGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjozOTo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggNTc2MWU5NjIxNDkxNC4uZDA2Y2I4ZTdkZmIzMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTIzODgsNyAmIzQzOzIzODgsNiBAQCBpZWVlODAyMTFfaGVfb3BfaWVfdG9fYnNzX2NvbmYoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGVfb3BlcmF0aW9uICpoZV9vcF9pZV9lbGVtKTsKIAogLyogUzFHICovCi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpZWVlODAyMTFfczFnX3J4X3R3dF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uNDdlYzcwM2YxMDk0OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC02MzQ3LDcgJiM0Mzs2MzQ3LDYgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLAogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCi0JCQkJCXN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsCiAJCQkJCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3MpCiB7CkBAIC02MzYyLDExICYjNDM7NjM2MSw5IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaywKIAltZW1jcHkobGlua19zdGEtJmd0O2FkZHIsIGNic3MtJmd0O2Jzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KGxpbmtfc3RhLSZndDtwdWItJmd0O2FkZHIsIGNic3MtJmd0O2Jzc2lkLCBFVEhfQUxFTik7CiAKLQkvKiBUT0RPOiBTMUcgQmFzaWMgUmF0ZSBTZXQgaXMgZXhwcmVzc2VkIGVsc2V3aGVyZSAqLwotCWlmIChjYnNzLSZndDtjaGFubmVsLSZndDtiYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikgewotCQlpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTsKJiM0MzsJLyogUzFHIGRvZXMgbm90IHVzZSBiYXNpYyByYXRlcyAqLwomIzQzOwlpZiAoY2Jzcy0mZ3Q7Y2hhbm5lbC0mZ3Q7YmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopCiAJCXJldHVybiAwOwotCX0KIAogCXNiYW5kID0gbG9jYWwtJmd0O2h3LndpcGh5LSZndDtiYW5kc1tjYnNzLSZndDtjaGFubmVsLSZndDtiYW5kXTsKIApAQCAtNzEwNyw3ICYjNDM7NzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJfQogCQl9CiAKLQkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLAomIzQzOwkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwKIAkJCQkJCSAgIGFzc29jX2RhdGEtJmd0O2xpbmtbbGlua19pZF0uYnNzKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2VycjsKQEAgLTk2OTksOCAmIzQzOzk2OTYsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KIAotCQllcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIG5ld19zdGEsCi0JCQkJCQkgICBsaW5rX3N0YSwgY2Jzcyk7CiYjNDM7CQllcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLCBjYnNzKTsKIAkJaWYgKGVycikgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlzdGFfaW5mb19mcmVlKGxvY2FsLCBuZXdfc3RhKTsKQEAgLTExMDkwLDcgJiM0MzsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJZ290byBkaXNjb25uZWN0OwogCQl9CiAKLQkJaWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSwKJiM0MzsJCWlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLAogCQkJCQkJIGFkZF9saW5rc19kYXRhLSZndDtsaW5rW2xpbmtfaWRdLmJzcykpCiAJCQlnb3RvIGRpc2Nvbm5lY3Q7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmMgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCmluZGV4IDY0NzY4YWJiMGE1ZjIuLmJjYzZjNDE2NzM5NTAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3JhdGUuYwpAQCAtNTcsNyAmIzQzOzU3LDYgQEAgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSkKIAogCS8qIFRPRE86IGNoZWNrIGZvciBtaW5zdHJlbF9zMWcgPyAqLwogCWlmIChzYmFuZC0mZ3Q7YmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHsKLQkJaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3MxZy5jIGIvbmV0L21hYzgwMjExL3MxZy5jCmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zMWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvczFnLmMKQEAgLTksMTQgJiM0Mzs5LDYgQEAKICNpbmNsdWRlICYjMzQ7aWVlZTgwMjExX2kuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2RyaXZlci1vcHMuaCYjMzQ7CiAKLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCS8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqLwotCXN0YS0mZ3Q7ZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1MxR19NQ1M7Ci0Jc3RhLSZndDtkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZSA9Ci0JCQlTVEFfU1RBVFNfRklFTEQoVFlQRSwgU1RBX1NUQVRTX1JBVEVfVFlQRV9TMUcpOwotfQotCiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0mZ3Q7ZGF0YTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uOiBTMUcgU1RBIFJhdGUgSW5pdGlhbGl6YXRpb24gUmVtb3ZhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIGBtYWM4MDIxMWAgZmlsZXM6IGBtbG1lLmNgLCBgcmF0ZS5jYCwgYHMxZy5jYCwgYW5kIGBpZWVlODAyMTFfaS5oYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmdW5jdGlvbiBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIGNhbGxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDt3aHk/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8mIzM0OwoKVGhlIGRlc2NyaXB0aW9uIHN0YXRlcyB0aGlzIGZ1bmN0aW9uIHdhcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGZsYWdzIHNwZWNpZmljIHRvIFMxRyBTVEFzLiBTbywgaXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBidWcgZml4PyBXaGF0IHdlcmUgdGhvc2UgZmxhZ3MgYW5kIHdoeSBhcmUgdGhleSBubyBsb25nZXIgbmVlZGVkPyBJIG5lZWQgbW9yZSBkZXRhaWwgaGVyZSwgYnV0IEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIGNvbnNpZGVyaW5nIGlzLCBob3cgY2FuIEkgZXZhbHVhdGUgdGhpcyBwcm9wZXJseT8gQ2FuIEkgZXZlbiByZXByb2R1Y2UgdGhlIHNjZW5hcmlvPyBXZWxsLCBzaW5jZSB0aGlzIGlzIGluIGBtYWM4MDIxMWAsIHdoaWNoIGlzIHRoZSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtLCBJIGNhbiB1c2UgYSBgbWFjODAyMTFfaHdzaW1gIGVudmlyb25tZW50LiBUaGF0IG1lYW5zLCB5ZXMsIEkgY2FuIGFic29sdXRlbHkgcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBhIGJpZyByZWxpZWYuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciB3aGF0IGlzIG5lZWRlZCB0byByZXByb2R1Y2UgdGhlIGlzc3VlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBJIHRoaW5rIGlzIG5lZWRlZC4gSSBrbm93IEkgbmVlZCBgQ09ORklHX01BQzgwMjExYCBlbmFibGVkLCBidXQgSSBzaG91bGQgbG9vayBmb3Igb3RoZXJzIGZvciBgczFnYCBjb25maWd1cmF0aW9uLgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MDQKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YWAgaW4gYG5ldC9tYWM4MDIxMS9tbG1lLmNgLiBSaWdodCwgdGhhdCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHdlIHNldCB1cCB0aGUgc3RhdGlvbiBsaW5rIGZvciBtYW5hZ2VkIG1vZGUsIGlzbiYjMzk7dCBpdD8gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWxsIGFib3V0LiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIHRoZSBzcGVjaWZpYyByZXNwb25zaWJpbGl0aWVzIG9mIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCB3aXRoaW4gdGhlIGxhcmdlciBNQUM4MDIxMSBjb250ZXh0LiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhhY3Qgcm9sZSBpbiB0aGUgbGluayBlc3RhYmxpc2htZW50IHByb2Nlc3MsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIE1MTUUgYW5kIHBvdGVudGlhbGx5IG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQgdGhlIGludGVuZGVkIGltcGFjdCBpcywgY29uc2lkZXJpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21sbWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTU4NTQ9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtNjM0OC1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6NjM0OTpzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG5uZXQvbWFjODAyMTEvbWxtZS5jLTYzNTAtXHRcdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTY5NzY9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy03MTA2LVxubmV0L21hYzgwMjExL21sbWUuYzo3MTA3Olx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLFxubmV0L21hYzgwMjExL21sbWUuYy03MTA4LVx0XHRcdFx0XHRcdCAgIGFzc29jX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9OTU5Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05Njk4LVxubmV0L21hYzgwMjExL21sbWUuYzo5Njk5Olx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLCBjYnNzKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTcwMC1cdFx0aWYgKGVycikge1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTA5MTg9aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0xMTA4OC1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTEwODk6XHRcdGlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLFxubmV0L21hYzgwMjExL21sbWUuYy0xMTA5MC1cdFx0XHRcdFx0XHQgYWRkX2xpbmtzX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIHN0dWZmIGluIGBtYWM4MDIxMWAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZ2V0dGluZyByaWQgb2YgdGhlIGBzdGFgIHBhcmFtZXRlciBmcm9tIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBhbmQgYWxzbyByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmcm9tIGBuZXQvbWFjODAyMTEvczFnLmNgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHJlbGF0aXZlbHkgbWlub3Igb25lLCBidXQgaXQgZG9lcyByZW1vdmUgdGhlIHNldHRpbmcgb2YgYElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTYCBhbmQgYFNUQV9TVEFUU19GSUVMRChUWVBFLCBTVEFfU1RBVFNfUkFURV9UWVBFX1MxRylgIGZsYWdzIGZvciBTMUcgU1RBcy4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggYSBkZWVwZXIgZGl2ZSwgZXNwZWNpYWxseSBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBJdCYjMzk7cyB0b3VjaGluZyBgbWFjODAyMTFgLCBhbmQgd2Uga25vdyBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgZGVjZW50IHRlc3Rpbmcgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIGdvb2QgZm9jdXMgc3ltYm9scyB0byBjaGVjayBhcm91bmQgdGhpcyBjaGFuZ2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdGhlIHBhcnRzIGJlaW5nIGNoYW5nZWQgb3IgcmVsYXRlZCB0byB0aGUgcmVsYXRlZCBjb25jZXB0cywgbGlrZSBhc3NvY2lhdGlvbiwgcmF0ZSBjb250cm9sIG9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjbG9zZSBieS4KCkhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBpZGVudGlmaWVkOgoKKiAgIGBpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc2AKKiAgIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYAoqICAgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYAoqICAgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgCgpOb3cgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXNlIHN5bWJvbHMgYXJlIHN0YXRpYywgYXMgc3RhdGljIHN5bWJvbHMgY2FuIGJlIGEgZ29vZCBjbHVlIHRvIGFuIGlzb2xhdGVkIGFyZWEgdGhhdCBjb3VsZCBiZSB0YXJnZXRlZC4gSSYjMzk7dmUgZm91bmQgYGllZWU4MDIxMV9hc3NvY19zdWNjZXNzYCBhbmQgYGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb25gIGFyZSBzdGF0aWMsIHdoaWxlIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhcmUgbm90LiBHb29kLCB0aGlzIGdpdmVzIG1lIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTEwOTE3PXN0YXRpYyB2b2lkXG5uZXQvbWFjODAyMTEvbWxtZS5jOjEwOTE4OmllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21sbWUuYy0xMDkxOS1cdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz0xMTgwOD12b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE5NDUtXHRcdFx0Y2FzZSBXTEFOX1BST1RFQ1RFRF9FSFRfQUNUSU9OX0xJTktfUkVDT05GSUdfUkVTUDpcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE5NDY6XHRcdFx0XHRpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcChzZGF0YSwgbWdtdCxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE5NDctXHRcdFx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBsYXJnZXIgODAyLjExIGZyYW1ld29yay4gVGhlIGltcGxpY2F0aW9ucyBvZiAmIzM0O3N0YXRpYyYjMzQ7IGFyZSBpbXBvcnRhbnQgaGVyZTsgaXQgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQmIzM5O3MgYSBnb29kIGRlc2lnbiBjaG9pY2UsIGdpdmVuIGl0cyByb2xlIGluIGhhbmRsaW5nIHJlY29uZmlndXJhdGlvbnMuIElzIGl0IGVmZmVjdGl2ZWx5IGVuY2Fwc3VsYXRlZCwgb3IgaXMgaXQgYSBzaWduIG9mIHBvdGVudGlhbCBjb2RlIHNtZWxsIGRvd24gdGhlIGxpbmU/CgpOZXh0LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGNvbnNpZGVyIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YC4gVGhpcyBpcyBjcnVjaWFsLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJhdGUgY29udHJvbCwgd2hpY2ggaXMgYSBmYWlybHkgY29tcGxleCBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBjYW4gdmFyeSBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB0aGUgZGVzaWduIGFuZCBoYXJkd2FyZSwgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC4gV2hhdCBhcmUgdGhlIGlucHV0cyB0byB0aGlzIGZ1bmN0aW9uPyBJcyBpdCBoYW5kbGluZyB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyBvZiB0aGUgbGluaywgb3IgaXMgdGhlcmUgYSBnZW5lcmFsIHJhdGUgdGFibGUgb3IgYSBzcGVjaWZpYyByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHRoYXQmIzM5O3MgYmVpbmcgc2V0IHVwPyBMZXQmIzM5O3MgdHJhY2UgaG93IHRoZSBkYXRhIGlzIGJlaW5nIHBhc3NlZCBhcm91bmQsIGhvdyB0aGUgcmF0ZSB0YWJsZXMgYXJlIGJlaW5nIGJ1aWx0LCBvciB3aGV0aGVyIGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXNpZ24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWF0aW9uIHByb2Nlc3MgaXMgY3JpdGljYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBlbnN1cmluZyBzZWFtbGVzcyBhZGFwdGF0aW9uIHRvIGNoYW5naW5nIGNoYW5uZWwgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJhdGUgY29udHJvbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhdGVfY29udHJvbF9yYXRlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz0yMTMwPXN0YXRpYyBpbnQgc3RhX2FwcGx5X2F1dGhfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIxNTItXHRcdGlmICghdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX1JBVEVfQ09OVFJPTCkpXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1MzpcdFx0XHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdGEpO1xubmV0L21hYzgwMjExL2NmZy5jLTIxNTQtXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI2MzQ9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjcwMC1cdCAgICB0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpKVxubmV0L21hYzgwMjExL2NmZy5jOjI3MDE6XHRcdHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0YSk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjcwMi1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTgxOT1pZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01ODUyLVx0XHRsaW5rX3N0YSA9IHNkYXRhX2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3BhcmFtcy1cdTAwM2VsaW5rX2lkXSwgc2RhdGEpO1xubmV0L21hYzgwMjExL2NmZy5jOjU4NTM6XHRcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xubmV0L21hYzgwMjExL2NmZy5jLTU4NTQtXHR9XG4tLVxubmV0L21hYzgwMjExL2lic3MuYz01Mzg9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfZmluaXNoX3N0YShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jLTU1Ny1cbm5ldC9tYWM4MDIxMS9pYnNzLmM6NTU4Olx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcdTAwMjZzdGEtXHUwMDNlZGVmbGluayk7XG5uZXQvbWFjODAyMTEvaWJzcy5jLTU1OS1cbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTkyNj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdXBkYXRlX3N0YV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTAzNC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmsuY29uZi1cdTAwM2VjaGFucmVxLm9wZXIpO1xubmV0L21hYzgwMjExL2lic3MuYzoxMDM1Olx0XHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKTtcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTAzNi1cdFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5yeF9uc3MgIT0gcnhfbnNzKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM9NDIzPXN0YXRpYyB2b2lkIG1lc2hfc3RhX2luZm9faW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTQ4Ny1cdGlmICghdGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX1JBVEVfQ09OVFJPTCkpXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjQ4ODpcdFx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcdTAwMjZzdGEtXHUwMDNlZGVmbGluayk7XG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTQ4OS1cdGVsc2Vcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTY5NzY9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy03MTMzLVxubmV0L21hYzgwMjExL21sbWUuYzo3MTM0Olx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3Moc3RhKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEzNS1cbi0tXG5uZXQvbWFjODAyMTEvb2NiLmM9ODc9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX29jYl9maW5pc2hfc3RhKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9vY2IuYy0xMDQtXG5uZXQvbWFjODAyMTEvb2NiLmM6MTA1Olx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcdTAwMjZzdGEtXHUwMDNlZGVmbGluayk7XG5uZXQvbWFjODAyMTEvb2NiLmMtMTA2LVxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM9Mjg9TU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmMtMzAtXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjMxOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMyLXtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTcxLVxubmV0L21hYzgwMjExL3JhdGUuYzo3Mjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxubmV0L21hYzgwMjExL3JhdGUuYy03My17XG4tLVxubmV0L21hYzgwMjExL3JhdGUuYy04Mi1cbm5ldC9tYWM4MDIxMS9yYXRlLmM6ODM6XHRcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xubmV0L21hYzgwMjExL3JhdGUuYy04NC1cdH1cbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oPTI5PXZvaWQgcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTMxLVxubmV0L21hYzgwMjExL3JhdGUuaDozMjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKTtcbm5ldC9tYWM4MDIxMS9yYXRlLmg6MzM6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XG5uZXQvbWFjODAyMTEvcmF0ZS5oLTM0LXZvaWQgcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmF0ZSBDb250cm9sIEluaXRpYWxpemF0aW9uIGluIHRoZSBtYWM4MDIxMSBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHJhdGUgY29udHJvbCBpcyBpbml0aWFsaXplZCBpbiB0aGlzIG1hYzgwMjExIGNvZGUsIGFuZCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC4gRmlyc3Qgb2ZmLCBJJiMzOTttIG5vdGljaW5nIHRoYXQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNhbWUgZ29lcyBmb3IgYHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzYCBhbmQgYGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIGFsbCBsaW5rZWQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgd2FzIGdvaW5nIHRvIGNoZWNrIGBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cGAgaW4gYG5ldC9tYWM4MDIxMS9zMWcuY2AsIGJ1dCB3YWl0Li4uIHRoaXMgcGF0Y2ggcmVtb3ZlZCBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLiBSaWdodCwgdGhlIGNhbGxzIHdlcmUgaW4gYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAuIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyBzdGF0aWMgYnV0IGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBpcyBub3QuIFRoaXMgbWFrZXMgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdD8gT2theSwgYGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uYCBjYWxscyBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgaWVlZTgwMjExX2FkZF9zdGF0aW9uYCBjYWxscyBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSSBzZWUgdGhhdCBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgLCBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAsIGFuZCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgIGFyZSBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIHByb2JhYmx5IG5vdCBhcyBpbXBvcnRhbnQgdG8gbG9vayBhdCByaWdodCBub3cuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgY2hlY2sgdGhhdCBgaWVlZTgwMjExX2FkZF9zdGF0aW9uYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9hZGRfc3RhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTI0NTA9c3RhdGljIGludCBzdGFfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjYzMy1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyNjM0OnN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjYzNS1cdFx0XHRcdCBjb25zdCB1OCAqbWFjLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5MC1cdC5zdG9wX2FwID0gaWVlZTgwMjExX3N0b3BfYXAsXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5MTpcdC5hZGRfc3RhdGlvbiA9IGllZWU4MDIxMV9hZGRfc3RhdGlvbixcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTkyLVx0LmRlbF9zdGF0aW9uID0gaWVlZTgwMjExX2RlbF9zdGF0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqU3RhdGljIHZzLiBOb24tU3RhdGljIFN0YXRpb24gQWRkaXRpb24qKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHdpcmVsZXNzIGRyaXZlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggYWRkaW5nIHN0YXRpb25zLiBUaGUgZmFjdCB0aGF0IGBpZWVlODAyMTFfYWRkX3N0YXRpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGF0IG1lYW5zIGl0IGhhcyBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB1c3VhbGx5IGluZGljYXRpbmcgaXQmIzM5O3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgbG9naWMuIEl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZXh0ZXJuYWxseS4gSXQgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBsb3ctbGV2ZWwgYXBwcm9hY2ggdG8gc3RhdGlvbiBhZGRpdGlvbi4gSSYjMzk7ZCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBleGFjdCByb2xlLCBidXQgdGhlIGBzdGF0aWNgIGtleXdvcmQgcG9pbnRzIHRvIHRoYXQgaW50ZXJuYWwgZm9jdXMuCgpUaGVuLCB0aGVyZSYjMzk7cyBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gLCB3aGljaCAqaXNuJiMzOTt0KiBgc3RhdGljYC4gVGhhdCYjMzk7cyB0aGUga2V5IGRpZmZlcmVuY2UuIFRoaXMgdGVsbHMgbWUgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBwcm9iYWJseSBwYXJ0IG9mIHRoZSBkcml2ZXImIzM5O3MgcHVibGljIEFQSSBvciBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UuIEl0cyBub24tYHN0YXRpY2Agc3RhdHVzIGltcGxpZXMgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IG90aGVyIG1vZHVsZXMgb3IgcGFydHMgb2YgdGhlIHN5c3RlbSwgcG90ZW50aWFsbHkgZXZlbiBieSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBvciBvdGhlciBkcml2ZXJzLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIG1vcmUgY29tcGxleCwgaGlnaGVyLWxldmVsIGFzcGVjdHMgb2Ygc3RhdGlvbiBhZGRpdGlvbiwgcGVyaGFwcyBtYW5hZ2luZyBsaW5rLXNwZWNpZmljIGRhdGEgb3IgaW50ZXJhY3Rpbmcgd2l0aCBuZXR3b3JrIG1hbmFnZW1lbnQgZnJhbWV3b3Jrcy4gVGhlICYjMzk7bGluayYjMzk7IGluIGl0cyBuYW1lIGlzIGFub3RoZXIgaW1wb3J0YW50IGNsdWUg4oCTIGl04oCZcyBwcm9iYWJseSBmb2N1c2VkIG9uIGFkZGluZyBzdGF0aW9ucyByZWxhdGVkIHRvIHNwZWNpZmljIGxpbmtzIG9yIGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QgYW5kIHdoYXQgc3BlY2lmaWMgc2NlbmFyaW9zIGVhY2ggaGFuZGxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01ODE4PXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxMS9jZmcuYzo1ODE5OmllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTgyMC1cdFx0XHQgICBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTYwODMtXHQuZGVsX2ludGZfbGluayA9IGllZWU4MDIxMV9kZWxfaW50Zl9saW5rLFxubmV0L21hYzgwMjExL2NmZy5jOjYwODQ6XHQuYWRkX2xpbmtfc3RhdGlvbiA9IGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uLFxubmV0L21hYzgwMjExL2NmZy5jLTYwODUtXHQubW9kX2xpbmtfc3RhdGlvbiA9IGllZWU4MDIxMV9tb2RfbGlua19zdGF0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gRnVuY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBteSBmaXJzdCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBpZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBuYXJyb3dpbmcgZG93biB0aGUgc2NvcGUuIEkgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7V2hlcmUgZG9lcyB0aGUgc3RhdGlvbiBsaW5rIGluZm9ybWF0aW9uIGdldCBpbml0aWFsaXplZD8mIzM0OyBUaGlzIGxlYWRzIG1lIHRvIGZvY3VzIG9uIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzYCBhcyBwcm9taXNpbmcgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaG9zZSBzZWVtIGxpa2UgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIG1hbmFnaW5nIHRoZSByYXRlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBkdXJpbmcgbGluayBzZXR1cCwgd2hpY2ggaXMgbXkgbWFpbiBpbnRlcmVzdC4KCk5vdywgSSYjMzk7bSBwaXZvdGluZyB0byBjb25zaWRlciBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgLiBJIHNlZSB0aGF0ICppdCogaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFRoaXMgcGlxdWVzIG15IGN1cmlvc2l0eS4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCBpbXBsaWVzIHRoYXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpcyB0aGF0ICphY3R1YWxseSogdGhlIGNhc2U/IFRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICoqaXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgPyoqIEZpbmRpbmcgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLCBpZiBvbmUgZXhpc3RzLCBjb3VsZCBsZWFkIG1lIHRvIGEgdmFsdWFibGUgcG9pbnQgb2YgaW50ZWdyYXRpb24uIElmIG5vdCwgdGhlbiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgYXMgdGhleSByZWxhdGUuIE15IG5leHQgc3RlcHMgaGluZ2Ugb24gYW5zd2VyaW5nIHRoaXMgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9hc3NvY19zdWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTY4OTE9aWVlZTgwMjExX3BhcnNlX2Fkdl90Mmwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy02OTc1LVxubmV0L21hYzgwMjExL21sbWUuYzo2OTc2OnN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21sbWUuYy02OTc3LVx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTcxODc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTczNTktXG5uZXQvbWFjODAyMTEvbWxtZS5jOjczNjA6XHRcdGlmICghaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc2RhdGEsIG1nbXQsIGVsZW1zLFxubmV0L21hYzgwMjExL21sbWUuYy03MzYxLVx0XHRcdFx0XHQgICAgIGVsZW1fc3RhcnQsIGVsZW1fbGVuKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3BgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSwgZnJvbSBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBhbmQgdGhlIGNvbnRleHQgaXQmIzM5O3MgdXNlZCBpbiwgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpzdGF0aWMqLiBUaGF04oCZcyB0aGUga2V5IG9ic2VydmF0aW9uIGhlcmUuIEl0JiMzOTtzIG5vdCBleHRlcm5hbGx5IHZpc2libGUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgcGFydCBvZiBhbnkgcHVibGljIEFQSSwgbm9yIGlzIGl0IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMsIGJ1dCBpcyBvbmx5IHVzZWQgbG9jYWxseSB3aXRoaW4gdGhpcyBtb2R1bGUuIFRoaXMgaW1wYWN0cyBob3cgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIDgwMi4xMSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byByZWFzb24gYWJvdXQgaXQgaW4gaXNvbGF0aW9uLCBrbm93aW5nIEkgaGF2ZSBhIGxpbWl0ZWQgc2NvcGUgb2YgaW50ZXJhY3Rpb24gdG8gY29uc2lkZXIuIFRoaXMgYWxzbyBtZWFucyBhbnkgcmVmYWN0b3Jpbmcgd291bGQgcHJvYmFibHkgb25seSByZXF1aXJlIGNoYW5nZXMgd2l0aGluIHRoZSBleGlzdGluZyBtb2R1bGUuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwbHVzIGZvciBtYWludGFpbmFiaWxpdHkhIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvICp3aGF0KiB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2llZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxODYtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxODc6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzE4OC1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTExODA4PXZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy0xMTg1NS1cdGNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDpcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE4NTY6XHRcdGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi1cdTAwM2VsZW4pO1xubmV0L21hYzgwMjExL21sbWUuYy0xMTg1Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBGcmFtZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lYCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyAqbm90KiBzdGF0aWMuIEFscmlnaHQsIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIHRoZSBsYXJnZXIgY29udGV4dC4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBwaXZvdCBhbmQgZG91YmxlIGNoZWNrIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYC4gSSBiZXQgdGhlcmUmIzM5O3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgd2F5IHRoZSBjb25uZWN0aW9uIGlzIHByZXBwZWQgYW5kIHRoaXMgcXVldWVkIGZyYW1lIGhhbmRsZXIuIE1ha2VzIHNlbnNlIHRvIGxvb2sgYXQgdGhhdCBuZXh0LiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05NTkyLVxubmV0L21hYzgwMjExL21sbWUuYzo5NTkzOnN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTU5NC1cdFx0XHRcdCAgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcywgczggbGlua19pZCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk4OTQ9aW50IGllZWU4MDIxMV9tZ2RfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk5ODUtXHQgKiByZW1vdmFsIGFuZCByZS1hZGRpdGlvbiBvZiB0aGUgU1RBIGVudHJ5IGluXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk5ODY6XHQgKiBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKCkuXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk5ODctXHQgKi9cbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTEwMDYxLVxubmV0L21hYzgwMjExL21sbWUuYzoxMDA2MjpcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIHJlcS1cdTAwM2Vic3MsIHJlcS1cdTAwM2VsaW5rX2lkLFxubmV0L21hYzgwMjExL21sbWUuYy0xMDA2My1cdFx0XHRcdFx0cmVxLVx1MDAzZWFwX21sZF9hZGRyLCBjb250X2F1dGgsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz0xMDMxNz1pbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTEwNjY4LVxubmV0L21hYzgwMjExL21sbWUuYzoxMDY2OTpcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIGNic3MsIHJlcS1cdTAwM2VsaW5rX2lkLFxubmV0L21hYzgwMjExL21sbWUuYy0xMDY3MC1cdFx0XHRcdFx0cmVxLVx1MDAzZWFwX21sZF9hZGRyLCB0cnVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgV2lyZWxlc3MgRHJpdmVyIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2Ugd2lyZWxlc3MgZHJpdmVycyBpbml0aWFsaXplLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3RhdGlvbiBtYW5hZ2VtZW50LiBgaWVlZTgwMjExX21nZF9hdXRoYCBhbmQgYGllZWU4MDIxMV9tZ2RfYXNzb2NgIGRlZmluaXRlbHkgYXJlbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3Igd2hhdCB3ZSBjYW4gbGV2ZXJhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyB0aGVzZSBpbnRlcmFjdCB3aXRoIGtleSBmdW5jdGlvbnMgbGlrZSBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCB3aGljaCBJIHN1c3BlY3QgaXMgY2VudHJhbCB0byBmcmFtZSBwcm9jZXNzaW5nLCBhbmQgYWxzbyB0aGUgYXV0aGVudGljYXRpb24gYW5kIGFzc29jaWF0aW9uIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBuYXR1cmFsbHkuIEFsc28gaW4gdGhlIG1peCBhcmUgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLCB3aGljaCBhcmUgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHJhdGUgYWRhcHRhdGlvbi4KCk5vdywgSSB3YXMgYWxzbyByZXZpZXdpbmcgYSBzcGVjaWZpYyBwYXRjaCBkZWFsaW5nIHdpdGggUzFHIChTaW5nbGUtR2lnYWhlcnR6KSBzdXBwb3J0LCBhbmQgaXQgcmVtb3ZlZCBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmcm9tIGBuZXQvbWFjODAyMTEvczFnLmNgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCB0aGUgcGF0Y2ggZGlkbiYjMzk7dCB0b3VjaCBgaWVlZTgwMjExX3MxZ19pc190d3Rfc2V0dXBgLiBUaGlzIGdpdmVzIG1lIHNvbWUgaW1wb3J0YW50IGNsdWVzOiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCByYXRlIGluaXRpYWxpemF0aW9uIGluIHRoYXQgc2VjdGlvbiBhbnkgbW9yZS4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIHRoYXQgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlOiBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCBgaWVlZTgwMjExX21nZF9hdXRoYCwgYGllZWU4MDIxMV9tZ2RfYXNzb2NgLCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBUaGF0IGNvdmVycyB0aGUgY29yZSBzdHVmZi4KCkkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlndXJhdGlvbiBwb2ludHMuIE1BQzgwMjExIGl0c2VsZiBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIHBvaW50LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSB0aGlzIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgYW5kIHRoZXJlZm9yZSBob3cgaXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvcmF0ZS5jPTI4PU1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyxcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMwLVxubmV0L21hYzgwMjExL3JhdGUuYzozMTp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxubmV0L21hYzgwMjExL3JhdGUuYy0zMi17XG4tLVxubmV0L21hYzgwMjExL3JhdGUuYy03MS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM6NzI6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbm5ldC9tYWM4MDIxMS9yYXRlLmMtNzMte1xuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmg9Mjk9dm9pZCByYXRlX2NvbnRyb2xfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzEtXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjMyOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpO1xubmV0L21hYzgwMjExL3JhdGUuaDozMzp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzQtdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzQ0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgQ29kZSoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSBpc24mIzM5O3QganVzdCBhIHNuYXBzaG90LiBUaGUgdmVyeSBjb25jZXB0IG9mICYjMzQ7c3RhdGljJiMzNDsgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFwcGx5aW5nIGhlcmUuIFRoZXJlJiMzOTtzIGNsZWFybHkgbW90aW9uLCBhY3Rpdml0eSwgYW5kLCBieSBleHRlbnNpb24sICpjaGFuZ2UqIGF0IHBsYXkuIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgY29kZSwgc28gbXkgbmV4dCB0aG91Z2h0IGlzLCBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyB1c2VkIG9ubHkgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgZnVuY3Rpb24gc2VlbXMgY2VudHJhbCB0byB0aGUgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcsIHNvIEkgd2FudCB0byBjb25maXJtIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGV4Y2x1c2l2ZWx5IGZyb20gdGhlIHBvaW50cyBpbiB0aGUgY29kZSB0aGF0IGFyZSBzdXBwb3NlZCB0byBkcml2ZSBpdHMgYWN0aXZpdHksIHJhdGhlciB0aGFuIHNvbWV0aGluZyB1bmV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgaXRzIGNhbGwgZ3JhcGggdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21sbWUuYz01ODU0PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTYzNDgtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjYzNDk6c3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxubmV0L21hYzgwMjExL21sbWUuYy02MzUwLVx0XHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYz02OTc2PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwNi1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzEwNzpcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwOC1cdFx0XHRcdFx0XHQgICBhc3NvY19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzKTtcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTk1OTM9c3RhdGljIGludCBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY5OC1cbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTY5OTpcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XG5uZXQvbWFjODAyMTEvbWxtZS5jLTk3MDAtXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jPTEwOTE4PWllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTEwODgtXG5uZXQvbWFjODAyMTEvbWxtZS5jOjExMDg5Olx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTEwOTAtXHRcdFx0XHRcdFx0IGFkZF9saW5rc19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTgKCQkJCQkJCW91dHB1dDogMjEzCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFdpcmVsZXNzIEFzc29jaWF0aW9uIEV2ZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IHBvaW50cyByZWxhdGVkIHRvIGhvdyB3aXJlbGVzcyBhc3NvY2lhdGlvbnMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIHRyaWdnZXJzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgZXhjbHVzaXZlbHkgZnJvbSBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgLCBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAsIGFuZCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgLiBUaGF0JiMzOTtzIGEgZm9jdXNlZCBzZXQgb2Ygc3RhcnRpbmcgcG9pbnRzLCB3aGljaCBpcyBnb29kLgoKVGhhdCBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWNhbGx5OiBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCBgaWVlZTgwMjExX21nZF9hdXRoYCwgYGllZWU4MDIxMV9tZ2RfYXNzb2NgLCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGV2YW50IHRvIHRoZSBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIGFuZCBwb3RlbnRpYWxseSByYXRlIGNvbnRyb2wgcHJvY2Vzc2VzLCB3aGljaCBhcmUgYWxsIGNyaXRpY2FsIHN0YWdlcy4KCkdpdmVuIHRoYXQgbXkgY29uZmlndXJhdGlvbiBpcyBidWlsdCBhcm91bmQgYE1BQzgwMjExYCwgSSBjYW4gZXhwZWN0IGNlcnRhaW4gc3BlY2lmaWMgYmVoYXZpb3JzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgbGV2ZXJhZ2UgaXQgYnkgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hdXRoJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ2RfYXNzb2MmIzM0OywKICAgICYjMzQ7cmF0ZV9jb250cm9sX3JhdGVfaW5pdCYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgc29mdHdhcmUgODAyLjExIHN1YnN5c3RlbSBieSByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLCB3aGljaCBwcmV2aW91c2x5IHNldCBzcGVjaWZpYyBmbGFncyBmb3IgUzFHIFNUQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBsaWtlIG1hYzgwMjExX2h3c2ltLiBUaGUgY2hhbmdlcyBhZmZlY3Qgc3RhdGlvbiBsaW5rIHNldHVwIGFuZCByYXRlIGNvbnRyb2wgaW5pdGlhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nZF9hdXRoJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ2RfYXNzb2MmIzM0OywKICAgICYjMzQ7cmF0ZV9jb250cm9sX3JhdGVfaW5pdCYjMzQ7LAogICAgJiMzNDtyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgc29mdHdhcmUgODAyLjExIHN1YnN5c3RlbSBieSByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLCB3aGljaCBwcmV2aW91c2x5IHNldCBzcGVjaWZpYyBmbGFncyBmb3IgUzFHIFNUQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtYWM4MDIxMSBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBsaWtlIG1hYzgwMjExX2h3c2ltLiBUaGUgY2hhbmdlcyBhZmZlY3Qgc3RhdGlvbiBsaW5rIHNldHVwIGFuZCByYXRlIGNvbnRyb2wgaW5pdGlhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMDY6Mzk6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDU3NjFlOTYyMTQ5MTQuLmQwNmNiOGU3ZGZiMzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0yMzg4LDcgJiM0MzsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hlX29wZXJhdGlvbiAqaGVfb3BfaWVfZWxlbSk7CiAKIC8qIFMxRyAqLwotdm9pZCBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IGY1MTE2N2YwZmM0NmQuLjQ3ZWM3MDNmMTA5NDkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtNjM0Nyw3ICYjNDM7NjM0Nyw2IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaywKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLAotCQkJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLAogCQkJCQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKQogewpAQCAtNjM2MiwxMSAmIzQzOzYzNjEsOSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJbWVtY3B5KGxpbmtfc3RhLSZndDthZGRyLCBjYnNzLSZndDtic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShsaW5rX3N0YS0mZ3Q7cHViLSZndDthZGRyLCBjYnNzLSZndDtic3NpZCwgRVRIX0FMRU4pOwogCi0JLyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi8KLQlpZiAoY2Jzcy0mZ3Q7Y2hhbm5lbC0mZ3Q7YmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHsKLQkJaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7CiYjNDM7CS8qIFMxRyBkb2VzIG5vdCB1c2UgYmFzaWMgcmF0ZXMgKi8KJiM0MzsJaWYgKGNic3MtJmd0O2NoYW5uZWwtJmd0O2JhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlzYmFuZCA9IGxvY2FsLSZndDtody53aXBoeS0mZ3Q7YmFuZHNbY2Jzcy0mZ3Q7Y2hhbm5lbC0mZ3Q7YmFuZF07CiAKQEAgLTcxMDcsNyAmIzQzOzcxMDQsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCX0KIAkJfQogCi0JCWVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSwKJiM0MzsJCWVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsCiAJCQkJCQkgICBhc3NvY19kYXRhLSZndDtsaW5rW2xpbmtfaWRdLmJzcyk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9lcnI7CkBAIC05Njk5LDggJiM0Mzs5Njk2LDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJZ290byBvdXRfZXJyOwogCQl9CiAKLQkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBuZXdfc3RhLAotCQkJCQkJICAgbGlua19zdGEsIGNic3MpOwomIzQzOwkJZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7CiAJCWlmIChlcnIpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJc3RhX2luZm9fZnJlZShsb2NhbCwgbmV3X3N0YSk7CkBAIC0xMTA5MCw3ICYjNDM7MTEwODYsNyBAQCBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCWdvdG8gZGlzY29ubmVjdDsKIAkJfQogCi0JCWlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsCiYjNDM7CQlpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwKIAkJCQkJCSBhZGRfbGlua3NfZGF0YS0mZ3Q7bGlua1tsaW5rX2lkXS5ic3MpKQogCQkJZ290byBkaXNjb25uZWN0OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuYwppbmRleCA2NDc2OGFiYjBhNWYyLi5iY2M2YzQxNjczOTUwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKQEAgLTU3LDcgJiM0Mzs1Nyw2IEBAIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpCiAKIAkvKiBUT0RPOiBjaGVjayBmb3IgbWluc3RyZWxfczFnID8gKi8KIAlpZiAoc2JhbmQtJmd0O2JhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7Ci0JCWllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zMWcuYyBiL25ldC9tYWM4MDIxMS9zMWcuYwppbmRleCA4MjVmY2YzZjkwOWJlLi43Zjg5NzU1MmM2ODZmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvczFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3MxZy5jCkBAIC05LDE0ICYjNDM7OSw2IEBACiAjaW5jbHVkZSAmIzM0O2llZWU4MDIxMV9pLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtkcml2ZXItb3BzLmgmIzM0OwogCi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQkvKiBhdm9pZCBpbmRpY2F0aW5nIGxlZ2FjeSBiaXRyYXRlcyBmb3IgUzFHIFNUQXMgKi8KLQlzdGEtJmd0O2RlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTOwotCXN0YS0mZ3Q7ZGVmbGluay5yeF9zdGF0cy5sYXN0X3JhdGUgPQotCQkJU1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKTsKLX0KLQogYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItJmd0O2RhdGE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L21hYzgwMjExL2AuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoKWAgZnVuY3Rpb24gYW5kIGFsbCBpdHMgY2FsbHMuICBUaGlzIGZ1bmN0aW9uLCBhcyBJIHJlY2FsbCwgd2FzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHJhdGUgaW5mb3JtYXRpb24gc3BlY2lmaWNhbGx5IGZvciBTMUcgKFNpbmdsZS1TcGF0aWFsIFN0cmVhbSBHaWdhYml0KSBzdGF0aW9ucyB3aXRoaW4gdGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgc2V0dGluZyB0aGUgYElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTYCBmbGFnIGluIGB0eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBtYXJraW5nIHRoZSByYXRlIHR5cGUgZm9yIHRoZSByZWNlaXZlIHBhdGguCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyB3aGF0IGhhcHBlbnMgdG8gdGhvc2UgZmllbGRzICphZnRlciogdGhlIHJlbW92YWwuIElmIHRoZSBpbml0aWFsaXphdGlvbiBpcyBnb25lLCBhcmUgd2UgcG90ZW50aWFsbHkgbGVhdmluZyB0aG9zZSBmaWVsZHMgdW5pbml0aWFsaXplZD8gVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgcHJldHR5IHVucHJlZGljdGFibGUgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpZiB0aG9zZSB2YWx1ZXMgYXJlIHVzZWQgYmVmb3JlIGJlaW5nIHByb3Blcmx5IHNldCBlbHNld2hlcmUuIFdlIGtub3cgdGhhdCBgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YSgpYCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXQoKWAgd2VyZSBjYWxsaW5nIGl0LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIGZ1bmN0aW9ucyBpbiB0aGVpciBhYnNlbmNlLgoKVGhlIGtleSBxdWVzdGlvbiBpcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUuIElzIGl0ICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvLWluaXRpYWxpemVkIHdpdGggc29tZXRoaW5nIGxpa2UgYGt6YWxsb2NgPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0OyB0aGF04oCZcyB3aGVyZSB0aGUgc2FmZXR5IG5ldCBsaWVzLiBMZXQgbWUgY2hlY2sgdGhlIGBzdGFfaW5mb19hbGxvY2AgZnVuY3Rpb24gb3Igc2ltaWxhciB0byBzZWUgaG93IHRoZSBgc3RhX2luZm9gIHN0cnVjdCBpcyBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBJ4oCZbGwgZmlyZSB1cCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgYW5kIGdldCBkaWdnaW5nLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYHN0YWAgc3RydWN0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24sIG9yIGVsc2UgdGhpcyBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgYSBzZXJpb3VzIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhX2luZm9fYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTI2MzQ9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjY3MC1cdGlmIChwYXJhbXMtXHUwMDNlbGlua19zdGFfcGFyYW1zLmxpbmtfaWQgXHUwMDNlPSAwKVxubmV0L21hYzgwMjExL2NmZy5jOjI2NzE6XHRcdHN0YSA9IHN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzZGF0YSwgbWFjLFxubmV0L21hYzgwMjExL2NmZy5jLTI2NzItXHRcdFx0XHRcdCAgICAgICBwYXJhbXMtXHUwMDNlbGlua19zdGFfcGFyYW1zLmxpbmtfaWQsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTI2NzUtXHRlbHNlXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjY3NjpcdFx0c3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIG1hYywgR0ZQX0tFUk5FTCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMjY3Ny1cbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTU2Nz1pZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjb25zdCB1OCAqYnNzaWQsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy02MDUtXG5uZXQvbWFjODAyMTEvaWJzcy5jOjYwNjpcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfS0VSTkVMKTtcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjA3LVx0aWYgKCFzdGEpIHtcbi0tXG5uZXQvbWFjODAyMTEvaWJzcy5jPTExNDA9dm9pZCBpZWVlODAyMTFfaWJzc19yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2lic3MuYy0xMTc1LVxubmV0L21hYzgwMjExL2lic3MuYzoxMTc2Olx0c3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIEdGUF9BVE9NSUMpO1xubmV0L21hYzgwMjExL2lic3MuYy0xMTc3LVx0aWYgKCFzdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYz01MjI9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjUyMzpfX21lc2hfc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpod19hZGRyKVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYy01MjQte1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTM0LVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo1MzU6XHRzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaHdfYWRkciwgR0ZQX0tFUk5FTCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTUzNi1cdGlmICghc3RhKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM9NTUwPXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKlxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo1NTE6bWVzaF9zdGFfaW5mb19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIsXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU1Mi1cdFx0ICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcyxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU3Mi1cdH0gZWxzZVxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo1NzM6XHRcdHN0YSA9IF9fbWVzaF9zdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkcik7XG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU3NC1cbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jPTU5MD1tZXNoX3N0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTYwMi1cdFx0LyogY2FuJiMzOTt0IHJ1biBhdG9taWMgKi9cbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NjAzOlx0XHRzdGEgPSBtZXNoX3N0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBlbGVtcywgcnhfc3RhdHVzKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNjA0LVx0XHRpZiAoIXN0YSkge1xuLS1cbm5ldC9tYWM4MDIxMS9tbG1lLmM9OTU5Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21sbWUuYy05NjUzLVx0XHRpZiAobWxvKVxubmV0L21hYzgwMjExL21sbWUuYzo5NjU0Olx0XHRcdG5ld19zdGEgPSBzdGFfaW5mb19hbGxvY193aXRoX2xpbmsoc2RhdGEsIGFwX21sZF9hZGRyLFxubmV0L21hYzgwMjExL21sbWUuYy05NjU1LVx0XHRcdFx0XHRcdFx0ICAgbGlua19pZCwgY2Jzcy1cdTAwM2Vic3NpZCxcbi0tXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk2NTctXHRcdGVsc2Vcbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTY1ODpcdFx0XHRuZXdfc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFwX21sZF9hZGRyLCBHRlBfS0VSTkVMKTtcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY1OS1cbi0tXG5uZXQvbWFjODAyMTEvb2NiLmM9Mzk9dm9pZCBpZWVlODAyMTFfb2NiX3J4X25vX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvb2NiLmMtNzItXG5uZXQvbWFjODAyMTEvb2NiLmM6NzM6XHRzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7XG5uZXQvbWFjODAyMTEvb2NiLmMtNzQtXHRpZiAoIXN0YSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zNi0gKlxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Mzc6ICogVXBvbiBhbGxvY2F0aW5nIGEgU1RBIGluZm8gc3RydWN0dXJlIHdpdGggc3RhX2luZm9fYWxsb2MoKSwgdGhlIGNhbGxlclxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzgtICogb3ducyB0aGF0IHN0cnVjdHVyZS4gSXQgbXVzdCB0aGVuIGluc2VydCBpdCBpbnRvIHRoZSBoYXNoIHRhYmxlIHVzaW5nXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDIzPXN0YXRpYyB2b2lkIHN0YV9yZW1vdmVfbGluayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdW5zaWduZWQgaW50IGxpbmtfaWQsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDYyLSAqXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo0NjM6ICogVGhpcyBmdW5jdGlvbiBtdXN0IHVuZG8gZXZlcnl0aGluZyBkb25lIGJ5IHN0YV9pbmZvX2FsbG9jKClcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTQ2NC0gKiB0aGF0IG1heSBoYXBwZW4gYmVmb3JlIHN0YV9pbmZvX2luc2VydCgpLiBJdCBtYXkgb25seSBiZVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTU0MT1zdGF0aWMgaW50IHN0YV9wcmVwYXJlX3JhdGVfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01NTUtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1NTY6c3RhdGljIGludCBzdGFfaW5mb19hbGxvY19saW5rKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTU3LVx0XHRcdCAgICAgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19pbmZvLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTYzMj1zdGF0aWMgc3RydWN0IHN0YV9pbmZvICpcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjYzMzpfX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjM0LVx0XHQgY29uc3QgdTggKmFkZHIsIGludCBsaW5rX2lkLCBjb25zdCB1OCAqbGlua19hZGRyLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY1MC1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjY1MTpcdGlmIChzdGFfaW5mb19hbGxvY19saW5rKGxvY2FsLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgZ2ZwKSlcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY1Mi1cdFx0Z290byBmcmVlO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTgwMi1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjgwMzpzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA0LVx0XHRcdFx0Y29uc3QgdTggKmFkZHIsIGdmcF90IGdmcClcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTgwNS17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo4MDY6XHRyZXR1cm4gX19zdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgLTEsIGFkZHIsIGdmcCk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MDctfVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA4LVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6ODA5OnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Nfd2l0aF9saW5rKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODEwLVx0XHRcdFx0XHQgIGNvbnN0IHU4ICptbGRfYWRkcixcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTQte1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6ODE1Olx0cmV0dXJuIF9fc3RhX2luZm9fYWxsb2Moc2RhdGEsIG1sZF9hZGRyLCBsaW5rX2lkLCBsaW5rX2FkZHIsIGdmcCk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTYtfVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTM0MTA9aW50IGllZWU4MDIxMV9zdGFfYWxsb2NhdGVfbGluayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdW5zaWduZWQgaW50IGxpbmtfaWQpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzQzMS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjM0MzI6XHRyZXQgPSBzdGFfaW5mb19hbGxvY19saW5rKHNkYXRhLVx1MDAzZWxvY2FsLCBcdTAwMjZhbGxvYy1cdTAwM2VpbmZvLCBHRlBfS0VSTkVMKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTM0MzMtXHRpZiAocmV0KSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9OTE4PXN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0X2J5X2lkeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05MjMtICovXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo5MjQ6c3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTkyNS1cdFx0XHRcdGNvbnN0IHU4ICphZGRyLCBnZnBfdCBnZnApO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTI2OnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Nfd2l0aF9saW5rKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTI3LVx0XHRcdFx0XHQgIGNvbnN0IHU4ICptbGRfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBTdGF0aW9uIEluZm9ybWF0aW9uIEFsbG9jYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN0YXRpb24gaW5mb3JtYXRpb24gaXMgYWxsb2NhdGVkIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBfX3N0YV9pbmZvX2FsbG9jYCDigJMgdGhhdCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gbG9vayBhdCBmb3IgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiBsb2dpYy4gSSYjMzk7bGwgb3BlbiB1cCBgbmV0L21hYzgwMjExL3N0YV9pbmZvLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyBzdGF0aW9ucyBhcmUgbWFuYWdlZCwgc28gdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlIGFuZCBob3cgaXTigJlzIGhhbmRsZWQuIEhvcGVmdWxseSwgSSYjMzk7bGwgc2VlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiwgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSwgYW5kIGFueSBhc3NvY2lhdGVkIHNldHVwLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9zdGFfaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzI6XHRzdGF0aWMgc3RydWN0IHN0YV9pbmZvICpcbiA2MzM6XHRfX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIDYzNDpcdFx0XHQgY29uc3QgdTggKmFkZHIsIGludCBsaW5rX2lkLCBjb25zdCB1OCAqbGlua19hZGRyLFxuIDYzNTpcdFx0XHQgZ2ZwX3QgZ2ZwKVxuIDYzNjpcdHtcbiA2Mzc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4gNjM4Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IFx1MDAyNmxvY2FsLVx1MDAzZWh3O1xuIDYzOTpcdFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gNjQwOlx0XHR2b2lkICp0eHFfZGF0YTtcbiA2NDE6XHRcdGludCBzaXplO1xuIDY0MjpcdFx0aW50IGk7XG4gNjQzOlx0XG4gNjQ0Olx0XHRzdGEgPSBremFsbG9jKHNpemVvZigqc3RhKSAmIzQzOyBody1cdTAwM2VzdGFfZGF0YV9zaXplLCBnZnApO1xuIDY0NTpcdFx0aWYgKCFzdGEpXG4gNjQ2Olx0XHRcdHJldHVybiBOVUxMO1xuIDY0NzpcdFxuIDY0ODpcdFx0c3RhLVx1MDAzZWxvY2FsID0gbG9jYWw7XG4gNjQ5Olx0XHRzdGEtXHUwMDNlc2RhdGEgPSBzZGF0YTtcbiA2NTA6XHRcbiA2NTE6XHRcdGlmIChzdGFfaW5mb19hbGxvY19saW5rKGxvY2FsLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgZ2ZwKSlcbiA2NTI6XHRcdFx0Z290byBmcmVlO1xuIDY1MzpcdFxuIDY1NDpcdFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4gNjU1Olx0XHRcdHN0YV9pbmZvX2FkZF9saW5rKHN0YSwgbGlua19pZCwgXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmssXG4gNjU2Olx0XHRcdFx0XHQgIFx1MDAyNnN0YS1cdTAwM2VzdGEuZGVmbGluayk7XG4gNjU3Olx0XHRcdHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MgPSBCSVQobGlua19pZCk7XG4gNjU4Olx0XHR9IGVsc2Uge1xuIDY1OTpcdFx0XHRzdGFfaW5mb19hZGRfbGluayhzdGEsIDAsIFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLCBcdTAwMjZzdGEtXHUwMDNlc3RhLmRlZmxpbmspO1xuIDY2MDpcdFx0fVxuIDY2MTpcdFxuIDY2MjpcdFx0c3RhLVx1MDAzZXN0YS5jdXIgPSBcdTAwMjZzdGEtXHUwMDNlc3RhLmRlZmxpbmsuYWdnO1xuIDY2MzpcdFxuIDY2NDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhLVx1MDAzZWxvY2spO1xuIDY2NTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhLVx1MDAzZXBzX2xvY2spO1xuIDY2NjpcdFx0SU5JVF9XT1JLKFx1MDAyNnN0YS1cdTAwM2VkcnZfZGVsaXZlcl93aywgc3RhX2RlbGl2ZXJfcHNfZnJhbWVzKTtcbiA2Njc6XHRcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZzdGEtXHUwMDNlYW1wZHVfbWxtZS53b3JrLCBpZWVlODAyMTFfYmFfc2Vzc2lvbl93b3JrKTtcbiA2Njg6XHQjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbiA2Njk6XHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXHUwMDI2c2RhdGEtXHUwMDNldmlmKSkge1xuIDY3MDpcdFx0XHRzdGEtXHUwMDNlbWVzaCA9IGt6YWxsb2Nfb2JqKCpzdGEtXHUwMDNlbWVzaCwgZ2ZwKTtcbiA2NzE6XHRcdFx0aWYgKCFzdGEtXHUwMDNlbWVzaClcbiA2NzI6XHRcdFx0XHRnb3RvIGZyZWU7XG4gNjczOlx0XHRcdHN0YS1cdTAwM2VtZXNoLVx1MDAzZXBsaW5rX3N0YSA9IHN0YTtcbiA2NzQ6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3RhLVx1MDAzZW1lc2gtXHUwMDNlcGxpbmtfbG9jayk7XG4gNjc1Olx0XHRcdGlmICghc2RhdGEtXHUwMDNldS5tZXNoLnVzZXJfbXBtKVxuIDY3NjpcdFx0XHRcdHRpbWVyX3NldHVwKFx1MDAyNnN0YS1cdTAwM2VtZXNoLVx1MDAzZXBsaW5rX3RpbWVyLCBtZXNoX3BsaW5rX3RpbWVyLFxuIDY3NzpcdFx0XHRcdFx0ICAgIDApO1xuIDY3ODpcdFx0XHRzdGEtXHUwMDNlbWVzaC1cdTAwM2Vub25wZWVyX3BtID0gTkw4MDIxMV9NRVNIX1BPV0VSX0FDVElWRTtcbiA2Nzk6XHRcdH1cbiA2ODA6XHQjZW5kaWZcbiA2ODE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4MQoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiAyODM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBTMUcgSW5pdGlhbGl6YXRpb24gUmVtb3ZhbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGlzIHRoYXQgdGhlIGBzdGFgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBpdHMgZmllbGRzIHN0YXJ0IGF0IHplcm8uIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aGUgcmVtb3ZhbCBvZiBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YC4gVGhpcyBmdW5jdGlvbiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgc29tZSBmbGFncyByZWxhdGVkIHRvIFMxRyBNQ1MgYW5kIGEgc3BlY2lmaWMgcmF0ZSB0eXBlIHdpdGhpbiB0aGUgYHN0YWAgc3RydWN0dXJlJiMzOTtzIGBkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZWAgYW5kIGBkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZWAgZmllbGRzLgoKU2luY2UgdGhlIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IGBremFsbG9jYCwgcmVtb3ZpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBzY2VuYXJpb3MuIFRoZSByZWxldmFudCBmaWVsZHMgd2lsbCBzaW1wbHkgcmVtYWluIGF0IHRoZWlyIGRlZmF1bHQgemVybyB2YWx1ZXMuIFRoaXMgaXMgbm90IHRoZSB0eXBlIG9mIGlzc3VlIHRoYXQgS01TQU4sIGFzIGEgdG9vbCBmb3IgZGV0ZWN0aW5nIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIHdvdWxkIGZsYWcuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBsb2dpY2FsIGNoYW5nZSwgYSBkZWNpc2lvbiB0byAqbm90KiBzZXQgY2VydGFpbiBmbGFncyBvciB0eXBlcywgcmF0aGVyIHRoYW4gYSBzY2VuYXJpbyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0by4KCkZ1cnRoZXJtb3JlLCB0aGUgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZSBjaGFuZ2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGBzdGFgIGFyZ3VtZW50IGlzIHJlbW92ZWQuIFRoaXMgYXJndW1lbnQgd2FzIG9ubHkgdXNlZCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHRoYXQmIzM5O3Mgbm93IHJlbW92ZWQuIFRoZSBsb2dpYyBmbG93IGlzIHRoYXQgdGhlIGBsaW5rX3N0YWAgc3RydWN0dXJlIGlzIHVzZWQgaW5zdGVhZCwgd2hpY2ggZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50cy4KCkkmIzM5O3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgd2hlcmUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgd2FzIHJlbW92ZWQgaW4gb3RoZXIgcGxhY2VzLCBzcGVjaWZpY2FsbHkgaW4gYHJhdGVfY29udHJvbF9yYXRlX2luaXRgLCBhbmQgdGhlIHNhbWUgcmVhc29uaW5nIGFwcGxpZXMuIFRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgYXJpc2UgaGVyZSwgZWl0aGVyLgoKVGhlcmVmb3JlLCB0aGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycywgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlJiMzOTtzIGp1c3QgYSBmdW5jdGlvbmFsIHJlZ3Jlc3Npb24uIEJ1dCBLTVNBTiwgc3BlY2lmaWNhbGx5LCBpcyBub3QgZ29pbmcgdG8gcHJvdmlkZSBhbnkgdmFsdWUgaGVyZS4gSSBhbSBjb25maWRlbnQgdGhhdCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozOTo1MC43NTk3ODY5NDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY3NjE4MDUzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZVwiLFxuICAgIFwiaWVlZTgwMjExX21nZF9hdXRoXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2Fzc29jXCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0XCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBpbml0aWFsaXplZCBzb21lIHJhdGUgZmxhZ3MgKGBzdGEtXFx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzYCBhbmQgYHN0YS1cXHUwMDNlZGVmbGluay5yeF9zdGF0cy5sYXN0X3JhdGVgKSBmb3IgUzFHIHN0YXRpb25zLiBUaGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCAodmlhIGBfX3N0YV9pbmZvX2FsbG9jYCksIG1lYW5pbmcgYWxsIGl0cyBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gUmVtb3ZpbmcgdGhpcyBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBtZXJlbHkgbGVhdmVzIHRoZXNlIGZpZWxkcyBhcyB6ZXJvLCByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGxvZ2ljIGNoYW5nZSB3b3VsZCBiZSBmdW5jdGlvbmFsIGJ1Z3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb25zIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB0aGF0IGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2Ygc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozOTo1MC43NTk3OTEyNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQyNjY3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjM5OjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5kMDZjYjhlN2RmYjMzIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtMjM4OCw3ICsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGVfb3BlcmF0aW9uICpoZV9vcF9pZV9lbGVtKTtcXG4gXFxuIC8qIFMxRyAqL1xcbi12b2lkIGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XFxuIGJvb2wgaWVlZTgwMjExX3MxZ19pc190d3Rfc2V0dXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXFxuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uNDdlYzcwM2YxMDk0OSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbkBAIC02MzQ3LDcgKzYzNDcsNiBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2NfY29uZmlnX2xpbmsoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcylcXG4ge1xcbkBAIC02MzYyLDExICs2MzYxLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBcXHRtZW1jcHkobGlua19zdGEtXFx1MDAzZWFkZHIsIGNic3MtXFx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XFxuIFxcdG1lbWNweShsaW5rX3N0YS1cXHUwMDNlcHViLVxcdTAwM2VhZGRyLCBjYnNzLVxcdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xcbiBcXG4tXFx0LyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi9cXG4tXFx0aWYgKGNic3MtXFx1MDAzZWNoYW5uZWwtXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7XFxuLVxcdFxcdGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpO1xcbitcXHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXFxuK1xcdGlmIChjYnNzLVxcdTAwM2VjaGFubmVsLVxcdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4gXFxuIFxcdHNiYW5kID0gbG9jYWwtXFx1MDAzZWh3LndpcGh5LVxcdTAwM2ViYW5kc1tjYnNzLVxcdTAwM2VjaGFubmVsLVxcdTAwM2ViYW5kXTtcXG4gXFxuQEAgLTcxMDcsNyArNzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgc3RhLCBsaW5rX3N0YSxcXG4rXFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuQEAgLTk2OTksOCArOTY5Niw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIG5ld19zdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGxpbmtfc3RhLCBjYnNzKTtcXG4rXFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdHN0YV9pbmZvX2ZyZWUobG9jYWwsIG5ld19zdGEpO1xcbkBAIC0xMTA5MCw3ICsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHRnb3RvIGRpc2Nvbm5lY3Q7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsXFxuK1xcdFxcdGlmIChpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIGxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgYWRkX2xpbmtzX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcXG4gXFx0XFx0XFx0Z290byBkaXNjb25uZWN0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcXG5pbmRleCA2NDc2OGFiYjBhNWYyLi5iY2M2YzQxNjczOTUwIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5jXFxuQEAgLTU3LDcgKzU3LDYgQEAgdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcXG4gXFxuIFxcdC8qIFRPRE86IGNoZWNrIGZvciBtaW5zdHJlbF9zMWcgPyAqL1xcbiBcXHRpZiAoc2JhbmQtXFx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKSB7XFxuLVxcdFxcdGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdChzdGEpO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zMWcuYyBiL25ldC9tYWM4MDIxMS9zMWcuY1xcbmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3MxZy5jXFxuKysrIGIvbmV0L21hYzgwMjExL3MxZy5jXFxuQEAgLTksMTQgKzksNiBAQFxcbiAjaW5jbHVkZSBcXFwiaWVlZTgwMjExX2kuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImRyaXZlci1vcHMuaFxcXCJcXG4gXFxuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi17XFxuLVxcdC8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqL1xcbi1cXHRzdGEtXFx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTO1xcbi1cXHRzdGEtXFx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlID1cXG4tXFx0XFx0XFx0U1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKTtcXG4tfVxcbi1cXG4gYm9vbCBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItXFx1MDAzZWRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjM5OjUyLjA5NDY4MTQ0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyODIxMzI1Nzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2F1dGhcIixcbiAgICBcImllZWU4MDIxMV9tZ2RfYXNzb2NcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6Mzk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5kMDZjYjhlN2RmYjMzIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjM4OCw3ICsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZV9vcGVyYXRpb24gKmhlX29wX2llX2VsZW0pO1xuIFxuIC8qIFMxRyAqL1xuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi40N2VjNzAzZjEwOTQ5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTYzNDcsNyArNjM0Nyw2IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKVxuIHtcbkBAIC02MzYyLDExICs2MzYxLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0bWVtY3B5KGxpbmtfc3RhLVx1MDAzZWFkZHIsIGNic3MtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiBcdG1lbWNweShsaW5rX3N0YS1cdTAwM2VwdWItXHUwMDNlYWRkciwgY2Jzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFxuLVx0LyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi9cbi1cdGlmIChjYnNzLVx1MDAzZWNoYW5uZWwtXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHtcbi1cdFx0aWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7XG4rXHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXG4rXHRpZiAoY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbiBcdHNiYW5kID0gbG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlYmFuZHNbY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmRdO1xuIFxuQEAgLTcxMDcsNyArNzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsXG4rXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0ICAgYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuQEAgLTk2OTksOCArOTY5Niw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBuZXdfc3RhLFxuLVx0XHRcdFx0XHRcdCAgIGxpbmtfc3RhLCBjYnNzKTtcbitcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRzdGFfaW5mb19mcmVlKGxvY2FsLCBuZXdfc3RhKTtcbkBAIC0xMTA5MCw3ICsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLFxuK1x0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbiBcdFx0XHRcdFx0XHQgYWRkX2xpbmtzX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpKVxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuY1xuaW5kZXggNjQ3NjhhYmIwYTVmMi4uYmNjNmM0MTY3Mzk1MCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmNcbisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcbkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4gXG4gXHQvKiBUT0RPOiBjaGVjayBmb3IgbWluc3RyZWxfczFnID8gKi9cbiBcdGlmIChzYmFuZC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikge1xuLVx0XHRpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvczFnLmMgYi9uZXQvbWFjODAyMTEvczFnLmNcbmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvczFnLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zMWcuY1xuQEAgLTksMTQgKzksNiBAQFxuICNpbmNsdWRlIFwiaWVlZTgwMjExX2kuaFwiXG4gI2luY2x1ZGUgXCJkcml2ZXItb3BzLmhcIlxuIFxuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLXtcbi1cdC8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqL1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTO1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlID1cbi1cdFx0XHRTVEFfU1RBVFNfRklFTEQoVFlQRSwgU1RBX1NUQVRTX1JBVEVfVFlQRV9TMUcpO1xuLX1cbi1cbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi1cdTAwM2VkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mzk6NTIuMDk0NjgzODg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzY3MDk4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbjogUzFHIFNUQSBSYXRlIEluaXRpYWxpemF0aW9uIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIExpbnV4IGtlcm5lbC4gSXQncyB0b3VjaGluZyBzb21lIGNvcmUgYG1hYzgwMjExYCBmaWxlczogYG1sbWUuY2AsIGByYXRlLmNgLCBgczFnLmNgLCBhbmQgYGllZWU4MDIxMV9pLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyByZW1vdmluZyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgZnVuY3Rpb24gYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBjYWxscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwid2h5PyBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT9cIlxuXG5UaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoaXMgZnVuY3Rpb24gd2FzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgZmxhZ3Mgc3BlY2lmaWMgdG8gUzFHIFNUQXMuIFNvLCBpcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIGJ1ZyBmaXg/IFdoYXQgd2VyZSB0aG9zZSBmbGFncyBhbmQgd2h5IGFyZSB0aGV5IG5vIGxvbmdlciBuZWVkZWQ/IEkgbmVlZCBtb3JlIGRldGFpbCBoZXJlLCBidXQgSSBuZWVkIHRvIHN0YXJ0IHNvbWV3aGVyZS5cblxuVGhlIG5leHQgdGhpbmcgSSdtIGNvbnNpZGVyaW5nIGlzLCBob3cgY2FuIEkgZXZhbHVhdGUgdGhpcyBwcm9wZXJseT8gQ2FuIEkgZXZlbiByZXByb2R1Y2UgdGhlIHNjZW5hcmlvPyBXZWxsLCBzaW5jZSB0aGlzIGlzIGluIGBtYWM4MDIxMWAsIHdoaWNoIGlzIHRoZSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtLCBJIGNhbiB1c2UgYSBgbWFjODAyMTFfaHdzaW1gIGVudmlyb25tZW50LiBUaGF0IG1lYW5zLCB5ZXMsIEkgY2FuIGFic29sdXRlbHkgcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBhIGJpZyByZWxpZWYuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciB3aGF0IGlzIG5lZWRlZCB0byByZXByb2R1Y2UgdGhlIGlzc3VlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGF0IEkgdGhpbmsgaXMgbmVlZGVkLiBJIGtub3cgSSBuZWVkIGBDT05GSUdfTUFDODAyMTFgIGVuYWJsZWQsIGJ1dCBJIHNob3VsZCBsb29rIGZvciBvdGhlcnMgZm9yIGBzMWdgIGNvbmZpZ3VyYXRpb24uXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDoyNC4zNzEzOTYwMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1MDA1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6MjQuNDM4OTAwNDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxODg5OTQzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGluIGBuZXQvbWFjODAyMTEvbWxtZS5jYC4gUmlnaHQsIHRoYXQgZnVuY3Rpb24uLi4gdGhhdCdzIHdoZXJlIHdlIHNldCB1cCB0aGUgc3RhdGlvbiBsaW5rIGZvciBtYW5hZ2VkIG1vZGUsIGlzbid0IGl0PyBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhbGwgYWJvdXQuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggdGhlIHNwZWNpZmljIHJlc3BvbnNpYmlsaXRpZXMgb2YgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIHdpdGhpbiB0aGUgbGFyZ2VyIE1BQzgwMjExIGNvbnRleHQuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIGV4YWN0IHJvbGUgaW4gdGhlIGxpbmsgZXN0YWJsaXNobWVudCBwcm9jZXNzLCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBNTE1FIGFuZCBwb3RlbnRpYWxseSBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgaW1wYWN0IGlzLCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDA0LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6NDQuNjI3ODk3Mjg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzExNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL21sbWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWxtZS5jPTU4NTQ9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy02MzQ4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NjM0OTpzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxubmV0L21hYzgwMjExL21sbWUuYy02MzUwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwNi1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxMDc6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxMDgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz05NTkzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY5OC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2OTk6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XFxubmV0L21hYzgwMjExL21sbWUuYy05NzAwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTA5MTg9aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTExMDg4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTEwODk6XFx0XFx0aWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTA5MC1cXHRcXHRcXHRcXHRcXHRcXHQgYWRkX2xpbmtzX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6NDQuNjczNjEyMTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5MTY5Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYW5pbmcgdXAgc29tZSBzdHVmZiBpbiBgbWFjODAyMTFgLiBTcGVjaWZpY2FsbHksIGl0J3MgZ2V0dGluZyByaWQgb2YgdGhlIGBzdGFgIHBhcmFtZXRlciBmcm9tIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBhbmQgYWxzbyByZW1vdmluZyBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmcm9tIGBuZXQvbWFjODAyMTEvczFnLmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVsYXRpdmVseSBtaW5vciBvbmUsIGJ1dCBpdCBkb2VzIHJlbW92ZSB0aGUgc2V0dGluZyBvZiBgSUVFRTgwMjExX1RYX1JDX1MxR19NQ1NgIGFuZCBgU1RBX1NUQVRTX0ZJRUxEKFRZUEUsIFNUQV9TVEFUU19SQVRFX1RZUEVfUzFHKWAgZmxhZ3MgZm9yIFMxRyBTVEFzLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGEgZGVlcGVyIGRpdmUsIGVzcGVjaWFsbHkgZm9yIGZ1enppbmc/IEFic29sdXRlbHksIHllcy4gSXQncyB0b3VjaGluZyBgbWFjODAyMTFgLCBhbmQgd2Uga25vdyBgbWFjODAyMTFfaHdzaW1gIHByb3ZpZGVzIGEgZGVjZW50IHRlc3Rpbmcgc3VyZmFjZS5cblxuTm93LCBsZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBnb29kIGZvY3VzIHN5bWJvbHMgdG8gY2hlY2sgYXJvdW5kIHRoaXMgY2hhbmdlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdGhlIHBhcnRzIGJlaW5nIGNoYW5nZWQgb3IgcmVsYXRlZCB0byB0aGUgcmVsYXRlZCBjb25jZXB0cywgbGlrZSBhc3NvY2lhdGlvbiwgcmF0ZSBjb250cm9sIG9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjbG9zZSBieS5cblxuSGVyZSdzIHdoYXQgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgYGllZWU4MDIxMV9hc3NvY19zdWNjZXNzYFxuKiAgIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYFxuKiAgIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGBcbiogICBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGBcblxuTm93IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXNlIHN5bWJvbHMgYXJlIHN0YXRpYywgYXMgc3RhdGljIHN5bWJvbHMgY2FuIGJlIGEgZ29vZCBjbHVlIHRvIGFuIGlzb2xhdGVkIGFyZWEgdGhhdCBjb3VsZCBiZSB0YXJnZXRlZC4gSSd2ZSBmb3VuZCBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgIGFuZCBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAgYXJlIHN0YXRpYywgd2hpbGUgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGFyZSBub3QuIEdvb2QsIHRoaXMgZ2l2ZXMgbWUgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDA6NTIuMjY1MzExMjc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTE0MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL21sbWUuYz0xMDkxNz1zdGF0aWMgdm9pZFxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTA5MTg6aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDkxOS1cXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz0xMTgwOD12b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTk0NS1cXHRcXHRcXHRjYXNlIFdMQU5fUFJPVEVDVEVEX0VIVF9BQ1RJT05fTElOS19SRUNPTkZJR19SRVNQOlxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE5NDY6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc2RhdGEsIG1nbXQsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTk0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDo1Mi4zMTEyMjkxOTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMwNzEyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYCBhbmQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgaWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3BgLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0J3MgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIDgwMi4xMSBmcmFtZXdvcmsuIFRoZSBpbXBsaWNhdGlvbnMgb2YgXCJzdGF0aWNcIiBhcmUgaW1wb3J0YW50IGhlcmU7IGl0IGxpa2VseSBtZWFucyBpdCdzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoYXQncyBhIGdvb2QgZGVzaWduIGNob2ljZSwgZ2l2ZW4gaXRzIHJvbGUgaW4gaGFuZGxpbmcgcmVjb25maWd1cmF0aW9ucy4gSXMgaXQgZWZmZWN0aXZlbHkgZW5jYXBzdWxhdGVkLCBvciBpcyBpdCBhIHNpZ24gb2YgcG90ZW50aWFsIGNvZGUgc21lbGwgZG93biB0aGUgbGluZT9cblxuTmV4dCwgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGNvbnNpZGVyIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YC4gVGhpcyBpcyBjcnVjaWFsLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggcmF0ZSBjb250cm9sLCB3aGljaCBpcyBhIGZhaXJseSBjb21wbGV4IHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGNhbiB2YXJ5IHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHRoZSBkZXNpZ24gYW5kIGhhcmR3YXJlLCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBXaGF0IGFyZSB0aGUgaW5wdXRzIHRvIHRoaXMgZnVuY3Rpb24/IElzIGl0IGhhbmRsaW5nIHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIG9mIHRoZSBsaW5rLCBvciBpcyB0aGVyZSBhIGdlbmVyYWwgcmF0ZSB0YWJsZSBvciBhIHNwZWNpZmljIHJhdGUgY29udHJvbCBhbGdvcml0aG0gdGhhdCdzIGJlaW5nIHNldCB1cD8gTGV0J3MgdHJhY2UgaG93IHRoZSBkYXRhIGlzIGJlaW5nIHBhc3NlZCBhcm91bmQsIGhvdyB0aGUgcmF0ZSB0YWJsZXMgYXJlIGJlaW5nIGJ1aWx0LCBvciB3aGV0aGVyIGl0IGhhbmRsZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXNpZ24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWF0aW9uIHByb2Nlc3MgaXMgY3JpdGljYWwgZm9yIGRpYWdub3NpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGlzc3VlcyBvciBlbnN1cmluZyBzZWFtbGVzcyBhZGFwdGF0aW9uIHRvIGNoYW5naW5nIGNoYW5uZWwgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHJhdGUgY29udHJvbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDo1Ni45NDE5NDQyNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg3MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9MjEzMD1zdGF0aWMgaW50IHN0YV9hcHBseV9hdXRoX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxNTItXFx0XFx0aWYgKCF0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfUkFURV9DT05UUk9MKSlcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE1MzpcXHRcXHRcXHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTU0LVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTI2MzQ9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNzAwLVxcdCAgICB0ZXN0X3N0YV9mbGFnKHN0YSwgV0xBTl9TVEFfQVNTT0MpKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyNzAxOlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0YSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTI3MDItXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTgxOT1pZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU4NTItXFx0XFx0bGlua19zdGEgPSBzZGF0YV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbcGFyYW1zLVxcdTAwM2VsaW5rX2lkXSwgc2RhdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1ODUzOlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01ODU0LVxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmM9NTM4PXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2ZpbmlzaF9zdGEoc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTU1Ny1cXG5uZXQvbWFjODAyMTEvaWJzcy5jOjU1ODpcXHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmspO1xcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNTU5LVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYz05MjY9c3RhdGljIHZvaWQgaWVlZTgwMjExX3VwZGF0ZV9zdGFfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pYnNzLmMtMTAzNC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rLmNvbmYtXFx1MDAzZWNoYW5yZXEub3Blcik7XFxubmV0L21hYzgwMjExL2lic3MuYzoxMDM1OlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQoXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayk7XFxubmV0L21hYzgwMjExL2lic3MuYy0xMDM2LVxcdFxcdGlmIChzdGEtXFx1MDAzZXN0YS5kZWZsaW5rLnJ4X25zcyAhPSByeF9uc3MpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jPTQyMz1zdGF0aWMgdm9pZCBtZXNoX3N0YV9pbmZvX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTQ4Ny1cXHRpZiAoIXRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9SQVRFX0NPTlRST0wpKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NDg4OlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQoXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayk7XFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYy00ODktXFx0ZWxzZVxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz02OTc2PXN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy03MTMzLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NzEzNDpcXHRyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rcyhzdGEpO1xcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEzNS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9vY2IuYz04Nz1zdGF0aWMgc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfb2NiX2ZpbmlzaF9zdGEoc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvb2NiLmMtMTA0LVxcbm5ldC9tYWM4MDIxMS9vY2IuYzoxMDU6XFx0cmF0ZV9jb250cm9sX3JhdGVfaW5pdChcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rKTtcXG5uZXQvbWFjODAyMTEvb2NiLmMtMTA2LVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYz0yOD1NT0RVTEVfUEFSTV9ERVNDKGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28sXFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMwLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmM6MzE6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTMyLXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtNzEtXFxubmV0L21hYzgwMjExL3JhdGUuYzo3Mjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtNzMte1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy04Mi1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjgzOlxcdFxcdHJhdGVfY29udHJvbF9yYXRlX2luaXQobGlua19zdGEpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtODQtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD0yOT12b2lkIHJhdGVfY29udHJvbF90eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTMxLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmg6MzI6dm9pZCByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSk7XFxubmV0L21hYzgwMjExL3JhdGUuaDozMzp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTM0LXZvaWQgcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MDo1Ni45ODc2MzQ5MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzMjEyNjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmF0ZSBDb250cm9sIEluaXRpYWxpemF0aW9uIGluIHRoZSBtYWM4MDIxMSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyByYXRlIGNvbnRyb2wgaXMgaW5pdGlhbGl6ZWQgaW4gdGhpcyBtYWM4MDIxMSBjb2RlLCBhbmQgSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEZpcnN0IG9mZiwgSSdtIG5vdGljaW5nIHRoYXQgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU2FtZSBnb2VzIGZvciBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgIGFuZCBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgYWxsIGxpbmtlZC5cblxuTGV0J3Mgc2Vl4oCmIEkgd2FzIGdvaW5nIHRvIGNoZWNrIGBpZWVlODAyMTFfczFnX2lzX3R3dF9zZXR1cGAgaW4gYG5ldC9tYWM4MDIxMS9zMWcuY2AsIGJ1dCB3YWl0Li4uIHRoaXMgcGF0Y2ggcmVtb3ZlZCBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBhbmQgaXRzIGNhbGxzLiBSaWdodCwgdGhlIGNhbGxzIHdlcmUgaW4gYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAuIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyBzdGF0aWMgYnV0IGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCBpcyBub3QuIFRoaXMgbWFrZXMgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0PyBPa2F5LCBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gIGNhbGxzIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCwgYW5kIGBpZWVlODAyMTFfYWRkX3N0YXRpb25gIGNhbGxzIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc2AuIFRoYXQncyBpbXBvcnRhbnQuIEkgc2VlIHRoYXQgYGllZWU4MDIxMV9hc3NvY19zdWNjZXNzYCwgYGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb25gLCBhbmQgYGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwYCBhcmUgc3RhdGljLCBzbyB0aGV5J3JlIHByb2JhYmx5IG5vdCBhcyBpbXBvcnRhbnQgdG8gbG9vayBhdCByaWdodCBub3cuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGNoZWNrIHRoYXQgYGllZWU4MDIxMV9hZGRfc3RhdGlvbmAgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJhdGUgY29udHJvbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTowMy4wMTk3NjM5MTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjAxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9hZGRfc3RhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz0yNDUwPXN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjYzMy1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6MjYzNDpzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNjM1LVxcdFxcdFxcdFxcdCBjb25zdCB1OCAqbWFjLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU5NzY9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTAtXFx0LnN0b3BfYXAgPSBpZWVlODAyMTFfc3RvcF9hcCxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5MTpcXHQuYWRkX3N0YXRpb24gPSBpZWVlODAyMTFfYWRkX3N0YXRpb24sXFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTItXFx0LmRlbF9zdGF0aW9uID0gaWVlZTgwMjExX2RlbF9zdGF0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTowMy4wNjczNzAyMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkxMDA0NzM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMgU3RhdGlvbiBBZGRpdGlvbioqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoZXNlIHdpcmVsZXNzIGRyaXZlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBkZWFsaW5nIHdpdGggYWRkaW5nIHN0YXRpb25zLiBUaGUgZmFjdCB0aGF0IGBpZWVlODAyMTFfYWRkX3N0YXRpb25gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGF0IG1lYW5zIGl0IGhhcyBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB1c3VhbGx5IGluZGljYXRpbmcgaXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGxpa2VseSBvbmx5IHVzZWQgd2l0aGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBJdCdzIGEgaGVscGVyIGZ1bmN0aW9uLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZXh0ZXJuYWxseS4gSXQgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBsb3ctbGV2ZWwgYXBwcm9hY2ggdG8gc3RhdGlvbiBhZGRpdGlvbi4gSSdkIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIGV4YWN0IHJvbGUsIGJ1dCB0aGUgYHN0YXRpY2Aga2V5d29yZCBwb2ludHMgdG8gdGhhdCBpbnRlcm5hbCBmb2N1cy5cblxuVGhlbiwgdGhlcmUncyBgaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25gLCB3aGljaCAqaXNuJ3QqIGBzdGF0aWNgLiBUaGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGlzIHRlbGxzIG1lIGl0J3MgZGVzaWduZWQgdG8gYmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBwcm9iYWJseSBwYXJ0IG9mIHRoZSBkcml2ZXIncyBwdWJsaWMgQVBJIG9yIGEgaGlnaGVyLWxldmVsIGludGVyZmFjZS4gSXRzIG5vbi1gc3RhdGljYCBzdGF0dXMgaW1wbGllcyBpdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBvdGhlciBtb2R1bGVzIG9yIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGV2ZW4gYnkgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgb3Igb3RoZXIgZHJpdmVycy4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIG1vcmUgY29tcGxleCwgaGlnaGVyLWxldmVsIGFzcGVjdHMgb2Ygc3RhdGlvbiBhZGRpdGlvbiwgcGVyaGFwcyBtYW5hZ2luZyBsaW5rLXNwZWNpZmljIGRhdGEgb3IgaW50ZXJhY3Rpbmcgd2l0aCBuZXR3b3JrIG1hbmFnZW1lbnQgZnJhbWV3b3Jrcy4gVGhlICdsaW5rJyBpbiBpdHMgbmFtZSBpcyBhbm90aGVyIGltcG9ydGFudCBjbHVlIOKAkyBpdOKAmXMgcHJvYmFibHkgZm9jdXNlZCBvbiBhZGRpbmcgc3RhdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBsaW5rcyBvciBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IGFuZCB3aGF0IHNwZWNpZmljIHNjZW5hcmlvcyBlYWNoIGhhbmRsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6MDkuOTc3NDE5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNjE3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvY2ZnLmM9NTgxOD1zdGF0aWMgaW50XFxubmV0L21hYzgwMjExL2NmZy5jOjU4MTk6aWVlZTgwMjExX2FkZF9saW5rX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTgyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcylcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDgzLVxcdC5kZWxfaW50Zl9saW5rID0gaWVlZTgwMjExX2RlbF9pbnRmX2xpbmssXFxubmV0L21hYzgwMjExL2NmZy5jOjYwODQ6XFx0LmFkZF9saW5rX3N0YXRpb24gPSBpZWVlODAyMTFfYWRkX2xpbmtfc3RhdGlvbixcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA4NS1cXHQubW9kX2xpbmtfc3RhdGlvbiA9IGllZWU4MDIxMV9tb2RfbGlua19zdGF0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MToxMC4wMjE1ODQ0NjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5ODEwNjI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEZ1bmN0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSwgYW5kIG15IGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgYGllZWU4MDIxMV9hZGRfbGlua19zdGF0aW9uYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlLiBJIGltbWVkaWF0ZWx5IHRoaW5rLCBcIldoZXJlIGRvZXMgdGhlIHN0YXRpb24gbGluayBpbmZvcm1hdGlvbiBnZXQgaW5pdGlhbGl6ZWQ/XCIgVGhpcyBsZWFkcyBtZSB0byBmb2N1cyBvbiBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc2AgYXMgcHJvbWlzaW5nIHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gVGhvc2Ugc2VlbSBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBtYW5hZ2luZyB0aGUgcmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGxpbmsgc2V0dXAsIHdoaWNoIGlzIG15IG1haW4gaW50ZXJlc3QuXG5cbk5vdywgSSdtIHBpdm90aW5nIHRvIGNvbnNpZGVyIGBpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc2AuIEkgc2VlIHRoYXQgKml0KiBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYy4gVGhpcyBwaXF1ZXMgbXkgY3VyaW9zaXR5LiBJZiBpdCdzIHN0YXRpYywgaXQgaW1wbGllcyB0aGF0IGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpcyB0aGF0ICphY3R1YWxseSogdGhlIGNhc2U/IFRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICoqaXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3NgPyoqIEZpbmRpbmcgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLCBpZiBvbmUgZXhpc3RzLCBjb3VsZCBsZWFkIG1lIHRvIGEgdmFsdWFibGUgcG9pbnQgb2YgaW50ZWdyYXRpb24uIElmIG5vdCwgdGhlbiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgYXMgdGhleSByZWxhdGUuIE15IG5leHQgc3RlcHMgaGluZ2Ugb24gYW5zd2VyaW5nIHRoaXMgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzQ3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6MTYuNzE5NjkzMjM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY0OTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tbG1lLmM9Njg5MT1pZWVlODAyMTFfcGFyc2VfYWR2X3QybChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNjk3NS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjY5NzY6c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy02OTc3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTcxODc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzM1OS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjczNjA6XFx0XFx0aWYgKCFpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzZGF0YSwgbWdtdCwgZWxlbXMsXFxubmV0L21hYzgwMjExL21sbWUuYy03MzYxLVxcdFxcdFxcdFxcdFxcdCAgICAgZWxlbV9zdGFydCwgZWxlbV9sZW4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjE2Ljc2NTM0NTA2NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzEwMjQ1MzcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSwgZnJvbSBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBhbmQgdGhlIGNvbnRleHQgaXQncyB1c2VkIGluLCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKnN0YXRpYyouIFRoYXTigJlzIHRoZSBrZXkgb2JzZXJ2YXRpb24gaGVyZS4gSXQncyBub3QgZXh0ZXJuYWxseSB2aXNpYmxlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXNuJ3QgcGFydCBvZiBhbnkgcHVibGljIEFQSSwgbm9yIGlzIGl0IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMsIGJ1dCBpcyBvbmx5IHVzZWQgbG9jYWxseSB3aXRoaW4gdGhpcyBtb2R1bGUuIFRoaXMgaW1wYWN0cyBob3cgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIDgwMi4xMSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byByZWFzb24gYWJvdXQgaXQgaW4gaXNvbGF0aW9uLCBrbm93aW5nIEkgaGF2ZSBhIGxpbWl0ZWQgc2NvcGUgb2YgaW50ZXJhY3Rpb24gdG8gY29uc2lkZXIuIFRoaXMgYWxzbyBtZWFucyBhbnkgcmVmYWN0b3Jpbmcgd291bGQgcHJvYmFibHkgb25seSByZXF1aXJlIGNoYW5nZXMgd2l0aGluIHRoZSBleGlzdGluZyBtb2R1bGUuIFRoYXQncyBhIGRlZmluaXRlIHBsdXMgZm9yIG1haW50YWluYWJpbGl0eSEgTm93LCBsZXQncyBkaWcgaW50byAqd2hhdCogdGhlIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA4NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjI5Ljg2NzgwMTg3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzE4Ni1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxODc6c3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxODgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTE4MDg9dm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE4NTUtXFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOlxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTE4NTY6XFx0XFx0aWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9tYWM4MDIxMS9tbG1lLmMtMTE4NTctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjI5LjkxNDg1MDU4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY1OTk1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIEZyYW1lIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lYCBhbmQgaXQncyBmbGFnZ2VkIGFzICpub3QqIHN0YXRpYy4gQWxyaWdodCwgdGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcGl2b3QgYW5kIGRvdWJsZSBjaGVjayBgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbmAuIEkgYmV0IHRoZXJlJ3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgd2F5IHRoZSBjb25uZWN0aW9uIGlzIHByZXBwZWQgYW5kIHRoaXMgcXVldWVkIGZyYW1lIGhhbmRsZXIuIE1ha2VzIHNlbnNlIHRvIGxvb2sgYXQgdGhhdCBuZXh0LiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlJ3MgYSBkZXBlbmRlbmN5IEkgbmVlZCB0byBmdWxseSBncmFzcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTozMy4yODA4NDgwOTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODIwOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWxtZS5jPTk1ODA9dm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk1OTItXFxubmV0L21hYzgwMjExL21sbWUuYzo5NTkzOnN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk1OTQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzLCBzOCBsaW5rX2lkLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz05ODk0PWludCBpZWVlODAyMTFfbWdkX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk5ODUtXFx0ICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24gb2YgdGhlIFNUQSBlbnRyeSBpblxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6OTk4NjpcXHQgKiBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uKCkuXFxubmV0L21hYzgwMjExL21sbWUuYy05OTg3LVxcdCAqL1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDA2MS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjEwMDYyOlxcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIHJlcS1cXHUwMDNlYnNzLCByZXEtXFx1MDAzZWxpbmtfaWQsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDA2My1cXHRcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWFwX21sZF9hZGRyLCBjb250X2F1dGgsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jPTEwMzE3PWludCBpZWVlODAyMTFfbWdkX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy0xMDY2OC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjEwNjY5OlxcdGVyciA9IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc2RhdGEsIGNic3MsIHJlcS1cXHUwMDNlbGlua19pZCxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTEwNjcwLVxcdFxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlYXBfbWxkX2FkZHIsIHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjMzLjMyNjY3MDk4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU5NTI2NjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgV2lyZWxlc3MgRHJpdmVyIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIHdpcmVsZXNzIGRyaXZlcnMgaW5pdGlhbGl6ZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN0YXRpb24gbWFuYWdlbWVudC4gYGllZWU4MDIxMV9tZ2RfYXV0aGAgYW5kIGBpZWVlODAyMTFfbWdkX2Fzc29jYCBkZWZpbml0ZWx5IGFyZW4ndCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcyBmb3Igd2hhdCB3ZSBjYW4gbGV2ZXJhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGhvdyB0aGVzZSBpbnRlcmFjdCB3aXRoIGtleSBmdW5jdGlvbnMgbGlrZSBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCB3aGljaCBJIHN1c3BlY3QgaXMgY2VudHJhbCB0byBmcmFtZSBwcm9jZXNzaW5nLCBhbmQgYWxzbyB0aGUgYXV0aGVudGljYXRpb24gYW5kIGFzc29jaWF0aW9uIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBuYXR1cmFsbHkuIEFsc28gaW4gdGhlIG1peCBhcmUgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLCB3aGljaCBhcmUgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHJhdGUgYWRhcHRhdGlvbi5cblxuTm93LCBJIHdhcyBhbHNvIHJldmlld2luZyBhIHNwZWNpZmljIHBhdGNoIGRlYWxpbmcgd2l0aCBTMUcgKFNpbmdsZS1HaWdhaGVydHopIHN1cHBvcnQsIGFuZCBpdCByZW1vdmVkIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZyb20gYG5ldC9tYWM4MDIxMS9zMWcuY2AuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHRoZSBwYXRjaCBkaWRuJ3QgdG91Y2ggYGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwYC4gVGhpcyBnaXZlcyBtZSBzb21lIGltcG9ydGFudCBjbHVlczogV2UncmUgbm90IGRlYWxpbmcgd2l0aCByYXRlIGluaXRpYWxpemF0aW9uIGluIHRoYXQgc2VjdGlvbiBhbnkgbW9yZS5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmU6IGBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZWAsIGBpZWVlODAyMTFfbWdkX2F1dGhgLCBgaWVlZTgwMjExX21nZF9hc3NvY2AsIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0YCwgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc2AuIFRoYXQgY292ZXJzIHRoZSBjb3JlIHN0dWZmLlxuXG5JIGFsc28gbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb24gcG9pbnRzLiBNQUM4MDIxMSBpdHNlbGYgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBwb2ludC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHJhdGVfY29udHJvbF9yYXRlX2luaXRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSB0aGlzIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgYW5kIHRoZXJlZm9yZSBob3cgaXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6NDMuOTIxOTQwNTQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg5MjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvcmF0ZS5jPTI4PU1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMzAtXFxubmV0L21hYzgwMjExL3JhdGUuYzozMTp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMzIte1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy03MS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjcyOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3Moc3RydWN0IHN0YV9pbmZvICpzdGEpXFxubmV0L21hYzgwMjExL3JhdGUuYy03My17XFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5oPTI5PXZvaWQgcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzEtXFxubmV0L21hYzgwMjExL3JhdGUuaDozMjp2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKTtcXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjMzOnZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3Moc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmgtMzQtdm9pZCByYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQxOjQzLjk2NjgzNjQ3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE4NDkyODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBDb2RlKipcblxuUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXNuJ3QganVzdCBhIHNuYXBzaG90LiBUaGUgdmVyeSBjb25jZXB0IG9mIFwic3RhdGljXCIgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGFwcGx5aW5nIGhlcmUuIFRoZXJlJ3MgY2xlYXJseSBtb3Rpb24sIGFjdGl2aXR5LCBhbmQsIGJ5IGV4dGVuc2lvbiwgKmNoYW5nZSogYXQgcGxheS4gSSdtIGFscmVhZHkgYXdhcmUgb2YgdGhlIGNvZGUsIHNvIG15IG5leHQgdGhvdWdodCBpcywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBpcyB1c2VkIG9ubHkgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgZnVuY3Rpb24gc2VlbXMgY2VudHJhbCB0byB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZywgc28gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpdCdzIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZHJpdmUgaXRzIGFjdGl2aXR5LCByYXRoZXIgdGhhbiBzb21ldGhpbmcgdW5leHBlY3RlZC4gSSdsbCBuZWVkIHRvIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgaXRzIGNhbGwgZ3JhcGggdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NDQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MTo1My4yODUzMzI2NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTk0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWxtZS5jPTU4NTQ9c3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy02MzQ4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6NjM0OTpzdGF0aWMgaW50IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxubmV0L21hYzgwMjExL21sbWUuYy02MzUwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9Njk3Nj1zdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtNzEwNi1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjcxMDc6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcXG5uZXQvbWFjODAyMTEvbWxtZS5jLTcxMDgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpO1xcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYz05NTkzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmMtOTY5OC1cXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2OTk6XFx0XFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XFxubmV0L21hYzgwMjExL21sbWUuYy05NzAwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9MTA5MTg9aWVlZTgwMjExX3Byb2Nlc3NfbWxfcmVjb25mX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTExMDg4LVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM6MTEwODk6XFx0XFx0aWYgKGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXFxubmV0L21hYzgwMjExL21sbWUuYy0xMTA5MC1cXHRcXHRcXHRcXHRcXHRcXHQgYWRkX2xpbmtzX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDE6NTMuMzMwMzMxNzU1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDI4NzU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgV2lyZWxlc3MgQXNzb2NpYXRpb24gRXZlbnRzKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHBvaW50cyByZWxhdGVkIHRvIGhvdyB3aXJlbGVzcyBhc3NvY2lhdGlvbnMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgdGhlIHRyaWdnZXJzIEknbSBpbnRlcmVzdGVkIGluIGFyZSBleGNsdXNpdmVseSBmcm9tIGBpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzc2AsIGBpZWVlODAyMTFfcHJlcF9jb25uZWN0aW9uYCwgYW5kIGBpZWVlODAyMTFfcHJvY2Vzc19tbF9yZWNvbmZfcmVzcGAuIFRoYXQncyBhIGZvY3VzZWQgc2V0IG9mIHN0YXJ0aW5nIHBvaW50cywgd2hpY2ggaXMgZ29vZC5cblxuVGhhdCBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWNhbGx5OiBgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWVgLCBgaWVlZTgwMjExX21nZF9hdXRoYCwgYGllZWU4MDIxMV9tZ2RfYXNzb2NgLCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdF9hbGxfbGlua3NgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGV2YW50IHRvIHRoZSBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIGFuZCBwb3RlbnRpYWxseSByYXRlIGNvbnRyb2wgcHJvY2Vzc2VzLCB3aGljaCBhcmUgYWxsIGNyaXRpY2FsIHN0YWdlcy5cblxuR2l2ZW4gdGhhdCBteSBjb25maWd1cmF0aW9uIGlzIGJ1aWx0IGFyb3VuZCBgTUFDODAyMTFgLCBJIGNhbiBleHBlY3QgY2VydGFpbiBzcGVjaWZpYyBiZWhhdmlvcnMuIEknbSBnb2luZyB0byB0YWtlIHRoaXMgaW5mb3JtYXRpb24gYW5kIGxldmVyYWdlIGl0IGJ5IHVzaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjU4LCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MjowMC4yMzMyMDk0NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcyNzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZVwiLFxuICAgIFwiaWVlZTgwMjExX21nZF9hdXRoXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2Fzc29jXCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0XCIsXG4gICAgXCJyYXRlX2NvbnRyb2xfcmF0ZV9pbml0X2FsbF9saW5rc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBzb2Z0d2FyZSA4MDIuMTEgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgc2V0IHNwZWNpZmljIGZsYWdzIGZvciBTMUcgU1RBcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1hYzgwMjExIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgbWFjODAyMTFfaHdzaW0uIFRoZSBjaGFuZ2VzIGFmZmVjdCBzdGF0aW9uIGxpbmsgc2V0dXAgYW5kIHJhdGUgY29udHJvbCBpbml0aWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lXCIsXG4gICAgXCJpZWVlODAyMTFfbWdkX2F1dGhcIixcbiAgICBcImllZWU4MDIxMV9tZ2RfYXNzb2NcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRcIixcbiAgICBcInJhdGVfY29udHJvbF9yYXRlX2luaXRfYWxsX2xpbmtzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIHNvZnR3YXJlIDgwMi4xMSBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdGAgYW5kIGl0cyBjYWxscywgd2hpY2ggcHJldmlvdXNseSBzZXQgc3BlY2lmaWMgZmxhZ3MgZm9yIFMxRyBTVEFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWFjODAyMTEgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBtYWM4MDIxMV9od3NpbS4gVGhlIGNoYW5nZXMgYWZmZWN0IHN0YXRpb24gbGluayBzZXR1cCBhbmQgcmF0ZSBjb250cm9sIGluaXRpYWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MjowMC4zMDc5NDI2NThaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MjEzNjQxMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MDAuMzA4Mzk0MTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3MjEzMTg2MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxzLCB3aGljaCBwcmV2aW91c2x5IGluaXRpYWxpemVkIHNvbWUgcmF0ZSBmbGFncyAoYHN0YS1cXHUwMDNlZGVmbGluay50eF9zdGF0cy5sYXN0X3JhdGUuZmxhZ3NgIGFuZCBgc3RhLVxcdTAwM2VkZWZsaW5rLnJ4X3N0YXRzLmxhc3RfcmF0ZWApIGZvciBTMUcgc3RhdGlvbnMuIFRoZSBgc3RhX2luZm9gIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgICh2aWEgYF9fc3RhX2luZm9fYWxsb2NgKSwgbWVhbmluZyBhbGwgaXRzIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSBkZWZhdWx0LiBSZW1vdmluZyB0aGlzIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG1lcmVseSBsZWF2ZXMgdGhlc2UgZmllbGRzIGFzIHplcm8sIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgY2hhbmdlIHdvdWxkIGJlIGZ1bmN0aW9uYWwgYnVncyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHRoYXQgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDQ1MDU2YWVlZTYzNzZjYzU3YWFhYTAzNGI2YjZkMTMwNDgzYzhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6Mzk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5kMDZjYjhlN2RmYjMzIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjM4OCw3ICsyMzg4LDYgQEAgaWVlZTgwMjExX2hlX29wX2llX3RvX2Jzc19jb25mKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZV9vcGVyYXRpb24gKmhlX29wX2llX2VsZW0pO1xuIFxuIC8qIFMxRyAqL1xuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaWVlZTgwMjExX3MxZ19yeF90d3RfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi40N2VjNzAzZjEwOTQ5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTYzNDcsNyArNjM0Nyw2IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19jb25maWdfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiBcdFx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKVxuIHtcbkBAIC02MzYyLDExICs2MzYxLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0bWVtY3B5KGxpbmtfc3RhLVx1MDAzZWFkZHIsIGNic3MtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiBcdG1lbWNweShsaW5rX3N0YS1cdTAwM2VwdWItXHUwMDNlYWRkciwgY2Jzcy1cdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xuIFxuLVx0LyogVE9ETzogUzFHIEJhc2ljIFJhdGUgU2V0IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUgKi9cbi1cdGlmIChjYnNzLVx1MDAzZWNoYW5uZWwtXHUwMDNlYmFuZCA9PSBOTDgwMjExX0JBTkRfUzFHSFopIHtcbi1cdFx0aWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0YSk7XG4rXHQvKiBTMUcgZG9lcyBub3QgdXNlIGJhc2ljIHJhdGVzICovXG4rXHRpZiAoY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmQgPT0gTkw4MDIxMV9CQU5EX1MxR0haKVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbiBcdHNiYW5kID0gbG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlYmFuZHNbY2Jzcy1cdTAwM2VjaGFubmVsLVx1MDAzZWJhbmRdO1xuIFxuQEAgLTcxMDcsNyArNzEwNCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhKGxpbmssIHN0YSwgbGlua19zdGEsXG4rXHRcdGVyciA9IGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEobGluaywgbGlua19zdGEsXG4gXHRcdFx0XHRcdFx0ICAgYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuQEAgLTk2OTksOCArOTY5Niw3IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX3ByZXBfY29ubmVjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBuZXdfc3RhLFxuLVx0XHRcdFx0XHRcdCAgIGxpbmtfc3RhLCBjYnNzKTtcbitcdFx0ZXJyID0gaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSwgY2Jzcyk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRzdGFfaW5mb19mcmVlKGxvY2FsLCBuZXdfc3RhKTtcbkBAIC0xMTA5MCw3ICsxMTA4Niw3IEBAIGllZWU4MDIxMV9wcm9jZXNzX21sX3JlY29uZl9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBzdGEsIGxpbmtfc3RhLFxuK1x0XHRpZiAoaWVlZTgwMjExX21nZF9zZXR1cF9saW5rX3N0YShsaW5rLCBsaW5rX3N0YSxcbiBcdFx0XHRcdFx0XHQgYWRkX2xpbmtzX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5ic3MpKVxuIFx0XHRcdGdvdG8gZGlzY29ubmVjdDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuY1xuaW5kZXggNjQ3NjhhYmIwYTVmMi4uYmNjNmM0MTY3Mzk1MCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmNcbisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmNcbkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4gXG4gXHQvKiBUT0RPOiBjaGVjayBmb3IgbWluc3RyZWxfczFnID8gKi9cbiBcdGlmIChzYmFuZC1cdTAwM2ViYW5kID09IE5MODAyMTFfQkFORF9TMUdIWikge1xuLVx0XHRpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXQoc3RhKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvczFnLmMgYi9uZXQvbWFjODAyMTEvczFnLmNcbmluZGV4IDgyNWZjZjNmOTA5YmUuLjdmODk3NTUyYzY4NmYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvczFnLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zMWcuY1xuQEAgLTksMTQgKzksNiBAQFxuICNpbmNsdWRlIFwiaWVlZTgwMjExX2kuaFwiXG4gI2luY2x1ZGUgXCJkcml2ZXItb3BzLmhcIlxuIFxuLXZvaWQgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuLXtcbi1cdC8qIGF2b2lkIGluZGljYXRpbmcgbGVnYWN5IGJpdHJhdGVzIGZvciBTMUcgU1RBcyAqL1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TMUdfTUNTO1xuLVx0c3RhLVx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlID1cbi1cdFx0XHRTVEFfU1RBVFNfRklFTEQoVFlQRSwgU1RBX1NUQVRTX1JBVEVfVFlQRV9TMUcpO1xuLX1cbi1cbiBib29sIGllZWU4MDIxMV9zMWdfaXNfdHd0X3NldHVwKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi1cdTAwM2VkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MDAuMzA4Mzk3MDg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NjEwMDQ5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG1hYzgwMjExIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L21hYzgwMjExL2AuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyByZW1vdmluZyB0aGUgYGllZWU4MDIxMV9zMWdfc3RhX3JhdGVfaW5pdCgpYCBmdW5jdGlvbiBhbmQgYWxsIGl0cyBjYWxscy4gIFRoaXMgZnVuY3Rpb24sIGFzIEkgcmVjYWxsLCB3YXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgcmF0ZSBpbmZvcm1hdGlvbiBzcGVjaWZpY2FsbHkgZm9yIFMxRyAoU2luZ2xlLVNwYXRpYWwgU3RyZWFtIEdpZ2FiaXQpIHN0YXRpb25zIHdpdGhpbiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBzZXR0aW5nIHRoZSBgSUVFRTgwMjExX1RYX1JDX1MxR19NQ1NgIGZsYWcgaW4gYHR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFnc2AgYW5kIG1hcmtpbmcgdGhlIHJhdGUgdHlwZSBmb3IgdGhlIHJlY2VpdmUgcGF0aC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIHRob3VnaCwgaXMgd2hhdCBoYXBwZW5zIHRvIHRob3NlIGZpZWxkcyAqYWZ0ZXIqIHRoZSByZW1vdmFsLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZ29uZSwgYXJlIHdlIHBvdGVudGlhbGx5IGxlYXZpbmcgdGhvc2UgZmllbGRzIHVuaW5pdGlhbGl6ZWQ/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaWYgdGhvc2UgdmFsdWVzIGFyZSB1c2VkIGJlZm9yZSBiZWluZyBwcm9wZXJseSBzZXQgZWxzZXdoZXJlLiBXZSBrbm93IHRoYXQgYGllZWU4MDIxMV9tZ2Rfc2V0dXBfbGlua19zdGEoKWAgYW5kIGByYXRlX2NvbnRyb2xfcmF0ZV9pbml0KClgIHdlcmUgY2FsbGluZyBpdCwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBmdW5jdGlvbnMgaW4gdGhlaXIgYWJzZW5jZS5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUuIElzIGl0ICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvLWluaXRpYWxpemVkIHdpdGggc29tZXRoaW5nIGxpa2UgYGt6YWxsb2NgPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0OyB0aGF04oCZcyB3aGVyZSB0aGUgc2FmZXR5IG5ldCBsaWVzLiBMZXQgbWUgY2hlY2sgdGhlIGBzdGFfaW5mb19hbGxvY2AgZnVuY3Rpb24gb3Igc2ltaWxhciB0byBzZWUgaG93IHRoZSBgc3RhX2luZm9gIHN0cnVjdCBpcyBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBJ4oCZbGwgZmlyZSB1cCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgYW5kIGdldCBkaWdnaW5nLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYHN0YWAgc3RydWN0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24sIG9yIGVsc2UgdGhpcyBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgYSBzZXJpb3VzIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQyOjA3LjA2OTQwNDczNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzNDQwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhX2luZm9fYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz0yNjM0PXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjY3MC1cXHRpZiAocGFyYW1zLVxcdTAwM2VsaW5rX3N0YV9wYXJhbXMubGlua19pZCBcXHUwMDNlPSAwKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyNjcxOlxcdFxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzZGF0YSwgbWFjLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNjcyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBwYXJhbXMtXFx1MDAzZWxpbmtfc3RhX3BhcmFtcy5saW5rX2lkLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTI2NzUtXFx0ZWxzZVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyNjc2OlxcdFxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBtYWMsIEdGUF9LRVJORUwpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yNjc3LVxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYz01Njc9aWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmJzc2lkLFxcbi0tXFxubmV0L21hYzgwMjExL2lic3MuYy02MDUtXFxubmV0L21hYzgwMjExL2lic3MuYzo2MDY6XFx0c3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIEdGUF9LRVJORUwpO1xcbm5ldC9tYWM4MDIxMS9pYnNzLmMtNjA3LVxcdGlmICghc3RhKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jPTExNDA9dm9pZCBpZWVlODAyMTFfaWJzc19yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNzUtXFxubmV0L21hYzgwMjExL2lic3MuYzoxMTc2OlxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTtcXG5uZXQvbWFjODAyMTEvaWJzcy5jLTExNzctXFx0aWYgKCFzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jPTUyMj1zdGF0aWMgc3RydWN0IHN0YV9pbmZvICpcXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjUyMzpfX21lc2hfc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpod19hZGRyKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTI0LXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTM0LVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NTM1OlxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBod19hZGRyLCBHRlBfS0VSTkVMKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTUzNi1cXHRpZiAoIXN0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM9NTUwPXN0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKlxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmM6NTUxOm1lc2hfc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICphZGRyLFxcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTUyLVxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTU3Mi1cXHR9IGVsc2VcXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jOjU3MzpcXHRcXHRzdGEgPSBfX21lc2hfc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMtNTc0LVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYz01OTA9bWVzaF9zdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jLTYwMi1cXHRcXHQvKiBjYW4ndCBydW4gYXRvbWljICovXFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYzo2MDM6XFx0XFx0c3RhID0gbWVzaF9zdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgZWxlbXMsIHJ4X3N0YXR1cyk7XFxubmV0L21hYzgwMjExL21lc2hfcGxpbmsuYy02MDQtXFx0XFx0aWYgKCFzdGEpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tbG1lLmM9OTU5Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9wcmVwX2Nvbm5lY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWxtZS5jLTk2NTMtXFx0XFx0aWYgKG1sbylcXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2NTQ6XFx0XFx0XFx0bmV3X3N0YSA9IHN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzZGF0YSwgYXBfbWxkX2FkZHIsXFxubmV0L21hYzgwMjExL21sbWUuYy05NjU1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGxpbmtfaWQsIGNic3MtXFx1MDAzZWJzc2lkLFxcbi0tXFxubmV0L21hYzgwMjExL21sbWUuYy05NjU3LVxcdFxcdGVsc2VcXG5uZXQvbWFjODAyMTEvbWxtZS5jOjk2NTg6XFx0XFx0XFx0bmV3X3N0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhcF9tbGRfYWRkciwgR0ZQX0tFUk5FTCk7XFxubmV0L21hYzgwMjExL21sbWUuYy05NjU5LVxcbi0tXFxubmV0L21hYzgwMjExL29jYi5jPTM5PXZvaWQgaWVlZTgwMjExX29jYl9yeF9ub19zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvb2NiLmMtNzItXFxubmV0L21hYzgwMjExL29jYi5jOjczOlxcdHN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTtcXG5uZXQvbWFjODAyMTEvb2NiLmMtNzQtXFx0aWYgKCFzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zNi0gKlxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjM3OiAqIFVwb24gYWxsb2NhdGluZyBhIFNUQSBpbmZvIHN0cnVjdHVyZSB3aXRoIHN0YV9pbmZvX2FsbG9jKCksIHRoZSBjYWxsZXJcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zOC0gKiBvd25zIHRoYXQgc3RydWN0dXJlLiBJdCBtdXN0IHRoZW4gaW5zZXJ0IGl0IGludG8gdGhlIGhhc2ggdGFibGUgdXNpbmdcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTQyMz1zdGF0aWMgdm9pZCBzdGFfcmVtb3ZlX2xpbmsoc3RydWN0IHN0YV9pbmZvICpzdGEsIHVuc2lnbmVkIGludCBsaW5rX2lkLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDYyLSAqXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NDYzOiAqIFRoaXMgZnVuY3Rpb24gbXVzdCB1bmRvIGV2ZXJ5dGhpbmcgZG9uZSBieSBzdGFfaW5mb19hbGxvYygpXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNDY0LSAqIHRoYXQgbWF5IGhhcHBlbiBiZWZvcmUgc3RhX2luZm9faW5zZXJ0KCkuIEl0IG1heSBvbmx5IGJlXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz01NDE9c3RhdGljIGludCBzdGFfcHJlcGFyZV9yYXRlX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01NTUtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NTU2OnN0YXRpYyBpbnQgc3RhX2luZm9fYWxsb2NfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01NTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX2luZm8sXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz02MzI9c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjMzOl9fc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjM0LVxcdFxcdCBjb25zdCB1OCAqYWRkciwgaW50IGxpbmtfaWQsIGNvbnN0IHU4ICpsaW5rX2FkZHIsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy02NTAtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjUxOlxcdGlmIChzdGFfaW5mb19hbGxvY19saW5rKGxvY2FsLCBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rLCBnZnApKVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY1Mi1cXHRcXHRnb3RvIGZyZWU7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MDItXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6ODAzOnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA0LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICphZGRyLCBnZnBfdCBnZnApXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA1LXtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo4MDY6XFx0cmV0dXJuIF9fc3RhX2luZm9fYWxsb2Moc2RhdGEsIGFkZHIsIC0xLCBhZGRyLCBnZnApO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTgwNy19XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtODA4LVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjgwOTpzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTAtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1OCAqbWxkX2FkZHIsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTQte1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjgxNTpcXHRyZXR1cm4gX19zdGFfaW5mb19hbGxvYyhzZGF0YSwgbWxkX2FkZHIsIGxpbmtfaWQsIGxpbmtfYWRkciwgZ2ZwKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04MTYtfVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzQxMD1pbnQgaWVlZTgwMjExX3N0YV9hbGxvY2F0ZV9saW5rKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1bnNpZ25lZCBpbnQgbGlua19pZClcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTM0MzEtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MzQzMjpcXHRyZXQgPSBzdGFfaW5mb19hbGxvY19saW5rKHNkYXRhLVxcdTAwM2Vsb2NhbCwgXFx1MDAyNmFsbG9jLVxcdTAwM2VpbmZvLCBHRlBfS0VSTkVMKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zNDMzLVxcdGlmIChyZXQpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTkxOD1zdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldF9ieV9pZHgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05MjMtICovXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6OTI0OnN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtOTI1LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICphZGRyLCBnZnBfdCBnZnApO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjkyNjpzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2FsbG9jX3dpdGhfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC05MjctXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1OCAqbWxkX2FkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQyOjA3LjEzODc1MzUxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk0NDk3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgU3RhdGlvbiBJbmZvcm1hdGlvbiBBbGxvY2F0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN0YXRpb24gaW5mb3JtYXRpb24gaXMgYWxsb2NhdGVkIGluIHRoZSBtYWM4MDIxMSBzdGFjay4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYF9fc3RhX2luZm9fYWxsb2NgIOKAkyB0aGF0IHNvdW5kcyBsaWtlIHRoZSByaWdodCBmdW5jdGlvbiB0byBsb29rIGF0IGZvciB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uIGxvZ2ljLiBJJ2xsIG9wZW4gdXAgYG5ldC9tYWM4MDIxMS9zdGFfaW5mby5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uIEl0J3MgdGhlIGNvcmUgb2YgaG93IHN0YXRpb25zIGFyZSBtYW5hZ2VkLCBzbyB0aGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGF0YSBzdHJ1Y3R1cmUgYW5kIGhvdyBpdOKAmXMgaGFuZGxlZC4gSG9wZWZ1bGx5LCBJJ2xsIHNlZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24sIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHN0YV9pbmZvYCBzdHJ1Y3R1cmUsIGFuZCBhbnkgYXNzb2NpYXRlZCBzZXR1cC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MTAuNDMzMjUzMjUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvc3RhX2luZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzI6XFx0c3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqXFxuIDYzMzpcXHRfX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiA2MzQ6XFx0XFx0XFx0IGNvbnN0IHU4ICphZGRyLCBpbnQgbGlua19pZCwgY29uc3QgdTggKmxpbmtfYWRkcixcXG4gNjM1OlxcdFxcdFxcdCBnZnBfdCBnZnApXFxuIDYzNjpcXHR7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4gNjM4OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VodztcXG4gNjM5OlxcdFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiA2NDA6XFx0XFx0dm9pZCAqdHhxX2RhdGE7XFxuIDY0MTpcXHRcXHRpbnQgc2l6ZTtcXG4gNjQyOlxcdFxcdGludCBpO1xcbiA2NDM6XFx0XFxuIDY0NDpcXHRcXHRzdGEgPSBremFsbG9jKHNpemVvZigqc3RhKSArIGh3LVxcdTAwM2VzdGFfZGF0YV9zaXplLCBnZnApO1xcbiA2NDU6XFx0XFx0aWYgKCFzdGEpXFxuIDY0NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0c3RhLVxcdTAwM2Vsb2NhbCA9IGxvY2FsO1xcbiA2NDk6XFx0XFx0c3RhLVxcdTAwM2VzZGF0YSA9IHNkYXRhO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRpZiAoc3RhX2luZm9fYWxsb2NfbGluayhsb2NhbCwgXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaywgZ2ZwKSlcXG4gNjUyOlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0XFx0aWYgKGxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbiA2NTU6XFx0XFx0XFx0c3RhX2luZm9fYWRkX2xpbmsoc3RhLCBsaW5rX2lkLCBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rLFxcbiA2NTY6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c3RhLVxcdTAwM2VzdGEuZGVmbGluayk7XFxuIDY1NzpcXHRcXHRcXHRzdGEtXFx1MDAzZXN0YS52YWxpZF9saW5rcyA9IEJJVChsaW5rX2lkKTtcXG4gNjU4OlxcdFxcdH0gZWxzZSB7XFxuIDY1OTpcXHRcXHRcXHRzdGFfaW5mb19hZGRfbGluayhzdGEsIDAsIFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmssIFxcdTAwMjZzdGEtXFx1MDAzZXN0YS5kZWZsaW5rKTtcXG4gNjYwOlxcdFxcdH1cXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0c3RhLVxcdTAwM2VzdGEuY3VyID0gXFx1MDAyNnN0YS1cXHUwMDNlc3RhLmRlZmxpbmsuYWdnO1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c3RhLVxcdTAwM2Vsb2NrKTtcXG4gNjY1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzdGEtXFx1MDAzZXBzX2xvY2spO1xcbiA2NjY6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZzdGEtXFx1MDAzZWRydl9kZWxpdmVyX3drLCBzdGFfZGVsaXZlcl9wc19mcmFtZXMpO1xcbiA2Njc6XFx0XFx0d2lwaHlfd29ya19pbml0KFxcdTAwMjZzdGEtXFx1MDAzZWFtcGR1X21sbWUud29yaywgaWVlZTgwMjExX2JhX3Nlc3Npb25fd29yayk7XFxuIDY2ODpcXHQjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG4gNjY5OlxcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuIDY3MDpcXHRcXHRcXHRzdGEtXFx1MDAzZW1lc2ggPSBremFsbG9jX29iaigqc3RhLVxcdTAwM2VtZXNoLCBnZnApO1xcbiA2NzE6XFx0XFx0XFx0aWYgKCFzdGEtXFx1MDAzZW1lc2gpXFxuIDY3MjpcXHRcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDY3MzpcXHRcXHRcXHRzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZXBsaW5rX3N0YSA9IHN0YTtcXG4gNjc0OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZXBsaW5rX2xvY2spO1xcbiA2NzU6XFx0XFx0XFx0aWYgKCFzZGF0YS1cXHUwMDNldS5tZXNoLnVzZXJfbXBtKVxcbiA2NzY6XFx0XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnN0YS1cXHUwMDNlbWVzaC1cXHUwMDNlcGxpbmtfdGltZXIsIG1lc2hfcGxpbmtfdGltZXIsXFxuIDY3NzpcXHRcXHRcXHRcXHRcXHQgICAgMCk7XFxuIDY3ODpcXHRcXHRcXHRzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZW5vbnBlZXJfcG0gPSBOTDgwMjExX01FU0hfUE9XRVJfQUNUSVZFO1xcbiA2Nzk6XFx0XFx0fVxcbiA2ODA6XFx0I2VuZGlmXFxuIDY4MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDI6MTAuNDMzNDY5NTkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDg4MDkyMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTMUcgSW5pdGlhbGl6YXRpb24gUmVtb3ZhbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGlzIHRoYXQgdGhlIGBzdGFgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB1c2luZyBga3phbGxvY2AuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFsbCBpdHMgZmllbGRzIHN0YXJ0IGF0IHplcm8uIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aGUgcmVtb3ZhbCBvZiBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YC4gVGhpcyBmdW5jdGlvbiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgc29tZSBmbGFncyByZWxhdGVkIHRvIFMxRyBNQ1MgYW5kIGEgc3BlY2lmaWMgcmF0ZSB0eXBlIHdpdGhpbiB0aGUgYHN0YWAgc3RydWN0dXJlJ3MgYGRlZmxpbmsudHhfc3RhdHMubGFzdF9yYXRlYCBhbmQgYGRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCBmaWVsZHMuXG5cblNpbmNlIHRoZSBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBieSBga3phbGxvY2AsIHJlbW92aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBzY2VuYXJpb3MuIFRoZSByZWxldmFudCBmaWVsZHMgd2lsbCBzaW1wbHkgcmVtYWluIGF0IHRoZWlyIGRlZmF1bHQgemVybyB2YWx1ZXMuIFRoaXMgaXMgbm90IHRoZSB0eXBlIG9mIGlzc3VlIHRoYXQgS01TQU4sIGFzIGEgdG9vbCBmb3IgZGV0ZWN0aW5nIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIHdvdWxkIGZsYWcuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGxvZ2ljYWwgY2hhbmdlLCBhIGRlY2lzaW9uIHRvICpub3QqIHNldCBjZXJ0YWluIGZsYWdzIG9yIHR5cGVzLCByYXRoZXIgdGhhbiBhIHNjZW5hcmlvIHdoZXJlIG1lbW9yeSBpcyB1c2VkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvLlxuXG5GdXJ0aGVybW9yZSwgdGhlIGBpZWVlODAyMTFfbWdkX3NldHVwX2xpbmtfc3RhYCBmdW5jdGlvbidzIHNpZ25hdHVyZSBjaGFuZ2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGBzdGFgIGFyZ3VtZW50IGlzIHJlbW92ZWQuIFRoaXMgYXJndW1lbnQgd2FzIG9ubHkgdXNlZCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHRoYXQncyBub3cgcmVtb3ZlZC4gVGhlIGxvZ2ljIGZsb3cgaXMgdGhhdCB0aGUgYGxpbmtfc3RhYCBzdHJ1Y3R1cmUgaXMgdXNlZCBpbnN0ZWFkLCB3aGljaCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSB0aGUgc2FtZSBpbml0aWFsaXphdGlvbiByZXF1aXJlbWVudHMuXG5cbkkndmUgYWxzbyBkb3VibGUtY2hlY2tlZCB3aGVyZSBgaWVlZTgwMjExX3MxZ19zdGFfcmF0ZV9pbml0YCB3YXMgcmVtb3ZlZCBpbiBvdGhlciBwbGFjZXMsIHNwZWNpZmljYWxseSBpbiBgcmF0ZV9jb250cm9sX3JhdGVfaW5pdGAsIGFuZCB0aGUgc2FtZSByZWFzb25pbmcgYXBwbGllcy4gVGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBhcmlzZSBoZXJlLCBlaXRoZXIuXG5cblRoZXJlZm9yZSwgdGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgbG9naWNhbCBlcnJvcnMsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlJ3MganVzdCBhIGZ1bmN0aW9uYWwgcmVncmVzc2lvbi4gQnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIGlzIG5vdCBnb2luZyB0byBwcm92aWRlIGFueSB2YWx1ZSBoZXJlLiBJIGFtIGNvbmZpZGVudCB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjgxLCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MjozNy41MjE1NjM2MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc29tZSByYXRlIGZsYWdzIChgc3RhLVxcdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFnc2AgYW5kIGBzdGEtXFx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBpZWVlODAyMTFfczFnX3N0YV9yYXRlX2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbHMsIHdoaWNoIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc29tZSByYXRlIGZsYWdzIChgc3RhLVxcdTAwM2VkZWZsaW5rLnR4X3N0YXRzLmxhc3RfcmF0ZS5mbGFnc2AgYW5kIGBzdGEtXFx1MDAzZWRlZmxpbmsucnhfc3RhdHMubGFzdF9yYXRlYCkgZm9yIFMxRyBzdGF0aW9ucy4gVGhlIGBzdGFfaW5mb2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AgKHZpYSBgX19zdGFfaW5mb19hbGxvY2ApLCBtZWFuaW5nIGFsbCBpdHMgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IGRlZmF1bHQuIFJlbW92aW5nIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbWVyZWx5IGxlYXZlcyB0aGVzZSBmaWVsZHMgYXMgemVybywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBjaGFuZ2Ugd291bGQgYmUgZnVuY3Rpb25hbCBidWdzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[1] Phase: Succeeded StartedAt: 2026-08-27 06:42:48 +0000 UTC FinishedAt: 2026-08-27 06:42:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 06:42:48 +0000 UTC FinishedAt: 2026-08-27 06:42:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2] Phase: Succeeded StartedAt: 2026-08-27 06:42:48 +0000 UTC FinishedAt: 2026-08-27 10:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 06:42:48 +0000 UTC FinishedAt: 2026-08-27 10:37:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 06:42:48 +0000 UTC FinishedAt: 2026-08-27 06:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 06:42:48 +0000 UTC FinishedAt: 2026-08-27 06:42:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8jk6w/series-workflow8jk6w-convert-artifact-2857185633/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 06:42:58 +0000 UTC FinishedAt: 2026-08-27 07:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 06:42:58 +0000 UTC FinishedAt: 2026-08-27 07:09:55 +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:*ca4e3f09-5099-4a1a-8606-7c975f5d55f3,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-workflow8jk6w/series-workflow8jk6w-convert-artifact-2857185633/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": "149a8ffc-b671-412b-addd-a175681161e1", "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-workflow8jk6w/series-workflow8jk6w-build-action-3943497359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 06:42:58 +0000 UTC FinishedAt: 2026-08-27 07:09:24 +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:*ca4e3f09-5099-4a1a-8606-7c975f5d55f3,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-workflow8jk6w/series-workflow8jk6w-convert-artifact-2857185633/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": "149a8ffc-b671-412b-addd-a175681161e1", "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-workflow8jk6w/series-workflow8jk6w-build-action-3943497359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 07:09:55 +0000 UTC FinishedAt: 2026-08-27 07:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 07:09:55 +0000 UTC FinishedAt: 2026-08-27 07:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 07:09:55 +0000 UTC FinishedAt: 2026-08-27 07:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 07:09:55 +0000 UTC FinishedAt: 2026-08-27 07:10:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8jk6w/series-workflow8jk6w-convert-artifact-1204133556/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 07:10:42 +0000 UTC FinishedAt: 2026-08-27 07:12:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 07:10:42 +0000 UTC FinishedAt: 2026-08-27 07:12:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*149a8ffc-b671-412b-addd-a175681161e1,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-workflow8jk6w/series-workflow8jk6w-build-action-3943497359/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-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 07:12:49 +0000 UTC FinishedAt: 2026-08-27 07:12:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 07:12:49 +0000 UTC FinishedAt: 2026-08-27 07:12:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 07:12:49 +0000 UTC FinishedAt: 2026-08-27 07:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 07:12:49 +0000 UTC FinishedAt: 2026-08-27 07:33:48 +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:*ca4e3f09-5099-4a1a-8606-7c975f5d55f3,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-workflow8jk6w/series-workflow8jk6w-convert-artifact-1204133556/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": "c11d1bca-24a8-4198-b427-e408188bdacc", "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-workflow8jk6w/series-workflow8jk6w-build-action-3088056448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 07:12:49 +0000 UTC FinishedAt: 2026-08-27 07:33:26 +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:*ca4e3f09-5099-4a1a-8606-7c975f5d55f3,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-workflow8jk6w/series-workflow8jk6w-convert-artifact-1204133556/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": "c11d1bca-24a8-4198-b427-e408188bdacc", "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-workflow8jk6w/series-workflow8jk6w-build-action-3088056448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 07:33:48 +0000 UTC FinishedAt: 2026-08-27 07:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 07:33:48 +0000 UTC FinishedAt: 2026-08-27 07:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 07:33:48 +0000 UTC FinishedAt: 2026-08-27 07:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 07:33:48 +0000 UTC FinishedAt: 2026-08-27 07:35: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:*c11d1bca-24a8-4198-b427-e408188bdacc,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-workflow8jk6w/series-workflow8jk6w-build-action-3088056448/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-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 07:35:52 +0000 UTC FinishedAt: 2026-08-27 10:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 07:35:52 +0000 UTC FinishedAt: 2026-08-27 10:37:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"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:*149a8ffc-b671-412b-addd-a175681161e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c11d1bca-24a8-4198-b427-e408188bdacc,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-workflow8jk6w/series-workflow8jk6w-build-action-3943497359/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-workflow8jk6w/series-workflow8jk6w-build-action-3088056448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 07:35:52 +0000 UTC FinishedAt: 2026-08-27 07:36:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 07:35:52 +0000 UTC FinishedAt: 2026-08-27 07:35:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"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-workflow8jk6w/series-workflow8jk6w-convert-artifact-4112493533/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 07:35:52 +0000 UTC FinishedAt: 2026-08-27 07:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 07:35:52 +0000 UTC FinishedAt: 2026-08-27 07:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 07:35:52 +0000 UTC FinishedAt: 2026-08-27 07:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 07:36:02 +0000 UTC FinishedAt: 2026-08-27 10:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8jk6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_sta_rx_queued_frame","ieee80211_mgd_auth","ieee80211_mgd_assoc","rate_control_rate_init","rate_control_rate_init_all_links"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211"],"series_id":"f36cc8b8-ec6a-4927-b423-d924acba76e2","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 07:36:02 +0000 UTC FinishedAt: 2026-08-27 10:37:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*149a8ffc-b671-412b-addd-a175681161e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c11d1bca-24a8-4198-b427-e408188bdacc,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-workflow8jk6w/series-workflow8jk6w-build-action-3943497359/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-workflow8jk6w/series-workflow8jk6w-build-action-3088056448/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-workflow8jk6w/series-workflow8jk6w-convert-artifact-4112493533/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,}