Name: series-workflowr642z Phase: Succeeded StartedAt: 2026-07-26 14:10:24 +0000 UTC FinishedAt: 2026-07-26 18:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[0] Phase: Succeeded StartedAt: 2026-07-26 14:10:24 +0000 UTC FinishedAt: 2026-07-26 14:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 14:10:24 +0000 UTC FinishedAt: 2026-07-26 14:35:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "e9ba2a50-13aa-4872-b6b7-4b65f1300663" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_llcp_send_ui_frame" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX3NlbmRfdWlfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXHUwMDNlbG9jYWxgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5GQyBMTENQIG5ldHdvcmtpbmcgY29kZSwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agb24gYW4gQUZfTkZDIHNvY2tldC4gRnV6emluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgaGVscCBlbnN1cmUgdGhlIGxvY2tpbmcgY29ycmVjdGx5IHByZXZlbnRzIHRoZSByYWNlIHdpdGhvdXQgaW50cm9kdWNpbmcgZGVhZGxvY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2NjOGZkNWE0MGM2OWU2MWMwYjVkY2I0YmI2OTU3NmEwYWMyMDE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE0OjM0OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jIGIvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcbmluZGV4IDI5MWYyNmZhY2JmM2FhLi5jZmQ1ZjZhZWJmOGRmZCAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3BfY29tbWFuZHMuY1xuQEAgLTczMCw2ICYjNDM7NzMwLDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXG4gXHRcdFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpwZHU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXHRzaXplX3QgZnJhZ19sZW4gPSAwLCByZW1haW5pbmdfbGVuO1xuIFx0dTggKm1zZ19wdHIsICptc2dfZGF0YTtcbkBAIC03MzgsMTAgJiM0Mzs3MzksNiBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1NlbmQgVUkgZnJhbWUgbGVuICV6ZFxcblwmIzM0OywgbGVuKTtcbiBcbi1cdGxvY2FsID0gc29jay1cdTAwM2Vsb2NhbDtcbi1cdGlmIChsb2NhbCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbiBcdG1zZ19kYXRhID0ga21hbGxvYyhsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmIChtc2dfZGF0YSA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC03NTEsNiAmIzQzOzc0OCwxNSBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG4gXG4mIzQzO1x0bG9ja19zb2NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0bG9jYWwgPSBzb2NrLVx1MDAzZWxvY2FsO1xuJiM0MztcdGlmIChsb2NhbCA9PSBOVUxMKSB7XG4mIzQzO1x0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0a2ZyZWUobXNnX2RhdGEpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJlbWFpbmluZ19sZW4gPSBsZW47XG4gXHRtc2dfcHRyID0gbXNnX2RhdGE7XG4gXG5AQCAtNzYzLDcgJiM0Mzs3NjksNyBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0cHJfZGVidWcoXCYjMzQ7RnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemRcJiMzNDssXG4gXHRcdFx0IGZyYWdfbGVuLCByZW1haW5pbmdfbGVuKTtcbiBcbi1cdFx0cGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stXHUwMDNlZGV2LCBcdTAwMjZzb2NrLVx1MDAzZXNrLCAwLFxuJiM0MztcdFx0cGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stXHUwMDNlZGV2LCBzaywgMCxcbiBcdFx0XHRcdFx0IGZyYWdfbGVuICYjNDM7IExMQ1BfSEVBREVSX1NJWkUsIFx1MDAyNmVycik7XG4gXHRcdGlmIChwZHUgPT0gTlVMTCkge1xuIFx0XHRcdHByX2VycihcJiMzNDtDb3VsZCBub3QgYWxsb2NhdGUgUERVIChlcnJvcj0lZClcXG5cJiMzNDssIGVycik7XG5AQCAtODAwLDYgJiM0Mzs4MDYsNyBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0bXNnX3B0ciAmIzQzOz0gZnJhZ19sZW47XG4gXHR9IHdoaWxlIChyZW1haW5pbmdfbGVuIFx1MDAzZSAwKTtcbiBcbiYjNDM7XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0a2ZyZWUobXNnX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGxlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZjX2xsY3Bfc2VuZF91aV9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGJ5IGFkZGluZyBzb2NrZXQgbG9ja2luZyBhcm91bmQgdGhlIGFjY2VzcyB0byBgc29jay1cdTAwM2Vsb2NhbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTkZDIExMQ1AgbmV0d29ya2luZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvbiBhbiBBRl9ORkMgc29ja2V0LiBGdXp6aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGUgbG9ja2luZyBjb3JyZWN0bHkgcHJldmVudHMgdGhlIHJhY2Ugd2l0aG91dCBpbnRyb2R1Y2luZyBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjY2M4ZmQ1YTQwYzY5ZTYxYzBiNWRjYjRiYjY5NTc2YTBhYzIwMThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMTQ6MzQ6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29tbWFuZHMuYyBiL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jCmluZGV4IDI5MWYyNmZhY2JmM2FhLi5jZmQ1ZjZhZWJmOGRmZCAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmMKQEAgLTczMCw2ICYjNDM7NzMwLDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsCiAJCQkgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnBkdTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsOwogCXNpemVfdCBmcmFnX2xlbiA9IDAsIHJlbWFpbmluZ19sZW47CiAJdTggKm1zZ19wdHIsICptc2dfZGF0YTsKQEAgLTczOCwxMCAmIzQzOzczOSw2IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLAogCiAJcHJfZGVidWcoJiMzNDtTZW5kIFVJIGZyYW1lIGxlbiAlemRcbiYjMzQ7LCBsZW4pOwogCi0JbG9jYWwgPSBzb2NrLSZndDtsb2NhbDsKLQlpZiAobG9jYWwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAltc2dfZGF0YSA9IGttYWxsb2MobGVuLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKG1zZ19kYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzUxLDYgJiM0Mzs3NDgsMTUgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsCiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAomIzQzOwlsb2NrX3NvY2soc2spOwomIzQzOwomIzQzOwlsb2NhbCA9IHNvY2stJmd0O2xvY2FsOwomIzQzOwlpZiAobG9jYWwgPT0gTlVMTCkgewomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCWtmcmVlKG1zZ19kYXRhKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiAJcmVtYWluaW5nX2xlbiA9IGxlbjsKIAltc2dfcHRyID0gbXNnX2RhdGE7CiAKQEAgLTc2Myw3ICYjNDM7NzY5LDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsCiAJCXByX2RlYnVnKCYjMzQ7RnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemQmIzM0OywKIAkJCSBmcmFnX2xlbiwgcmVtYWluaW5nX2xlbik7CiAKLQkJcGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stJmd0O2RldiwgJmFtcDtzb2NrLSZndDtzaywgMCwKJiM0MzsJCXBkdSA9IG5mY19hbGxvY19zZW5kX3NrYihzb2NrLSZndDtkZXYsIHNrLCAwLAogCQkJCQkgZnJhZ19sZW4gJiM0MzsgTExDUF9IRUFERVJfU0laRSwgJmFtcDtlcnIpOwogCQlpZiAocGR1ID09IE5VTEwpIHsKIAkJCXByX2VycigmIzM0O0NvdWxkIG5vdCBhbGxvY2F0ZSBQRFUgKGVycm9yPSVkKVxuJiMzNDssIGVycik7CkBAIC04MDAsNiAmIzQzOzgwNiw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLAogCQltc2dfcHRyICYjNDM7PSBmcmFnX2xlbjsKIAl9IHdoaWxlIChyZW1haW5pbmdfbGVuICZndDsgMCk7CiAKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKIAlrZnJlZShtc2dfZGF0YSk7CiAKIAlyZXR1cm4gbGVuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldC9ORkMgTExDUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gSSBpbW1lZGlhdGVseSBzcG90IHRoZSBtb2RpZmljYXRpb24gdG8gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbG9ja19zb2NrKHNrKWAgYW5kIGByZWxlYXNlX3NvY2soc2spYCBhcm91bmQgdGhlIGBzb2NrLSZndDtsb2NhbGAgYWNjZXNzLCBhbmQgaW1wb3J0YW50bHksIGl0IG1vdmVzIHRoYXQgYGlmIChsb2NhbCA9PSBOVUxMKWAgY2hlY2sgKmluc2lkZSogdGhlIGxvY2suIEFoLCB0aGlzIGlzIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gbWl0aWdhdGlvbiDigJMgcG90ZW50aWFsbHkgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlLiBTbWFydC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSBzaG91bGQgYWJzb2x1dGVseSBmdXp6IGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciB1bmNvdmVyaW5nIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIE5GQyBzdWJzeXN0ZW0sIHdoaWNoIGFsd2F5cyBoYXMgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2VzLgoKQmVmb3JlIGRpdmluZyBpbnRvIGZ1enppbmcsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIE5GQyBMTENQIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHJlYWNoIGZvciBgZ2l0IGdyZXBgIHRvIGZpbmQgdGhhdCBjb25maWcgZGlyZWN0aXZlLiBHb3R0YSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3NlbmRfdWlfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwLmg9MjQ0PWludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG5uZXQvbmZjL2xsY3AuaC0yNDUtXHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xubmV0L25mYy9sbGNwLmg6MjQ2OmludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxubmV0L25mYy9sbGNwLmgtMjQ3LVx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NjQ2PWludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzI4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NzI5OmludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzMwLVx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jPTc3Nz1zdGF0aWMgaW50IGxsY3Bfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jLTgxNS1cbm5ldC9uZmMvbGxjcF9zb2NrLmM6ODE2Olx0XHRyZXR1cm4gbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShsbGNwX3NvY2ssIGFkZHItXHUwMDNlZHNhcCwgYWRkci1cdTAwM2Vzc2FwLFxubmV0L25mYy9sbGNwX3NvY2suYy04MTctXHRcdFx0XHRcdCAgICAgIG1zZywgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gdGhlIE5GQy9MTENQIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIGRvd24gdGhpcyBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAgZnVuY3Rpb24uIFRoZSBjYWxsIHRvIGl0IG9yaWdpbmF0ZXMgZnJvbSBgbGxjcF9zb2NrX3NlbmRtc2dgLCB3aGljaCBsaXZlcyBpbiBgbmV0L25mYy9sbGNwX3NvY2suY2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgbGluay4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBiZWhpbmQgdGhpcyBORkMgc3Vic3lzdGVtLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBlbnRyaWVzIGZvciBORkM7IGZpZ3VyaW5nIG91dCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggYXJlIGF2YWlsYWJsZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0xNi1cbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gTkZDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbGxjcF9jb21tYW5kcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb21wb25lbnRzIGFyZSByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgYGxsY3BfY29tbWFuZHMuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5GQywgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGBuZXQvbmZjL2AgZGlyZWN0b3J5LiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjcnVjaWFsIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYGxsY3BfY29tbWFuZHMuY2Agd2lsbCBiZSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJiMzOTttIHByZXBhcmVkIGZvciBpdCB0byBiZSBhIGJpdCBtb3JlIGluZGlyZWN0IGRlcGVuZGluZyBvbiB0aGUgYnVpbGQgc3lzdGVtIGluIHVzZS4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY3BfY29tbWFuZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICYjNDM7PSBuZmNfZGlnaXRhbC5vXG5uZXQvbmZjL01ha2VmaWxlLTEwLVxubmV0L25mYy9NYWtlZmlsZToxMTpuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbm5ldC9uZmMvTWFrZWZpbGUtMTItXHRcdGxsY3Bfc29jay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5GQyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0mIzM5O3MgYXBwYXJlbnRseSBidWlsdCB3aXRoIGBDT05GSUdfTkZDYCBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gdGhhdCwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcyB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogTkZDIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgdGhlIGBuZXQvbmZjL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgcmVzaWRlLCBhbmQgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSByZWxhdGVkIHN1Yi1vcHRpb25zIGxpbmtlZCB0byBgQ09ORklHX05GQ2AuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBORkMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORkNcbiAgIDc6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgIDg6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgOTpcdFx0ZGVmYXVsdCBuXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTkZDIChOZWFyIGZpZWxkXG4gIDEyOlx0XHQgIGNvbW11bmljYXRpb24pIGRldmljZXMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTU6XHRcdCAgYmUgY2FsbGVkIG5mYy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTkZDX0RJR0lUQUxcbiAgMTg6XHRcdGRlcGVuZHMgb24gTkZDXG4gIDE5Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDIwOlx0XHRzZWxlY3QgQ1JDX0lUVV9UXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORkMgU2VuZCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IE5GQyBkYXRhIGdldHMgc2VudCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgQ09ORklHX05GQ2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCB0aGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgcGF0aC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWFjaGVkIHRocm91Z2ggYGxsY3Bfc29ja19zZW5kbXNnYC4gSG1tLCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpSaWdodCwgTkZDIGlzIGEgbmV0d29yayBwcm90b2NvbCwgaGFuZGxlZCB1bmRlciBgQUZfTkZDYC4gTm93LCBJIG5lZWQgdG8ga25vdyBpZiBgbGxjcF9zb2NrX3NlbmRtc2dgIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHVzZXJzcGFjZS4gTGV0IG1lIHNlZSwgeWVzLCBpdCYjMzk7cyBleHBvc2VkIHZpYSBgc2VuZG1zZ2Agb24gYW4gYEFGX05GQ2Agc29ja2V0LiBQZXJmZWN0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjcF9zb2NrX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3Bfc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9NjUzPXN0YXRpYyBpbnQgbGxjcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKl9hZGRyLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzc2LVxubmV0L25mYy9sbGNwX3NvY2suYzo3Nzc6c3RhdGljIGludCBsbGNwX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbmZjL2xsY3Bfc29jay5jLTc3OC1cdFx0XHQgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz05MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9zb2NrX29wcyA9IHtcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jLTkzMy1cdC5nZXRzb2Nrb3B0ICAgICA9IG5mY19sbGNwX2dldHNvY2tvcHQsXG5uZXQvbmZjL2xsY3Bfc29jay5jOjkzNDpcdC5zZW5kbXNnICAgICAgICA9IGxsY3Bfc29ja19zZW5kbXNnLFxubmV0L25mYy9sbGNwX3NvY2suYy05MzUtXHQucmVjdm1zZyAgICAgICAgPSBsbGNwX3NvY2tfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExMQ1AgU29ja2V0IFNlbmQgTWVzc2FnZSBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYC5zZW5kbXNnYCBoYW5kbGVyIGZvciBgbGxjcF9zb2NrX29wc2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGBsbGNwX3NvY2tfc2VuZG1zZ2AgYW5kIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBhcmUga2V5IGZ1bmN0aW9ucyB0byBkaXNzZWN0LiBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgY29udmVuaWVudCBmb3IgdHJhY2luZy4gYGxsY3Bfc29ja19zZW5kbXNnYCBpcyBzdGF0aWMsIGJ1dCBpdCAqaXMqIGFuIEFQSSBlbnRyeSBwb2ludCwgc28gSSYjMzk7bGwgY29uc2lkZXIgaW5jbHVkaW5nIGl0LCBidXQgZm9yIG5vdywgSSYjMzk7bGwgZm9jdXMgb24gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLgoKTm93LCBhcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBgTkZDYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IG9uZS4gU2ltcGxlIGVub3VnaC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdmVyaWZ5IHRoYXQgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gWWVzLCBpdCBpcywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHNlbmRtc2dgIGNhbGxzIG9uIGFuIGBBRl9ORkNgIHNvY2tldCB1c2luZyBlaXRoZXIgYFNPQ0tfREdSQU1gIG9yIGBTT0NLX1JBV2AgKExMQ1ApIHNvY2tldCB0eXBlcy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvbmZjL2FmX25mYy5jYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY3Bfc29ja19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL2FmX25mYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBmcmFtZWQgYXMgeW91ciBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGxsY3Bfc29ja19vcHNgIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGxsY3Bfc29ja19vcHNgIHN0cnVjdHVyZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSB0aGUgaGVjayBpcyB0aGlzIHRoaW5nICphY3R1YWxseSogdXNlZD8gSXQmIzM5O3MgYWxsIHdlbGwgYW5kIGdvb2QgZGVmaW5pbmcgaXQsIGJ1dCBpZiBpdCYjMzk7cyBqdXN0IHNpdHRpbmcgdGhlcmUgdW51c2VkLCB0aGF0JiMzOTtzIGEgcHJvYmxlbSBpbiBpdHNlbGYsIGluZGljYXRpbmcgZGVhZCBjb2RlIG9yIGEgbWlzY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBhdGhzIGl0JiMzOTtzIGludm9sdmVkIGluLiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBzdHJ1Y3QsIGFuZCB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0cyBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKiwgaXMga2V5IHRvIG1ha2luZyBhbnkgcHJvZ3Jlc3Mgb24gdGhpcyBpc3N1ZS4gTGV0JiMzOTtzIHNlZSBpZiBhIHF1aWNrIGdyZXAgb3IgY29kZSBzZWFyY2ggY2FuIGdpdmUgbWUgc29tZSBoaW50cyB0byBzdGFydCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNwX3NvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX3NvY2suYz04MzA9c3RhdGljIGludCBsbGNwX3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy05MTgtXG5uZXQvbmZjL2xsY3Bfc29jay5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3NvY2tfb3BzID0ge1xubmV0L25mYy9sbGNwX3NvY2suYy05MjAtXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz0xMDI2PXN0YXRpYyBpbnQgbGxjcF9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy0xMDQyLVx0fSBlbHNlIHtcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA0MzpcdFx0c29jay1cdTAwM2VvcHMgPSBcdTAwMjZsbGNwX3NvY2tfb3BzO1xubmV0L25mYy9sbGNwX3NvY2suYy0xMDQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBsbGNwX3NvY2tfY3JlYXRlIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBsbGNwX3NvY2tfY3JlYXRlYCByZWZlcmVuY2VkIHdpdGhpbiBgbmV0L25mYy9hZl9uZmMuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IGRvaW5nIHdpdGggaXQgd2l0aGluIHRoZSBORkMgc3Vic3lzdGVtPyBXZSBrbm93IGBsbGNwX3NvY2tfY3JlYXRlYCBpcyBmb3VuZGF0aW9uYWwgZm9yIExMQ1Agc29ja2V0IGNyZWF0aW9uLCBvYnZpb3VzbHkuIFNvLCBhcmUgdGhleSBpbml0aWFsaXppbmcgTExDUCBzb2NrZXRzIHNwZWNpZmljYWxseSBmb3IgTkZDLXJlbGF0ZWQgY29tbXVuaWNhdGlvbj8gSSBuZWVkIHRvIGRpZyBpbiB0byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHQuCgpNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciBlaXRoZXIgYW4gTkZDIGNvbnRyb2xsZXIgdG8gaW50ZXJhY3Qgd2l0aCBvdGhlciBORkMgZGV2aWNlcywgb3IgcGVyaGFwcyBmb3IgcHJvdmlkaW5nIGEgdXNlciBzcGFjZSBpbnRlcmZhY2UgZm9yIGFuIE5GQyBhcHBsaWNhdGlvbi4gQXJlIHRoZXkgaGFuZGxpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50PyBJcyB0aGlzIGZvciBkYXRhIGV4Y2hhbmdlIGF0IHRoZSBMTENQIGxldmVsPyBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGlmIHRoaXMgYGFmX25mYy5jYCBmaWxlIGlzIG1hbmFnaW5nIHRoZSBsb3dlciBsYXllcnMsIG9yIHBvdGVudGlhbGx5IG9mZmVyaW5nIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzb2NrZXRzIGFyZSBiZWluZyB1c2VkLCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBvbiB0aGUgc29ja2V0cyB1cG9uIGNyZWF0aW9uLiBJIGJldCB0aGUgc29ja2V0IG9wdGlvbnMgb3IgdGhlIHByb3RvY29sLXNwZWNpZmljIGRldGFpbHMgYXJlIHdoZXJlIHRoZSByZWFsIGp1aWNlIGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjcF9zb2NrX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9MTAxMj12b2lkIG5mY19sbGNwX3NvY2tfZnJlZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjUtXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwMjY6c3RhdGljIGludCBsbGNwX3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTAyNy1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mY19wcm90b2NvbCAqbmZjX3Byb3RvLCBpbnQga2Vybilcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfcHJvdG9jb2wgbGxjcF9uZmNfcHJvdG8gPSB7XG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy0xMDU2LVx0Lm93bmVyICAgID0gVEhJU19NT0RVTEUsXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNTc6XHQuY3JlYXRlICAgPSBsbGNwX3NvY2tfY3JlYXRlXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTgtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyBpdDoKCioqTExDUCBQcm90b2NvbCBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBgbGxjcF9uZmNfcHJvdG9gLiBPa2F5LCB0aGF0JiMzOTtzIGluIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgY29yZSBMTENQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiBmb3IgTkZDLiBJdCYjMzk7cyBnb29kIHRvIHNlZSBpdCByaWdodCB0aGVyZS4gSXQgbWVhbnMgdGhpcyBpcyB3aGVyZSB0aGUgTExDUCBzb2NrZXQgZmFtaWx5IGlzIGRlZmluZWQgYW5kIHRoZSBwcm90b2NvbCBpcyBoYW5kbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdyBJIGNhbiBzdGFydCB0cmFjaW5nIGJhY2sgaG93IHRoaXMgcHJvdG9jb2wgaGFuZGxlciBpcyBleHBvc2VkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNwX25mY19wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9MTAyNj1zdGF0aWMgaW50IGxsY3Bfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA1Mi1cbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mY19wcm90b2NvbCBsbGNwX25mY19wcm90byA9IHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA1NC1cdC5pZFx0ICA9IE5GQ19TT0NLUFJPVE9fTExDUCxcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jPTEwNjA9aW50IF9faW5pdCBuZmNfbGxjcF9zb2NrX2luaXQodm9pZClcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA2MS17XG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNjI6XHRyZXR1cm4gbmZjX3Byb3RvX3JlZ2lzdGVyKFx1MDAyNmxsY3BfbmZjX3Byb3RvKTtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA2My19XG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz0xMDY1PXZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNjYte1xubmV0L25mYy9sbGNwX3NvY2suYzoxMDY3Olx0bmZjX3Byb3RvX3VucmVnaXN0ZXIoXHUwMDI2bGxjcF9uZmNfcHJvdG8pO1xubmV0L25mYy9sbGNwX3NvY2suYy0xMDY4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkZDIExMQ1AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGZ1bmN0aW9uLiBBcHBhcmVudGx5LCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2hlcmUgYHNvY2stJmd0O2xvY2FsYCBjYW4gYmUgZWl0aGVyIG51bGwgb3IgZnJlZWQgYXQgdGhlIHNhbWUgdGltZSBhcyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgZml4IGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiBvZiBgbG9ja19zb2NrKHNrKWAgYXJvdW5kIHRoZSBwcm9ibGVtYXRpYyBhY2Nlc3MsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCB0byBwcm90ZWN0IGFnYWluc3QgYSByYWNlIGNvbmRpdGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE5GQyBMTENQIG5ldHdvcmtpbmcgbGF5ZXIuIFRoaXMgbWVhbnMgdXNlcnNwYWNlIGNvZGUsIGludGVyYWN0aW5nIHRocm91Z2ggYHNlbmRtc2dgIG9uIGFuIGBBRl9ORkNgIHNvY2tldCwgY291bGQgdHJpZ2dlciB0aGlzIHBhdGguCgpCZWNhdXNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgbG9ja2luZywgSSYjMzk7ZCBjb25zaWRlciBpdCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcuIFRoZSBnb2FsIGhlcmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGludHJvZHVjZWQgaW5kZWVkIHByZXZlbnRzIHRoZSByYWNlIHdpdGhvdXQgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgYW55IG5ldyBkZWFkbG9jayBzY2VuYXJpb3MuIFRoaXMgaXMgdml0YWwgdG8gZW5zdXJpbmcgcm9idXN0IG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCBpcyB1c2VyLWFjY2Vzc2libGUuCgpJJiMzOTt2ZSBjaGVja2VkIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLCBhbmQgaXQgbG9va3MgbGlrZSBgTkZDYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEl0IGRlcGVuZHMgb24gYFJGS0lMTCB8fCAhUkZLSUxMYCwgYnV0IG5vIG90aGVyIHNpZ25pZmljYW50IGNvbmZpZ3MganVtcCBvdXQgYXQgbWUgYXMgZGlyZWN0bHkgcmVsYXRlZC4gU28sIHdpdGggdGhhdCBjb25maXJtZWQsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAgYnkgYWRkaW5nIHNvY2tldCBsb2NraW5nIGFyb3VuZCB0aGUgYWNjZXNzIHRvIGBzb2NrLVx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZjX2xsY3Bfc2VuZF91aV9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGJ5IGFkZGluZyBzb2NrZXQgbG9ja2luZyBhcm91bmQgdGhlIGFjY2VzcyB0byBgc29jay1cdTAwM2Vsb2NhbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTkZDIExMQ1AgbmV0d29ya2luZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvbiBhbiBBRl9ORkMgc29ja2V0LiBGdXp6aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGUgbG9ja2luZyBjb3JyZWN0bHkgcHJldmVudHMgdGhlIHJhY2Ugd2l0aG91dCBpbnRyb2R1Y2luZyBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxMS4wNjQ1MTEzMDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDkzMzUyNTU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MTEuMDY0NTE4MDU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTEzNTA2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjY2M4ZmQ1YTQwYzY5ZTYxYzBiNWRjYjRiYjY5NTc2YTBhYzIwMThhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDE0OjM0OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jIGIvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcXG5pbmRleCAyOTFmMjZmYWNiZjNhYS4uY2ZkNWY2YWViZjhkZmQgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcXG4rKysgYi9uZXQvbmZjL2xsY3BfY29tbWFuZHMuY1xcbkBAIC03MzAsNiArNzMwLDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcGR1O1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxuIFxcdHNpemVfdCBmcmFnX2xlbiA9IDAsIHJlbWFpbmluZ19sZW47XFxuIFxcdHU4ICptc2dfcHRyLCAqbXNnX2RhdGE7XFxuQEAgLTczOCwxMCArNzM5LDYgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiU2VuZCBVSSBmcmFtZSBsZW4gJXpkXFxcXG5cXFwiLCBsZW4pO1xcbiBcXG4tXFx0bG9jYWwgPSBzb2NrLVxcdTAwM2Vsb2NhbDtcXG4tXFx0aWYgKGxvY2FsID09IE5VTEwpXFxuLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi1cXG4gXFx0bXNnX2RhdGEgPSBrbWFsbG9jKGxlbiwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAobXNnX2RhdGEgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTc1MSw2ICs3NDgsMTUgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHR9XFxuIFxcbitcXHRsb2NrX3NvY2soc2spO1xcbitcXG4rXFx0bG9jYWwgPSBzb2NrLVxcdTAwM2Vsb2NhbDtcXG4rXFx0aWYgKGxvY2FsID09IE5VTEwpIHtcXG4rXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0a2ZyZWUobXNnX2RhdGEpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4gXFx0cmVtYWluaW5nX2xlbiA9IGxlbjtcXG4gXFx0bXNnX3B0ciA9IG1zZ19kYXRhO1xcbiBcXG5AQCAtNzYzLDcgKzc2OSw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwiRnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemRcXFwiLFxcbiBcXHRcXHRcXHQgZnJhZ19sZW4sIHJlbWFpbmluZ19sZW4pO1xcbiBcXG4tXFx0XFx0cGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stXFx1MDAzZWRldiwgXFx1MDAyNnNvY2stXFx1MDAzZXNrLCAwLFxcbitcXHRcXHRwZHUgPSBuZmNfYWxsb2Nfc2VuZF9za2Ioc29jay1cXHUwMDNlZGV2LCBzaywgMCxcXG4gXFx0XFx0XFx0XFx0XFx0IGZyYWdfbGVuICsgTExDUF9IRUFERVJfU0laRSwgXFx1MDAyNmVycik7XFxuIFxcdFxcdGlmIChwZHUgPT0gTlVMTCkge1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcIkNvdWxkIG5vdCBhbGxvY2F0ZSBQRFUgKGVycm9yPSVkKVxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtODAwLDYgKzgwNiw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxcbiBcXHRcXHRtc2dfcHRyICs9IGZyYWdfbGVuO1xcbiBcXHR9IHdoaWxlIChyZW1haW5pbmdfbGVuIFxcdTAwM2UgMCk7XFxuIFxcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRrZnJlZShtc2dfZGF0YSk7XFxuIFxcbiBcXHRyZXR1cm4gbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxMS42NzY0NTA1NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDMyMTU3Njk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2NjOGZkNWE0MGM2OWU2MWMwYjVkY2I0YmI2OTU3NmEwYWMyMDE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE0OjM0OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmMgYi9uZXQvbmZjL2xsY3BfY29tbWFuZHMuY1xuaW5kZXggMjkxZjI2ZmFjYmYzYWEuLmNmZDVmNmFlYmY4ZGZkIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcbisrKyBiL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jXG5AQCAtNzMwLDYgKzczMCw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcGR1O1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXHRzaXplX3QgZnJhZ19sZW4gPSAwLCByZW1haW5pbmdfbGVuO1xuIFx0dTggKm1zZ19wdHIsICptc2dfZGF0YTtcbkBAIC03MzgsMTAgKzczOSw2IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxuIFxuIFx0cHJfZGVidWcoXCJTZW5kIFVJIGZyYW1lIGxlbiAlemRcXG5cIiwgbGVuKTtcbiBcbi1cdGxvY2FsID0gc29jay1cdTAwM2Vsb2NhbDtcbi1cdGlmIChsb2NhbCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbiBcdG1zZ19kYXRhID0ga21hbGxvYyhsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmIChtc2dfZGF0YSA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC03NTEsNiArNzQ4LDE1IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcbitcdGxvY2tfc29jayhzayk7XG4rXG4rXHRsb2NhbCA9IHNvY2stXHUwMDNlbG9jYWw7XG4rXHRpZiAobG9jYWwgPT0gTlVMTCkge1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRrZnJlZShtc2dfZGF0YSk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuIFx0cmVtYWluaW5nX2xlbiA9IGxlbjtcbiBcdG1zZ19wdHIgPSBtc2dfZGF0YTtcbiBcbkBAIC03NjMsNyArNzY5LDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXG4gXHRcdHByX2RlYnVnKFwiRnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemRcIixcbiBcdFx0XHQgZnJhZ19sZW4sIHJlbWFpbmluZ19sZW4pO1xuIFxuLVx0XHRwZHUgPSBuZmNfYWxsb2Nfc2VuZF9za2Ioc29jay1cdTAwM2VkZXYsIFx1MDAyNnNvY2stXHUwMDNlc2ssIDAsXG4rXHRcdHBkdSA9IG5mY19hbGxvY19zZW5kX3NrYihzb2NrLVx1MDAzZWRldiwgc2ssIDAsXG4gXHRcdFx0XHRcdCBmcmFnX2xlbiArIExMQ1BfSEVBREVSX1NJWkUsIFx1MDAyNmVycik7XG4gXHRcdGlmIChwZHUgPT0gTlVMTCkge1xuIFx0XHRcdHByX2VycihcIkNvdWxkIG5vdCBhbGxvY2F0ZSBQRFUgKGVycm9yPSVkKVxcblwiLCBlcnIpO1xuQEAgLTgwMCw2ICs4MDYsNyBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0bXNnX3B0ciArPSBmcmFnX2xlbjtcbiBcdH0gd2hpbGUgKHJlbWFpbmluZ19sZW4gXHUwMDNlIDApO1xuIFxuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGtmcmVlKG1zZ19kYXRhKTtcbiBcbiBcdHJldHVybiBsZW47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxMS42NzY0NTE2NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU1ODkyNTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldC9ORkMgTExDUCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gSSBpbW1lZGlhdGVseSBzcG90IHRoZSBtb2RpZmljYXRpb24gdG8gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbG9ja19zb2NrKHNrKWAgYW5kIGByZWxlYXNlX3NvY2soc2spYCBhcm91bmQgdGhlIGBzb2NrLVx1MDAzZWxvY2FsYCBhY2Nlc3MsIGFuZCBpbXBvcnRhbnRseSwgaXQgbW92ZXMgdGhhdCBgaWYgKGxvY2FsID09IE5VTEwpYCBjaGVjayAqaW5zaWRlKiB0aGUgbG9jay4gQWgsIHRoaXMgaXMgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBtaXRpZ2F0aW9uIOKAkyBwb3RlbnRpYWxseSBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWUuIFNtYXJ0LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIEkgc2hvdWxkIGFic29sdXRlbHkgZnV6eiBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgY29uY3VycmVuY3kgYnVncywgZXNwZWNpYWxseSBzaW5jZSBpdCdzIHBhcnQgb2YgdGhlIE5GQyBzdWJzeXN0ZW0sIHdoaWNoIGFsd2F5cyBoYXMgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2VzLlxuXG5CZWZvcmUgZGl2aW5nIGludG8gZnV6emluZywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBORkMgTExDUCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJ2xsIHJlYWNoIGZvciBgZ2l0IGdyZXBgIHRvIGZpbmQgdGhhdCBjb25maWcgZGlyZWN0aXZlLiBHb3R0YSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MTYuMDMyMzQ5MDg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTc2MTU5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfc2VuZF91aV9mcmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3AuaD0yNDQ9aW50IG5mY19sbGNwX3NlbmRfaV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcXG5uZXQvbmZjL2xsY3AuaC0yNDUtXFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjI0NjppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcXG5uZXQvbmZjL2xsY3AuaC0yNDctXFx0XFx0XFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jPTY0Nj1pbnQgbmZjX2xsY3Bfc2VuZF9pX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzI4LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjcyOTppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03MzAtXFx0XFx0XFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz03Nzc9c3RhdGljIGludCBsbGNwX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTgxNS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjgxNjpcXHRcXHRyZXR1cm4gbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShsbGNwX3NvY2ssIGFkZHItXFx1MDAzZWRzYXAsIGFkZHItXFx1MDAzZXNzYXAsXFxubmV0L25mYy9sbGNwX3NvY2suYy04MTctXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnLCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxOC4zODk5NzA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg1MTI5NzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gdGhlIE5GQy9MTENQIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBkb3duIHRoaXMgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGZ1bmN0aW9uLiBUaGUgY2FsbCB0byBpdCBvcmlnaW5hdGVzIGZyb20gYGxsY3Bfc29ja19zZW5kbXNnYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC9uZmMvbGxjcF9zb2NrLmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgbGluay4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBiZWhpbmQgdGhpcyBORkMgc3Vic3lzdGVtLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBlbnRyaWVzIGZvciBORkM7IGZpZ3VyaW5nIG91dCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggYXJlIGF2YWlsYWJsZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjIxLjI0MTI3MDM3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ4MDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL0tjb25maWctNS1cXG5uZXQvbmZjL0tjb25maWc6NjptZW51Y29uZmlnIE5GQ1xcbm5ldC9uZmMvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4tLVxcbm5ldC9uZmMvS2NvbmZpZy0xNi1cXG5uZXQvbmZjL0tjb25maWc6MTc6Y29uZmlnIE5GQ19ESUdJVEFMXFxubmV0L25mYy9LY29uZmlnLTE4LVxcdGRlcGVuZHMgb24gTkZDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjIxLjMxNTc1NzU4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjMzMTEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbGxjcF9jb21tYW5kcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbXBvbmVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyBgbGxjcF9jb21tYW5kcy5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBORkMsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIHRoZSBgbmV0L25mYy9gIGRpcmVjdG9yeS4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjcnVjaWFsIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYGxsY3BfY29tbWFuZHMuY2Agd2lsbCBiZSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJ20gcHJlcGFyZWQgZm9yIGl0IHRvIGJlIGEgYml0IG1vcmUgaW5kaXJlY3QgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gaW4gdXNlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoyNC4yMzkwNzE1NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMzIzMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY3BfY29tbWFuZHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSArPSBuZmNfZGlnaXRhbC5vXFxubmV0L25mYy9NYWtlZmlsZS0xMC1cXG5uZXQvbmZjL01ha2VmaWxlOjExOm5mYy1vYmpzIDo9IGNvcmUubyBuZXRsaW5rLm8gYWZfbmZjLm8gcmF3c29jay5vIGxsY3BfY29yZS5vIGxsY3BfY29tbWFuZHMubyBcXFxcXFxubmV0L25mYy9NYWtlZmlsZS0xMi1cXHRcXHRsbGNwX3NvY2sub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoyNC4zNzI0MDA2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Njc5NzgxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTkZDIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtJ3MgYXBwYXJlbnRseSBidWlsdCB3aXRoIGBDT05GSUdfTkZDYCBlbmFibGVkLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBHaXZlbiB0aGF0LCBteSBuZXh0IG1vdmUgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIE5GQyBpcyBiZWluZyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGlzIHRoZSBgbmV0L25mYy9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgcmVzaWRlLCBhbmQgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSByZWxhdGVkIHN1Yi1vcHRpb25zIGxpbmtlZCB0byBgQ09ORklHX05GQ2AuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBvdmVydmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjI3LjM0MDM4MjEwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTkZDIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkZDXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAgODpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZDIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDk6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTkZDIChOZWFyIGZpZWxkXFxuICAxMjpcXHRcXHQgIGNvbW11bmljYXRpb24pIGRldmljZXMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMTU6XFx0XFx0ICBiZSBjYWxsZWQgbmZjLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgTkZDX0RJR0lUQUxcXG4gIDE4OlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAxOTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JDX0lUVV9UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjI3LjM0MDQ3Mzg5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQwMTMzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkZDIFNlbmQgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgTkZDIGRhdGEgZ2V0cyBzZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBDT05GSUdfTkZDYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBwYXRoLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVhY2hlZCB0aHJvdWdoIGBsbGNwX3NvY2tfc2VuZG1zZ2AuIEhtbSwgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblJpZ2h0LCBORkMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBoYW5kbGVkIHVuZGVyIGBBRl9ORkNgLiBOb3csIEkgbmVlZCB0byBrbm93IGlmIGBsbGNwX3NvY2tfc2VuZG1zZ2AgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdXNlcnNwYWNlLiBMZXQgbWUgc2VlLCB5ZXMsIGl0J3MgZXhwb3NlZCB2aWEgYHNlbmRtc2dgIG9uIGFuIGBBRl9ORkNgIHNvY2tldC4gUGVyZmVjdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjMxLjI4MDYwOTY0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjE3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY3Bfc29ja19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwX3NvY2suYz02NTM9c3RhdGljIGludCBsbGNwX3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqX2FkZHIsXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTc3Ni1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjc3NzpzdGF0aWMgaW50IGxsY3Bfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTc3OC1cXHRcXHRcXHQgICAgIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jPTkxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy05MzMtXFx0LmdldHNvY2tvcHQgICAgID0gbmZjX2xsY3BfZ2V0c29ja29wdCxcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjkzNDpcXHQuc2VuZG1zZyAgICAgICAgPSBsbGNwX3NvY2tfc2VuZG1zZyxcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTkzNS1cXHQucmVjdm1zZyAgICAgICAgPSBsbGNwX3NvY2tfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MzEuMzg1ODMxNzA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTExMDkzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMTENQIFNvY2tldCBTZW5kIE1lc3NhZ2UgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgLnNlbmRtc2dgIGhhbmRsZXIgZm9yIGBsbGNwX3NvY2tfb3BzYC4gUmlnaHQsIHRoYXQgbWVhbnMgYGxsY3Bfc29ja19zZW5kbXNnYCBhbmQgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGFyZSBrZXkgZnVuY3Rpb25zIHRvIGRpc3NlY3QuIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBpcyBub24tc3RhdGljLCB3aGljaCBpcyBjb252ZW5pZW50IGZvciB0cmFjaW5nLiBgbGxjcF9zb2NrX3NlbmRtc2dgIGlzIHN0YXRpYywgYnV0IGl0ICppcyogYW4gQVBJIGVudHJ5IHBvaW50LCBzbyBJJ2xsIGNvbnNpZGVyIGluY2x1ZGluZyBpdCwgYnV0IGZvciBub3csIEknbGwgZm9jdXMgb24gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IGBORkNgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgb25lLiBTaW1wbGUgZW5vdWdoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHZlcmlmeSB0aGF0IGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIFllcywgaXQgaXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBzZW5kbXNnYCBjYWxscyBvbiBhbiBgQUZfTkZDYCBzb2NrZXQgdXNpbmcgZWl0aGVyIGBTT0NLX0RHUkFNYCBvciBgU09DS19SQVdgIChMTENQKSBzb2NrZXQgdHlwZXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpbiBgbmV0L25mYy9hZl9uZmMuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDozNi4wNzY5NDMwODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTc0MTc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNwX3NvY2tfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvYWZfbmZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjM2LjE3NDEyODM3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA2NzY2NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyB5b3VyIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBsbGNwX3NvY2tfb3BzYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbGxjcF9zb2NrX29wc2Agc3RydWN0dXJlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgdGhpbmcgKmFjdHVhbGx5KiB1c2VkPyBJdCdzIGFsbCB3ZWxsIGFuZCBnb29kIGRlZmluaW5nIGl0LCBidXQgaWYgaXQncyBqdXN0IHNpdHRpbmcgdGhlcmUgdW51c2VkLCB0aGF0J3MgYSBwcm9ibGVtIGluIGl0c2VsZiwgaW5kaWNhdGluZyBkZWFkIGNvZGUgb3IgYSBtaXNjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgcGF0aHMgaXQncyBpbnZvbHZlZCBpbi4gSXQncyBhIGZvdW5kYXRpb25hbCBzdHJ1Y3QsIGFuZCB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0cyBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKiwgaXMga2V5IHRvIG1ha2luZyBhbnkgcHJvZ3Jlc3Mgb24gdGhpcyBpc3N1ZS4gTGV0J3Mgc2VlIGlmIGEgcXVpY2sgZ3JlcCBvciBjb2RlIHNlYXJjaCBjYW4gZ2l2ZSBtZSBzb21lIGhpbnRzIHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDozOS4wODA4OTczMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwMjE2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjcF9zb2NrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3Bfc29jay5jPTgzMD1zdGF0aWMgaW50IGxsY3Bfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTE4LVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY3Bfc29ja19vcHMgPSB7XFxubmV0L25mYy9sbGNwX3NvY2suYy05MjAtXFx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz0xMDI2PXN0YXRpYyBpbnQgbGxjcF9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNDItXFx0fSBlbHNlIHtcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNDM6XFx0XFx0c29jay1cXHUwMDNlb3BzID0gXFx1MDAyNmxsY3Bfc29ja19vcHM7XFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDQ0LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MzkuMTcxOTI1Nzc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDM2OTk3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgbGxjcF9zb2NrX2NyZWF0ZSBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGxsY3Bfc29ja19jcmVhdGVgIHJlZmVyZW5jZWQgd2l0aGluIGBuZXQvbmZjL2FmX25mYy5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhleSBkb2luZyB3aXRoIGl0IHdpdGhpbiB0aGUgTkZDIHN1YnN5c3RlbT8gV2Uga25vdyBgbGxjcF9zb2NrX2NyZWF0ZWAgaXMgZm91bmRhdGlvbmFsIGZvciBMTENQIHNvY2tldCBjcmVhdGlvbiwgb2J2aW91c2x5LiBTbywgYXJlIHRoZXkgaW5pdGlhbGl6aW5nIExMQ1Agc29ja2V0cyBzcGVjaWZpY2FsbHkgZm9yIE5GQy1yZWxhdGVkIGNvbW11bmljYXRpb24/IEkgbmVlZCB0byBkaWcgaW4gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0LlxuXG5NeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBpdCdzIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIGVpdGhlciBhbiBORkMgY29udHJvbGxlciB0byBpbnRlcmFjdCB3aXRoIG90aGVyIE5GQyBkZXZpY2VzLCBvciBwZXJoYXBzIGZvciBwcm92aWRpbmcgYSB1c2VyIHNwYWNlIGludGVyZmFjZSBmb3IgYW4gTkZDIGFwcGxpY2F0aW9uLiBBcmUgdGhleSBoYW5kbGluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQ/IElzIHRoaXMgZm9yIGRhdGEgZXhjaGFuZ2UgYXQgdGhlIExMQ1AgbGV2ZWw/IEknbSBjdXJpb3VzIHRvIHNlZSBpZiB0aGlzIGBhZl9uZmMuY2AgZmlsZSBpcyBtYW5hZ2luZyB0aGUgbG93ZXIgbGF5ZXJzLCBvciBwb3RlbnRpYWxseSBvZmZlcmluZyBhIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc29ja2V0cyBhcmUgYmVpbmcgdXNlZCwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBzZXQgb24gdGhlIHNvY2tldHMgdXBvbiBjcmVhdGlvbi4gSSBiZXQgdGhlIHNvY2tldCBvcHRpb25zIG9yIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBkZXRhaWxzIGFyZSB3aGVyZSB0aGUgcmVhbCBqdWljZSBpcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6NDIuODE1NjI4MTc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk4OTIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNwX3NvY2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmM9MTAxMj12b2lkIG5mY19sbGNwX3NvY2tfZnJlZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTAyNS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwMjY6c3RhdGljIGludCBsbGNwX3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjctXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZmNfcHJvdG9jb2wgKm5mY19wcm90bywgaW50IGtlcm4pXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfcHJvdG9jb2wgbGxjcF9uZmNfcHJvdG8gPSB7XFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTYtXFx0Lm93bmVyICAgID0gVEhJU19NT0RVTEUsXFxubmV0L25mYy9sbGNwX3NvY2suYzoxMDU3OlxcdC5jcmVhdGUgICA9IGxsY3Bfc29ja19jcmVhdGVcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6NDIuODk0NjI0NTgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTk5Mzk4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqTExDUCBQcm90b2NvbCBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSByZWdpc3RyYXRpb24gb2YgYGxsY3BfbmZjX3Byb3RvYC4gT2theSwgdGhhdCdzIGluIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgaXQsIGdpdmVuIHRoYXQgaXQncyB0aGUgY29yZSBMTENQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiBmb3IgTkZDLiBJdCdzIGdvb2QgdG8gc2VlIGl0IHJpZ2h0IHRoZXJlLiBJdCBtZWFucyB0aGlzIGlzIHdoZXJlIHRoZSBMTENQIHNvY2tldCBmYW1pbHkgaXMgZGVmaW5lZCBhbmQgdGhlIHByb3RvY29sIGlzIGhhbmRsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93IEkgY2FuIHN0YXJ0IHRyYWNpbmcgYmFjayBob3cgdGhpcyBwcm90b2NvbCBoYW5kbGVyIGlzIGV4cG9zZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDo0NS43OTQ1NjY4NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjkxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY3BfbmZjX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmM9MTAyNj1zdGF0aWMgaW50IGxsY3Bfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDUyLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mY19wcm90b2NvbCBsbGNwX25mY19wcm90byA9IHtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTQtXFx0LmlkXFx0ICA9IE5GQ19TT0NLUFJPVE9fTExDUCxcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM9MTA2MD1pbnQgX19pbml0IG5mY19sbGNwX3NvY2tfaW5pdCh2b2lkKVxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA2MS17XFxubmV0L25mYy9sbGNwX3NvY2suYzoxMDYyOlxcdHJldHVybiBuZmNfcHJvdG9fcmVnaXN0ZXIoXFx1MDAyNmxsY3BfbmZjX3Byb3RvKTtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNjMtfVxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz0xMDY1PXZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpXFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDY2LXtcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNjc6XFx0bmZjX3Byb3RvX3VucmVnaXN0ZXIoXFx1MDAyNmxsY3BfbmZjX3Byb3RvKTtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDo0NS44OTAyNjM2MThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NDQwODcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBORkMgTExDUCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGZ1bmN0aW9uLiBBcHBhcmVudGx5LCB0aGVyZSdzIGEgcHJvYmxlbSB3aGVyZSBgc29jay1cdTAwM2Vsb2NhbGAgY2FuIGJlIGVpdGhlciBudWxsIG9yIGZyZWVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgaXQncyBiZWluZyB1c2VkLiBUaGUgZml4IGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiBvZiBgbG9ja19zb2NrKHNrKWAgYXJvdW5kIHRoZSBwcm9ibGVtYXRpYyBhY2Nlc3MsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCB0byBwcm90ZWN0IGFnYWluc3QgYSByYWNlIGNvbmRpdGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE5GQyBMTENQIG5ldHdvcmtpbmcgbGF5ZXIuIFRoaXMgbWVhbnMgdXNlcnNwYWNlIGNvZGUsIGludGVyYWN0aW5nIHRocm91Z2ggYHNlbmRtc2dgIG9uIGFuIGBBRl9ORkNgIHNvY2tldCwgY291bGQgdHJpZ2dlciB0aGlzIHBhdGguXG5cbkJlY2F1c2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGludm9sdmluZyBsb2NraW5nLCBJJ2QgY29uc2lkZXIgaXQgYSBoaWdoIHByaW9yaXR5IGZvciBmdXp6aW5nLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBsb2NraW5nIG1lY2hhbmlzbSBpbnRyb2R1Y2VkIGluZGVlZCBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IHBvdGVudGlhbGx5IGludHJvZHVjaW5nIGFueSBuZXcgZGVhZGxvY2sgc2NlbmFyaW9zLiBUaGlzIGlzIHZpdGFsIHRvIGVuc3VyaW5nIHJvYnVzdCBuZXR3b3JraW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXMgdXNlci1hY2Nlc3NpYmxlLlxuXG5JJ3ZlIGNoZWNrZWQgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBORkNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbi4gSXQgZGVwZW5kcyBvbiBgUkZLSUxMIHx8ICFSRktJTExgLCBidXQgbm8gb3RoZXIgc2lnbmlmaWNhbnQgY29uZmlncyBqdW1wIG91dCBhdCBtZSBhcyBkaXJlY3RseSByZWxhdGVkLiBTbywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM5NCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6NTEuODc0Njc0NjQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzQ5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 14:10:24 +0000 UTC FinishedAt: 2026-07-26 14:34:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "e9ba2a50-13aa-4872-b6b7-4b65f1300663" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_llcp_send_ui_frame" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX3NlbmRfdWlfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXHUwMDNlbG9jYWxgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5GQyBMTENQIG5ldHdvcmtpbmcgY29kZSwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agb24gYW4gQUZfTkZDIHNvY2tldC4gRnV6emluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgaGVscCBlbnN1cmUgdGhlIGxvY2tpbmcgY29ycmVjdGx5IHByZXZlbnRzIHRoZSByYWNlIHdpdGhvdXQgaW50cm9kdWNpbmcgZGVhZGxvY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2NjOGZkNWE0MGM2OWU2MWMwYjVkY2I0YmI2OTU3NmEwYWMyMDE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE0OjM0OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jIGIvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcbmluZGV4IDI5MWYyNmZhY2JmM2FhLi5jZmQ1ZjZhZWJmOGRmZCAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3BfY29tbWFuZHMuY1xuQEAgLTczMCw2ICYjNDM7NzMwLDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXG4gXHRcdFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpwZHU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXHRzaXplX3QgZnJhZ19sZW4gPSAwLCByZW1haW5pbmdfbGVuO1xuIFx0dTggKm1zZ19wdHIsICptc2dfZGF0YTtcbkBAIC03MzgsMTAgJiM0Mzs3MzksNiBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1NlbmQgVUkgZnJhbWUgbGVuICV6ZFxcblwmIzM0OywgbGVuKTtcbiBcbi1cdGxvY2FsID0gc29jay1cdTAwM2Vsb2NhbDtcbi1cdGlmIChsb2NhbCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbiBcdG1zZ19kYXRhID0ga21hbGxvYyhsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmIChtc2dfZGF0YSA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC03NTEsNiAmIzQzOzc0OCwxNSBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG4gXG4mIzQzO1x0bG9ja19zb2NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0bG9jYWwgPSBzb2NrLVx1MDAzZWxvY2FsO1xuJiM0MztcdGlmIChsb2NhbCA9PSBOVUxMKSB7XG4mIzQzO1x0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0a2ZyZWUobXNnX2RhdGEpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJlbWFpbmluZ19sZW4gPSBsZW47XG4gXHRtc2dfcHRyID0gbXNnX2RhdGE7XG4gXG5AQCAtNzYzLDcgJiM0Mzs3NjksNyBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0cHJfZGVidWcoXCYjMzQ7RnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemRcJiMzNDssXG4gXHRcdFx0IGZyYWdfbGVuLCByZW1haW5pbmdfbGVuKTtcbiBcbi1cdFx0cGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stXHUwMDNlZGV2LCBcdTAwMjZzb2NrLVx1MDAzZXNrLCAwLFxuJiM0MztcdFx0cGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stXHUwMDNlZGV2LCBzaywgMCxcbiBcdFx0XHRcdFx0IGZyYWdfbGVuICYjNDM7IExMQ1BfSEVBREVSX1NJWkUsIFx1MDAyNmVycik7XG4gXHRcdGlmIChwZHUgPT0gTlVMTCkge1xuIFx0XHRcdHByX2VycihcJiMzNDtDb3VsZCBub3QgYWxsb2NhdGUgUERVIChlcnJvcj0lZClcXG5cJiMzNDssIGVycik7XG5AQCAtODAwLDYgJiM0Mzs4MDYsNyBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0bXNnX3B0ciAmIzQzOz0gZnJhZ19sZW47XG4gXHR9IHdoaWxlIChyZW1haW5pbmdfbGVuIFx1MDAzZSAwKTtcbiBcbiYjNDM7XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0a2ZyZWUobXNnX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGxlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZjX2xsY3Bfc2VuZF91aV9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGJ5IGFkZGluZyBzb2NrZXQgbG9ja2luZyBhcm91bmQgdGhlIGFjY2VzcyB0byBgc29jay1cdTAwM2Vsb2NhbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTkZDIExMQ1AgbmV0d29ya2luZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvbiBhbiBBRl9ORkMgc29ja2V0LiBGdXp6aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGUgbG9ja2luZyBjb3JyZWN0bHkgcHJldmVudHMgdGhlIHJhY2Ugd2l0aG91dCBpbnRyb2R1Y2luZyBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjY2M4ZmQ1YTQwYzY5ZTYxYzBiNWRjYjRiYjY5NTc2YTBhYzIwMThhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMTQ6MzQ6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29tbWFuZHMuYyBiL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jCmluZGV4IDI5MWYyNmZhY2JmM2FhLi5jZmQ1ZjZhZWJmOGRmZCAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmMKQEAgLTczMCw2ICYjNDM7NzMwLDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsCiAJCQkgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnBkdTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsOwogCXNpemVfdCBmcmFnX2xlbiA9IDAsIHJlbWFpbmluZ19sZW47CiAJdTggKm1zZ19wdHIsICptc2dfZGF0YTsKQEAgLTczOCwxMCAmIzQzOzczOSw2IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLAogCiAJcHJfZGVidWcoJiMzNDtTZW5kIFVJIGZyYW1lIGxlbiAlemRcbiYjMzQ7LCBsZW4pOwogCi0JbG9jYWwgPSBzb2NrLSZndDtsb2NhbDsKLQlpZiAobG9jYWwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAltc2dfZGF0YSA9IGttYWxsb2MobGVuLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKG1zZ19kYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzUxLDYgJiM0Mzs3NDgsMTUgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsCiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAomIzQzOwlsb2NrX3NvY2soc2spOwomIzQzOwomIzQzOwlsb2NhbCA9IHNvY2stJmd0O2xvY2FsOwomIzQzOwlpZiAobG9jYWwgPT0gTlVMTCkgewomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCWtmcmVlKG1zZ19kYXRhKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiAJcmVtYWluaW5nX2xlbiA9IGxlbjsKIAltc2dfcHRyID0gbXNnX2RhdGE7CiAKQEAgLTc2Myw3ICYjNDM7NzY5LDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsCiAJCXByX2RlYnVnKCYjMzQ7RnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemQmIzM0OywKIAkJCSBmcmFnX2xlbiwgcmVtYWluaW5nX2xlbik7CiAKLQkJcGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stJmd0O2RldiwgJmFtcDtzb2NrLSZndDtzaywgMCwKJiM0MzsJCXBkdSA9IG5mY19hbGxvY19zZW5kX3NrYihzb2NrLSZndDtkZXYsIHNrLCAwLAogCQkJCQkgZnJhZ19sZW4gJiM0MzsgTExDUF9IRUFERVJfU0laRSwgJmFtcDtlcnIpOwogCQlpZiAocGR1ID09IE5VTEwpIHsKIAkJCXByX2VycigmIzM0O0NvdWxkIG5vdCBhbGxvY2F0ZSBQRFUgKGVycm9yPSVkKVxuJiMzNDssIGVycik7CkBAIC04MDAsNiAmIzQzOzgwNiw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLAogCQltc2dfcHRyICYjNDM7PSBmcmFnX2xlbjsKIAl9IHdoaWxlIChyZW1haW5pbmdfbGVuICZndDsgMCk7CiAKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKIAlrZnJlZShtc2dfZGF0YSk7CiAKIAlyZXR1cm4gbGVuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldC9ORkMgTExDUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gSSBpbW1lZGlhdGVseSBzcG90IHRoZSBtb2RpZmljYXRpb24gdG8gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbG9ja19zb2NrKHNrKWAgYW5kIGByZWxlYXNlX3NvY2soc2spYCBhcm91bmQgdGhlIGBzb2NrLSZndDtsb2NhbGAgYWNjZXNzLCBhbmQgaW1wb3J0YW50bHksIGl0IG1vdmVzIHRoYXQgYGlmIChsb2NhbCA9PSBOVUxMKWAgY2hlY2sgKmluc2lkZSogdGhlIGxvY2suIEFoLCB0aGlzIGlzIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gbWl0aWdhdGlvbiDigJMgcG90ZW50aWFsbHkgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlLiBTbWFydC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSBzaG91bGQgYWJzb2x1dGVseSBmdXp6IGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciB1bmNvdmVyaW5nIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIE5GQyBzdWJzeXN0ZW0sIHdoaWNoIGFsd2F5cyBoYXMgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2VzLgoKQmVmb3JlIGRpdmluZyBpbnRvIGZ1enppbmcsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIE5GQyBMTENQIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHJlYWNoIGZvciBgZ2l0IGdyZXBgIHRvIGZpbmQgdGhhdCBjb25maWcgZGlyZWN0aXZlLiBHb3R0YSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwX3NlbmRfdWlfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwLmg9MjQ0PWludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG5uZXQvbmZjL2xsY3AuaC0yNDUtXHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xubmV0L25mYy9sbGNwLmg6MjQ2OmludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxubmV0L25mYy9sbGNwLmgtMjQ3LVx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NjQ2PWludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzI4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NzI5OmludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzMwLVx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jPTc3Nz1zdGF0aWMgaW50IGxsY3Bfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jLTgxNS1cbm5ldC9uZmMvbGxjcF9zb2NrLmM6ODE2Olx0XHRyZXR1cm4gbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShsbGNwX3NvY2ssIGFkZHItXHUwMDNlZHNhcCwgYWRkci1cdTAwM2Vzc2FwLFxubmV0L25mYy9sbGNwX3NvY2suYy04MTctXHRcdFx0XHRcdCAgICAgIG1zZywgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gdGhlIE5GQy9MTENQIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIGRvd24gdGhpcyBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAgZnVuY3Rpb24uIFRoZSBjYWxsIHRvIGl0IG9yaWdpbmF0ZXMgZnJvbSBgbGxjcF9zb2NrX3NlbmRtc2dgLCB3aGljaCBsaXZlcyBpbiBgbmV0L25mYy9sbGNwX3NvY2suY2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgbGluay4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBiZWhpbmQgdGhpcyBORkMgc3Vic3lzdGVtLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBlbnRyaWVzIGZvciBORkM7IGZpZ3VyaW5nIG91dCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggYXJlIGF2YWlsYWJsZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0xNi1cbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gTkZDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbGxjcF9jb21tYW5kcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb21wb25lbnRzIGFyZSByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgYGxsY3BfY29tbWFuZHMuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5GQywgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGBuZXQvbmZjL2AgZGlyZWN0b3J5LiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjcnVjaWFsIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYGxsY3BfY29tbWFuZHMuY2Agd2lsbCBiZSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJiMzOTttIHByZXBhcmVkIGZvciBpdCB0byBiZSBhIGJpdCBtb3JlIGluZGlyZWN0IGRlcGVuZGluZyBvbiB0aGUgYnVpbGQgc3lzdGVtIGluIHVzZS4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY3BfY29tbWFuZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICYjNDM7PSBuZmNfZGlnaXRhbC5vXG5uZXQvbmZjL01ha2VmaWxlLTEwLVxubmV0L25mYy9NYWtlZmlsZToxMTpuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbm5ldC9uZmMvTWFrZWZpbGUtMTItXHRcdGxsY3Bfc29jay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5GQyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0mIzM5O3MgYXBwYXJlbnRseSBidWlsdCB3aXRoIGBDT05GSUdfTkZDYCBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gdGhhdCwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcyB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogTkZDIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgdGhlIGBuZXQvbmZjL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgcmVzaWRlLCBhbmQgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSByZWxhdGVkIHN1Yi1vcHRpb25zIGxpbmtlZCB0byBgQ09ORklHX05GQ2AuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBORkMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORkNcbiAgIDc6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgIDg6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgOTpcdFx0ZGVmYXVsdCBuXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTkZDIChOZWFyIGZpZWxkXG4gIDEyOlx0XHQgIGNvbW11bmljYXRpb24pIGRldmljZXMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTU6XHRcdCAgYmUgY2FsbGVkIG5mYy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgTkZDX0RJR0lUQUxcbiAgMTg6XHRcdGRlcGVuZHMgb24gTkZDXG4gIDE5Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDIwOlx0XHRzZWxlY3QgQ1JDX0lUVV9UXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORkMgU2VuZCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IE5GQyBkYXRhIGdldHMgc2VudCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgQ09ORklHX05GQ2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCB0aGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgcGF0aC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWFjaGVkIHRocm91Z2ggYGxsY3Bfc29ja19zZW5kbXNnYC4gSG1tLCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpSaWdodCwgTkZDIGlzIGEgbmV0d29yayBwcm90b2NvbCwgaGFuZGxlZCB1bmRlciBgQUZfTkZDYC4gTm93LCBJIG5lZWQgdG8ga25vdyBpZiBgbGxjcF9zb2NrX3NlbmRtc2dgIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHVzZXJzcGFjZS4gTGV0IG1lIHNlZSwgeWVzLCBpdCYjMzk7cyBleHBvc2VkIHZpYSBgc2VuZG1zZ2Agb24gYW4gYEFGX05GQ2Agc29ja2V0LiBQZXJmZWN0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjcF9zb2NrX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3Bfc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9NjUzPXN0YXRpYyBpbnQgbGxjcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKl9hZGRyLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzc2LVxubmV0L25mYy9sbGNwX3NvY2suYzo3Nzc6c3RhdGljIGludCBsbGNwX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbmZjL2xsY3Bfc29jay5jLTc3OC1cdFx0XHQgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz05MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9zb2NrX29wcyA9IHtcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jLTkzMy1cdC5nZXRzb2Nrb3B0ICAgICA9IG5mY19sbGNwX2dldHNvY2tvcHQsXG5uZXQvbmZjL2xsY3Bfc29jay5jOjkzNDpcdC5zZW5kbXNnICAgICAgICA9IGxsY3Bfc29ja19zZW5kbXNnLFxubmV0L25mYy9sbGNwX3NvY2suYy05MzUtXHQucmVjdm1zZyAgICAgICAgPSBsbGNwX3NvY2tfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExMQ1AgU29ja2V0IFNlbmQgTWVzc2FnZSBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYC5zZW5kbXNnYCBoYW5kbGVyIGZvciBgbGxjcF9zb2NrX29wc2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGBsbGNwX3NvY2tfc2VuZG1zZ2AgYW5kIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBhcmUga2V5IGZ1bmN0aW9ucyB0byBkaXNzZWN0LiBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgY29udmVuaWVudCBmb3IgdHJhY2luZy4gYGxsY3Bfc29ja19zZW5kbXNnYCBpcyBzdGF0aWMsIGJ1dCBpdCAqaXMqIGFuIEFQSSBlbnRyeSBwb2ludCwgc28gSSYjMzk7bGwgY29uc2lkZXIgaW5jbHVkaW5nIGl0LCBidXQgZm9yIG5vdywgSSYjMzk7bGwgZm9jdXMgb24gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLgoKTm93LCBhcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBgTkZDYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IG9uZS4gU2ltcGxlIGVub3VnaC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdmVyaWZ5IHRoYXQgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gWWVzLCBpdCBpcywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHNlbmRtc2dgIGNhbGxzIG9uIGFuIGBBRl9ORkNgIHNvY2tldCB1c2luZyBlaXRoZXIgYFNPQ0tfREdSQU1gIG9yIGBTT0NLX1JBV2AgKExMQ1ApIHNvY2tldCB0eXBlcy4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvbmZjL2FmX25mYy5jYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY3Bfc29ja19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL2FmX25mYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBmcmFtZWQgYXMgeW91ciBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGxsY3Bfc29ja19vcHNgIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGxsY3Bfc29ja19vcHNgIHN0cnVjdHVyZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSB0aGUgaGVjayBpcyB0aGlzIHRoaW5nICphY3R1YWxseSogdXNlZD8gSXQmIzM5O3MgYWxsIHdlbGwgYW5kIGdvb2QgZGVmaW5pbmcgaXQsIGJ1dCBpZiBpdCYjMzk7cyBqdXN0IHNpdHRpbmcgdGhlcmUgdW51c2VkLCB0aGF0JiMzOTtzIGEgcHJvYmxlbSBpbiBpdHNlbGYsIGluZGljYXRpbmcgZGVhZCBjb2RlIG9yIGEgbWlzY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBhdGhzIGl0JiMzOTtzIGludm9sdmVkIGluLiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBzdHJ1Y3QsIGFuZCB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0cyBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKiwgaXMga2V5IHRvIG1ha2luZyBhbnkgcHJvZ3Jlc3Mgb24gdGhpcyBpc3N1ZS4gTGV0JiMzOTtzIHNlZSBpZiBhIHF1aWNrIGdyZXAgb3IgY29kZSBzZWFyY2ggY2FuIGdpdmUgbWUgc29tZSBoaW50cyB0byBzdGFydCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNwX3NvY2tfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX3NvY2suYz04MzA9c3RhdGljIGludCBsbGNwX3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy05MTgtXG5uZXQvbmZjL2xsY3Bfc29jay5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3NvY2tfb3BzID0ge1xubmV0L25mYy9sbGNwX3NvY2suYy05MjAtXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz0xMDI2PXN0YXRpYyBpbnQgbGxjcF9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy0xMDQyLVx0fSBlbHNlIHtcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA0MzpcdFx0c29jay1cdTAwM2VvcHMgPSBcdTAwMjZsbGNwX3NvY2tfb3BzO1xubmV0L25mYy9sbGNwX3NvY2suYy0xMDQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBsbGNwX3NvY2tfY3JlYXRlIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBsbGNwX3NvY2tfY3JlYXRlYCByZWZlcmVuY2VkIHdpdGhpbiBgbmV0L25mYy9hZl9uZmMuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IGRvaW5nIHdpdGggaXQgd2l0aGluIHRoZSBORkMgc3Vic3lzdGVtPyBXZSBrbm93IGBsbGNwX3NvY2tfY3JlYXRlYCBpcyBmb3VuZGF0aW9uYWwgZm9yIExMQ1Agc29ja2V0IGNyZWF0aW9uLCBvYnZpb3VzbHkuIFNvLCBhcmUgdGhleSBpbml0aWFsaXppbmcgTExDUCBzb2NrZXRzIHNwZWNpZmljYWxseSBmb3IgTkZDLXJlbGF0ZWQgY29tbXVuaWNhdGlvbj8gSSBuZWVkIHRvIGRpZyBpbiB0byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHQuCgpNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciBlaXRoZXIgYW4gTkZDIGNvbnRyb2xsZXIgdG8gaW50ZXJhY3Qgd2l0aCBvdGhlciBORkMgZGV2aWNlcywgb3IgcGVyaGFwcyBmb3IgcHJvdmlkaW5nIGEgdXNlciBzcGFjZSBpbnRlcmZhY2UgZm9yIGFuIE5GQyBhcHBsaWNhdGlvbi4gQXJlIHRoZXkgaGFuZGxpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50PyBJcyB0aGlzIGZvciBkYXRhIGV4Y2hhbmdlIGF0IHRoZSBMTENQIGxldmVsPyBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGlmIHRoaXMgYGFmX25mYy5jYCBmaWxlIGlzIG1hbmFnaW5nIHRoZSBsb3dlciBsYXllcnMsIG9yIHBvdGVudGlhbGx5IG9mZmVyaW5nIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzb2NrZXRzIGFyZSBiZWluZyB1c2VkLCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBvbiB0aGUgc29ja2V0cyB1cG9uIGNyZWF0aW9uLiBJIGJldCB0aGUgc29ja2V0IG9wdGlvbnMgb3IgdGhlIHByb3RvY29sLXNwZWNpZmljIGRldGFpbHMgYXJlIHdoZXJlIHRoZSByZWFsIGp1aWNlIGlzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjcF9zb2NrX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9MTAxMj12b2lkIG5mY19sbGNwX3NvY2tfZnJlZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjUtXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwMjY6c3RhdGljIGludCBsbGNwX3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTAyNy1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mY19wcm90b2NvbCAqbmZjX3Byb3RvLCBpbnQga2Vybilcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfcHJvdG9jb2wgbGxjcF9uZmNfcHJvdG8gPSB7XG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy0xMDU2LVx0Lm93bmVyICAgID0gVEhJU19NT0RVTEUsXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNTc6XHQuY3JlYXRlICAgPSBsbGNwX3NvY2tfY3JlYXRlXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTgtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyBpdDoKCioqTExDUCBQcm90b2NvbCBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBgbGxjcF9uZmNfcHJvdG9gLiBPa2F5LCB0aGF0JiMzOTtzIGluIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyB0aGUgY29yZSBMTENQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiBmb3IgTkZDLiBJdCYjMzk7cyBnb29kIHRvIHNlZSBpdCByaWdodCB0aGVyZS4gSXQgbWVhbnMgdGhpcyBpcyB3aGVyZSB0aGUgTExDUCBzb2NrZXQgZmFtaWx5IGlzIGRlZmluZWQgYW5kIHRoZSBwcm90b2NvbCBpcyBoYW5kbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdyBJIGNhbiBzdGFydCB0cmFjaW5nIGJhY2sgaG93IHRoaXMgcHJvdG9jb2wgaGFuZGxlciBpcyBleHBvc2VkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNwX25mY19wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9MTAyNj1zdGF0aWMgaW50IGxsY3Bfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA1Mi1cbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mY19wcm90b2NvbCBsbGNwX25mY19wcm90byA9IHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA1NC1cdC5pZFx0ICA9IE5GQ19TT0NLUFJPVE9fTExDUCxcbi0tXG5uZXQvbmZjL2xsY3Bfc29jay5jPTEwNjA9aW50IF9faW5pdCBuZmNfbGxjcF9zb2NrX2luaXQodm9pZClcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA2MS17XG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNjI6XHRyZXR1cm4gbmZjX3Byb3RvX3JlZ2lzdGVyKFx1MDAyNmxsY3BfbmZjX3Byb3RvKTtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA2My19XG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz0xMDY1PXZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNjYte1xubmV0L25mYy9sbGNwX3NvY2suYzoxMDY3Olx0bmZjX3Byb3RvX3VucmVnaXN0ZXIoXHUwMDI2bGxjcF9uZmNfcHJvdG8pO1xubmV0L25mYy9sbGNwX3NvY2suYy0xMDY4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NAoJCQkJCQkJb3V0cHV0OiAxMzcKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkZDIExMQ1AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGZ1bmN0aW9uLiBBcHBhcmVudGx5LCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2hlcmUgYHNvY2stJmd0O2xvY2FsYCBjYW4gYmUgZWl0aGVyIG51bGwgb3IgZnJlZWQgYXQgdGhlIHNhbWUgdGltZSBhcyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgZml4IGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiBvZiBgbG9ja19zb2NrKHNrKWAgYXJvdW5kIHRoZSBwcm9ibGVtYXRpYyBhY2Nlc3MsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCB0byBwcm90ZWN0IGFnYWluc3QgYSByYWNlIGNvbmRpdGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE5GQyBMTENQIG5ldHdvcmtpbmcgbGF5ZXIuIFRoaXMgbWVhbnMgdXNlcnNwYWNlIGNvZGUsIGludGVyYWN0aW5nIHRocm91Z2ggYHNlbmRtc2dgIG9uIGFuIGBBRl9ORkNgIHNvY2tldCwgY291bGQgdHJpZ2dlciB0aGlzIHBhdGguCgpCZWNhdXNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgbG9ja2luZywgSSYjMzk7ZCBjb25zaWRlciBpdCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcuIFRoZSBnb2FsIGhlcmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGludHJvZHVjZWQgaW5kZWVkIHByZXZlbnRzIHRoZSByYWNlIHdpdGhvdXQgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgYW55IG5ldyBkZWFkbG9jayBzY2VuYXJpb3MuIFRoaXMgaXMgdml0YWwgdG8gZW5zdXJpbmcgcm9idXN0IG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBpdCBpcyB1c2VyLWFjY2Vzc2libGUuCgpJJiMzOTt2ZSBjaGVja2VkIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLCBhbmQgaXQgbG9va3MgbGlrZSBgTkZDYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24uIEl0IGRlcGVuZHMgb24gYFJGS0lMTCB8fCAhUkZLSUxMYCwgYnV0IG5vIG90aGVyIHNpZ25pZmljYW50IGNvbmZpZ3MganVtcCBvdXQgYXQgbWUgYXMgZGlyZWN0bHkgcmVsYXRlZC4gU28sIHdpdGggdGhhdCBjb25maXJtZWQsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAgYnkgYWRkaW5nIHNvY2tldCBsb2NraW5nIGFyb3VuZCB0aGUgYWNjZXNzIHRvIGBzb2NrLVx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZjX2xsY3Bfc2VuZF91aV9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGJ5IGFkZGluZyBzb2NrZXQgbG9ja2luZyBhcm91bmQgdGhlIGFjY2VzcyB0byBgc29jay1cdTAwM2Vsb2NhbGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTkZDIExMQ1AgbmV0d29ya2luZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvbiBhbiBBRl9ORkMgc29ja2V0LiBGdXp6aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGUgbG9ja2luZyBjb3JyZWN0bHkgcHJldmVudHMgdGhlIHJhY2Ugd2l0aG91dCBpbnRyb2R1Y2luZyBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxMS4wNjQ1MTEzMDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDkzMzUyNTU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MTEuMDY0NTE4MDU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTEzNTA2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjY2M4ZmQ1YTQwYzY5ZTYxYzBiNWRjYjRiYjY5NTc2YTBhYzIwMThhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDE0OjM0OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jIGIvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcXG5pbmRleCAyOTFmMjZmYWNiZjNhYS4uY2ZkNWY2YWViZjhkZmQgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcXG4rKysgYi9uZXQvbmZjL2xsY3BfY29tbWFuZHMuY1xcbkBAIC03MzAsNiArNzMwLDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcGR1O1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxuIFxcdHNpemVfdCBmcmFnX2xlbiA9IDAsIHJlbWFpbmluZ19sZW47XFxuIFxcdHU4ICptc2dfcHRyLCAqbXNnX2RhdGE7XFxuQEAgLTczOCwxMCArNzM5LDYgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiU2VuZCBVSSBmcmFtZSBsZW4gJXpkXFxcXG5cXFwiLCBsZW4pO1xcbiBcXG4tXFx0bG9jYWwgPSBzb2NrLVxcdTAwM2Vsb2NhbDtcXG4tXFx0aWYgKGxvY2FsID09IE5VTEwpXFxuLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi1cXG4gXFx0bXNnX2RhdGEgPSBrbWFsbG9jKGxlbiwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAobXNnX2RhdGEgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTc1MSw2ICs3NDgsMTUgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHR9XFxuIFxcbitcXHRsb2NrX3NvY2soc2spO1xcbitcXG4rXFx0bG9jYWwgPSBzb2NrLVxcdTAwM2Vsb2NhbDtcXG4rXFx0aWYgKGxvY2FsID09IE5VTEwpIHtcXG4rXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0a2ZyZWUobXNnX2RhdGEpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4gXFx0cmVtYWluaW5nX2xlbiA9IGxlbjtcXG4gXFx0bXNnX3B0ciA9IG1zZ19kYXRhO1xcbiBcXG5AQCAtNzYzLDcgKzc2OSw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwiRnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemRcXFwiLFxcbiBcXHRcXHRcXHQgZnJhZ19sZW4sIHJlbWFpbmluZ19sZW4pO1xcbiBcXG4tXFx0XFx0cGR1ID0gbmZjX2FsbG9jX3NlbmRfc2tiKHNvY2stXFx1MDAzZWRldiwgXFx1MDAyNnNvY2stXFx1MDAzZXNrLCAwLFxcbitcXHRcXHRwZHUgPSBuZmNfYWxsb2Nfc2VuZF9za2Ioc29jay1cXHUwMDNlZGV2LCBzaywgMCxcXG4gXFx0XFx0XFx0XFx0XFx0IGZyYWdfbGVuICsgTExDUF9IRUFERVJfU0laRSwgXFx1MDAyNmVycik7XFxuIFxcdFxcdGlmIChwZHUgPT0gTlVMTCkge1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcIkNvdWxkIG5vdCBhbGxvY2F0ZSBQRFUgKGVycm9yPSVkKVxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtODAwLDYgKzgwNiw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxcbiBcXHRcXHRtc2dfcHRyICs9IGZyYWdfbGVuO1xcbiBcXHR9IHdoaWxlIChyZW1haW5pbmdfbGVuIFxcdTAwM2UgMCk7XFxuIFxcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRrZnJlZShtc2dfZGF0YSk7XFxuIFxcbiBcXHRyZXR1cm4gbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxMS42NzY0NTA1NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDMyMTU3Njk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2NjOGZkNWE0MGM2OWU2MWMwYjVkY2I0YmI2OTU3NmEwYWMyMDE4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE0OjM0OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmMgYi9uZXQvbmZjL2xsY3BfY29tbWFuZHMuY1xuaW5kZXggMjkxZjI2ZmFjYmYzYWEuLmNmZDVmNmFlYmY4ZGZkIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvbW1hbmRzLmNcbisrKyBiL25ldC9uZmMvbGxjcF9jb21tYW5kcy5jXG5AQCAtNzMwLDYgKzczMCw3IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcGR1O1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2c29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXHRzaXplX3QgZnJhZ19sZW4gPSAwLCByZW1haW5pbmdfbGVuO1xuIFx0dTggKm1zZ19wdHIsICptc2dfZGF0YTtcbkBAIC03MzgsMTAgKzczOSw2IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxuIFxuIFx0cHJfZGVidWcoXCJTZW5kIFVJIGZyYW1lIGxlbiAlemRcXG5cIiwgbGVuKTtcbiBcbi1cdGxvY2FsID0gc29jay1cdTAwM2Vsb2NhbDtcbi1cdGlmIChsb2NhbCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cbiBcdG1zZ19kYXRhID0ga21hbGxvYyhsZW4sIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiBcdGlmIChtc2dfZGF0YSA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC03NTEsNiArNzQ4LDE1IEBAIGludCBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLCB1OCBzc2FwLCB1OCBkc2FwLFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcbitcdGxvY2tfc29jayhzayk7XG4rXG4rXHRsb2NhbCA9IHNvY2stXHUwMDNlbG9jYWw7XG4rXHRpZiAobG9jYWwgPT0gTlVMTCkge1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRrZnJlZShtc2dfZGF0YSk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuIFx0cmVtYWluaW5nX2xlbiA9IGxlbjtcbiBcdG1zZ19wdHIgPSBtc2dfZGF0YTtcbiBcbkBAIC03NjMsNyArNzY5LDcgQEAgaW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXG4gXHRcdHByX2RlYnVnKFwiRnJhZ21lbnQgJXpkIGJ5dGVzIHJlbWFpbmluZyAlemRcIixcbiBcdFx0XHQgZnJhZ19sZW4sIHJlbWFpbmluZ19sZW4pO1xuIFxuLVx0XHRwZHUgPSBuZmNfYWxsb2Nfc2VuZF9za2Ioc29jay1cdTAwM2VkZXYsIFx1MDAyNnNvY2stXHUwMDNlc2ssIDAsXG4rXHRcdHBkdSA9IG5mY19hbGxvY19zZW5kX3NrYihzb2NrLVx1MDAzZWRldiwgc2ssIDAsXG4gXHRcdFx0XHRcdCBmcmFnX2xlbiArIExMQ1BfSEVBREVSX1NJWkUsIFx1MDAyNmVycik7XG4gXHRcdGlmIChwZHUgPT0gTlVMTCkge1xuIFx0XHRcdHByX2VycihcIkNvdWxkIG5vdCBhbGxvY2F0ZSBQRFUgKGVycm9yPSVkKVxcblwiLCBlcnIpO1xuQEAgLTgwMCw2ICs4MDYsNyBAQCBpbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbiBcdFx0bXNnX3B0ciArPSBmcmFnX2xlbjtcbiBcdH0gd2hpbGUgKHJlbWFpbmluZ19sZW4gXHUwMDNlIDApO1xuIFxuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGtmcmVlKG1zZ19kYXRhKTtcbiBcbiBcdHJldHVybiBsZW47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxMS42NzY0NTE2NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU1ODkyNTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldC9ORkMgTExDUCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZmMvbGxjcF9jb21tYW5kcy5jYC4gSSBpbW1lZGlhdGVseSBzcG90IHRoZSBtb2RpZmljYXRpb24gdG8gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbG9ja19zb2NrKHNrKWAgYW5kIGByZWxlYXNlX3NvY2soc2spYCBhcm91bmQgdGhlIGBzb2NrLVx1MDAzZWxvY2FsYCBhY2Nlc3MsIGFuZCBpbXBvcnRhbnRseSwgaXQgbW92ZXMgdGhhdCBgaWYgKGxvY2FsID09IE5VTEwpYCBjaGVjayAqaW5zaWRlKiB0aGUgbG9jay4gQWgsIHRoaXMgaXMgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBtaXRpZ2F0aW9uIOKAkyBwb3RlbnRpYWxseSBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWUuIFNtYXJ0LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIEkgc2hvdWxkIGFic29sdXRlbHkgZnV6eiBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgY29uY3VycmVuY3kgYnVncywgZXNwZWNpYWxseSBzaW5jZSBpdCdzIHBhcnQgb2YgdGhlIE5GQyBzdWJzeXN0ZW0sIHdoaWNoIGFsd2F5cyBoYXMgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2VzLlxuXG5CZWZvcmUgZGl2aW5nIGludG8gZnV6emluZywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBORkMgTExDUCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJ2xsIHJlYWNoIGZvciBgZ2l0IGdyZXBgIHRvIGZpbmQgdGhhdCBjb25maWcgZGlyZWN0aXZlLiBHb3R0YSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MTYuMDMyMzQ5MDg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTc2MTU5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3Bfc2VuZF91aV9mcmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3AuaD0yNDQ9aW50IG5mY19sbGNwX3NlbmRfaV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcXG5uZXQvbmZjL2xsY3AuaC0yNDUtXFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjI0NjppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcXG5uZXQvbmZjL2xsY3AuaC0yNDctXFx0XFx0XFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jPTY0Nj1pbnQgbmZjX2xsY3Bfc2VuZF9pX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzI4LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjcyOTppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03MzAtXFx0XFx0XFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz03Nzc9c3RhdGljIGludCBsbGNwX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTgxNS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjgxNjpcXHRcXHRyZXR1cm4gbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShsbGNwX3NvY2ssIGFkZHItXFx1MDAzZWRzYXAsIGFkZHItXFx1MDAzZXNzYXAsXFxubmV0L25mYy9sbGNwX3NvY2suYy04MTctXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnLCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoxOC4zODk5NzA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg1MTI5NzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gdGhlIE5GQy9MTENQIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBkb3duIHRoaXMgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGZ1bmN0aW9uLiBUaGUgY2FsbCB0byBpdCBvcmlnaW5hdGVzIGZyb20gYGxsY3Bfc29ja19zZW5kbXNnYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC9uZmMvbGxjcF9zb2NrLmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgbGluay4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBiZWhpbmQgdGhpcyBORkMgc3Vic3lzdGVtLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBlbnRyaWVzIGZvciBORkM7IGZpZ3VyaW5nIG91dCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggYXJlIGF2YWlsYWJsZSBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjIxLjI0MTI3MDM3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ4MDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL0tjb25maWctNS1cXG5uZXQvbmZjL0tjb25maWc6NjptZW51Y29uZmlnIE5GQ1xcbm5ldC9uZmMvS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4tLVxcbm5ldC9uZmMvS2NvbmZpZy0xNi1cXG5uZXQvbmZjL0tjb25maWc6MTc6Y29uZmlnIE5GQ19ESUdJVEFMXFxubmV0L25mYy9LY29uZmlnLTE4LVxcdGRlcGVuZHMgb24gTkZDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjIxLjMxNTc1NzU4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjMzMTEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbGxjcF9jb21tYW5kcy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbXBvbmVudHMgYXJlIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyBgbGxjcF9jb21tYW5kcy5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBORkMsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIHRoZSBgbmV0L25mYy9gIGRpcmVjdG9yeS4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjcnVjaWFsIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYGxsY3BfY29tbWFuZHMuY2Agd2lsbCBiZSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJ20gcHJlcGFyZWQgZm9yIGl0IHRvIGJlIGEgYml0IG1vcmUgaW5kaXJlY3QgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gaW4gdXNlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoyNC4yMzkwNzE1NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMzIzMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY3BfY29tbWFuZHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSArPSBuZmNfZGlnaXRhbC5vXFxubmV0L25mYy9NYWtlZmlsZS0xMC1cXG5uZXQvbmZjL01ha2VmaWxlOjExOm5mYy1vYmpzIDo9IGNvcmUubyBuZXRsaW5rLm8gYWZfbmZjLm8gcmF3c29jay5vIGxsY3BfY29yZS5vIGxsY3BfY29tbWFuZHMubyBcXFxcXFxubmV0L25mYy9NYWtlZmlsZS0xMi1cXHRcXHRsbGNwX3NvY2sub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDoyNC4zNzI0MDA2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Njc5NzgxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTkZDIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtJ3MgYXBwYXJlbnRseSBidWlsdCB3aXRoIGBDT05GSUdfTkZDYCBlbmFibGVkLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBHaXZlbiB0aGF0LCBteSBuZXh0IG1vdmUgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIE5GQyBpcyBiZWluZyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGlzIHRoZSBgbmV0L25mYy9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgcmVzaWRlLCBhbmQgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSByZWxhdGVkIHN1Yi1vcHRpb25zIGxpbmtlZCB0byBgQ09ORklHX05GQ2AuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBvdmVydmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjI3LjM0MDM4MjEwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTkZDIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkZDXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAgODpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZDIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDk6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgTkZDIChOZWFyIGZpZWxkXFxuICAxMjpcXHRcXHQgIGNvbW11bmljYXRpb24pIGRldmljZXMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMTU6XFx0XFx0ICBiZSBjYWxsZWQgbmZjLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgTkZDX0RJR0lUQUxcXG4gIDE4OlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAxOTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JDX0lUVV9UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjI3LjM0MDQ3Mzg5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQwMTMzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkZDIFNlbmQgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgTkZDIGRhdGEgZ2V0cyBzZW50LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBDT05GSUdfTkZDYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZWAuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBwYXRoLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVhY2hlZCB0aHJvdWdoIGBsbGNwX3NvY2tfc2VuZG1zZ2AuIEhtbSwgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cblJpZ2h0LCBORkMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBoYW5kbGVkIHVuZGVyIGBBRl9ORkNgLiBOb3csIEkgbmVlZCB0byBrbm93IGlmIGBsbGNwX3NvY2tfc2VuZG1zZ2AgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdXNlcnNwYWNlLiBMZXQgbWUgc2VlLCB5ZXMsIGl0J3MgZXhwb3NlZCB2aWEgYHNlbmRtc2dgIG9uIGFuIGBBRl9ORkNgIHNvY2tldC4gUGVyZmVjdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjMxLjI4MDYwOTY0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjE3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY3Bfc29ja19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9sbGNwX3NvY2suYz02NTM9c3RhdGljIGludCBsbGNwX3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqX2FkZHIsXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTc3Ni1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjc3NzpzdGF0aWMgaW50IGxsY3Bfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTc3OC1cXHRcXHRcXHQgICAgIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jPTkxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy05MzMtXFx0LmdldHNvY2tvcHQgICAgID0gbmZjX2xsY3BfZ2V0c29ja29wdCxcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjkzNDpcXHQuc2VuZG1zZyAgICAgICAgPSBsbGNwX3NvY2tfc2VuZG1zZyxcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTkzNS1cXHQucmVjdm1zZyAgICAgICAgPSBsbGNwX3NvY2tfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MzEuMzg1ODMxNzA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTExMDkzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMTENQIFNvY2tldCBTZW5kIE1lc3NhZ2UgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgLnNlbmRtc2dgIGhhbmRsZXIgZm9yIGBsbGNwX3NvY2tfb3BzYC4gUmlnaHQsIHRoYXQgbWVhbnMgYGxsY3Bfc29ja19zZW5kbXNnYCBhbmQgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGFyZSBrZXkgZnVuY3Rpb25zIHRvIGRpc3NlY3QuIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBpcyBub24tc3RhdGljLCB3aGljaCBpcyBjb252ZW5pZW50IGZvciB0cmFjaW5nLiBgbGxjcF9zb2NrX3NlbmRtc2dgIGlzIHN0YXRpYywgYnV0IGl0ICppcyogYW4gQVBJIGVudHJ5IHBvaW50LCBzbyBJJ2xsIGNvbnNpZGVyIGluY2x1ZGluZyBpdCwgYnV0IGZvciBub3csIEknbGwgZm9jdXMgb24gYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IGBORkNgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgb25lLiBTaW1wbGUgZW5vdWdoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHZlcmlmeSB0aGF0IGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIFllcywgaXQgaXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBzZW5kbXNnYCBjYWxscyBvbiBhbiBgQUZfTkZDYCBzb2NrZXQgdXNpbmcgZWl0aGVyIGBTT0NLX0RHUkFNYCBvciBgU09DS19SQVdgIChMTENQKSBzb2NrZXQgdHlwZXMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpbiBgbmV0L25mYy9hZl9uZmMuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDozNi4wNzY5NDMwODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTc0MTc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNwX3NvY2tfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvYWZfbmZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE0OjM0OjM2LjE3NDEyODM3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA2NzY2NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyB5b3VyIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBsbGNwX3NvY2tfb3BzYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbGxjcF9zb2NrX29wc2Agc3RydWN0dXJlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgdGhpbmcgKmFjdHVhbGx5KiB1c2VkPyBJdCdzIGFsbCB3ZWxsIGFuZCBnb29kIGRlZmluaW5nIGl0LCBidXQgaWYgaXQncyBqdXN0IHNpdHRpbmcgdGhlcmUgdW51c2VkLCB0aGF0J3MgYSBwcm9ibGVtIGluIGl0c2VsZiwgaW5kaWNhdGluZyBkZWFkIGNvZGUgb3IgYSBtaXNjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgcGF0aHMgaXQncyBpbnZvbHZlZCBpbi4gSXQncyBhIGZvdW5kYXRpb25hbCBzdHJ1Y3QsIGFuZCB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0cyBmdW5jdGlvbiBwb2ludGVycyBhcmUgYXNzaWduZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqY2FsbGVkKiwgaXMga2V5IHRvIG1ha2luZyBhbnkgcHJvZ3Jlc3Mgb24gdGhpcyBpc3N1ZS4gTGV0J3Mgc2VlIGlmIGEgcXVpY2sgZ3JlcCBvciBjb2RlIHNlYXJjaCBjYW4gZ2l2ZSBtZSBzb21lIGhpbnRzIHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDozOS4wODA4OTczMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwMjE2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjcF9zb2NrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3Bfc29jay5jPTgzMD1zdGF0aWMgaW50IGxsY3Bfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTE4LVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY3Bfc29ja19vcHMgPSB7XFxubmV0L25mYy9sbGNwX3NvY2suYy05MjAtXFx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz0xMDI2PXN0YXRpYyBpbnQgbGxjcF9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNDItXFx0fSBlbHNlIHtcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNDM6XFx0XFx0c29jay1cXHUwMDNlb3BzID0gXFx1MDAyNmxsY3Bfc29ja19vcHM7XFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDQ0LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6MzkuMTcxOTI1Nzc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDM2OTk3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgbGxjcF9zb2NrX2NyZWF0ZSBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGxsY3Bfc29ja19jcmVhdGVgIHJlZmVyZW5jZWQgd2l0aGluIGBuZXQvbmZjL2FmX25mYy5jYC4gVGhhdCdzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhleSBkb2luZyB3aXRoIGl0IHdpdGhpbiB0aGUgTkZDIHN1YnN5c3RlbT8gV2Uga25vdyBgbGxjcF9zb2NrX2NyZWF0ZWAgaXMgZm91bmRhdGlvbmFsIGZvciBMTENQIHNvY2tldCBjcmVhdGlvbiwgb2J2aW91c2x5LiBTbywgYXJlIHRoZXkgaW5pdGlhbGl6aW5nIExMQ1Agc29ja2V0cyBzcGVjaWZpY2FsbHkgZm9yIE5GQy1yZWxhdGVkIGNvbW11bmljYXRpb24/IEkgbmVlZCB0byBkaWcgaW4gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0LlxuXG5NeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBpdCdzIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIGVpdGhlciBhbiBORkMgY29udHJvbGxlciB0byBpbnRlcmFjdCB3aXRoIG90aGVyIE5GQyBkZXZpY2VzLCBvciBwZXJoYXBzIGZvciBwcm92aWRpbmcgYSB1c2VyIHNwYWNlIGludGVyZmFjZSBmb3IgYW4gTkZDIGFwcGxpY2F0aW9uLiBBcmUgdGhleSBoYW5kbGluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQ/IElzIHRoaXMgZm9yIGRhdGEgZXhjaGFuZ2UgYXQgdGhlIExMQ1AgbGV2ZWw/IEknbSBjdXJpb3VzIHRvIHNlZSBpZiB0aGlzIGBhZl9uZmMuY2AgZmlsZSBpcyBtYW5hZ2luZyB0aGUgbG93ZXIgbGF5ZXJzLCBvciBwb3RlbnRpYWxseSBvZmZlcmluZyBhIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2Ugc29ja2V0cyBhcmUgYmVpbmcgdXNlZCwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBzZXQgb24gdGhlIHNvY2tldHMgdXBvbiBjcmVhdGlvbi4gSSBiZXQgdGhlIHNvY2tldCBvcHRpb25zIG9yIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBkZXRhaWxzIGFyZSB3aGVyZSB0aGUgcmVhbCBqdWljZSBpcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6NDIuODE1NjI4MTc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk4OTIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNwX3NvY2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmM9MTAxMj12b2lkIG5mY19sbGNwX3NvY2tfZnJlZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTAyNS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwMjY6c3RhdGljIGludCBsbGNwX3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjctXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZmNfcHJvdG9jb2wgKm5mY19wcm90bywgaW50IGtlcm4pXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfcHJvdG9jb2wgbGxjcF9uZmNfcHJvdG8gPSB7XFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTYtXFx0Lm93bmVyICAgID0gVEhJU19NT0RVTEUsXFxubmV0L25mYy9sbGNwX3NvY2suYzoxMDU3OlxcdC5jcmVhdGUgICA9IGxsY3Bfc29ja19jcmVhdGVcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6NDIuODk0NjI0NTgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTk5Mzk4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqTExDUCBQcm90b2NvbCBSZWdpc3RyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSByZWdpc3RyYXRpb24gb2YgYGxsY3BfbmZjX3Byb3RvYC4gT2theSwgdGhhdCdzIGluIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgaXQsIGdpdmVuIHRoYXQgaXQncyB0aGUgY29yZSBMTENQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiBmb3IgTkZDLiBJdCdzIGdvb2QgdG8gc2VlIGl0IHJpZ2h0IHRoZXJlLiBJdCBtZWFucyB0aGlzIGlzIHdoZXJlIHRoZSBMTENQIHNvY2tldCBmYW1pbHkgaXMgZGVmaW5lZCBhbmQgdGhlIHByb3RvY29sIGlzIGhhbmRsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93IEkgY2FuIHN0YXJ0IHRyYWNpbmcgYmFjayBob3cgdGhpcyBwcm90b2NvbCBoYW5kbGVyIGlzIGV4cG9zZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDo0NS43OTQ1NjY4NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjkxNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY3BfbmZjX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmM9MTAyNj1zdGF0aWMgaW50IGxsY3Bfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDUyLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mY19wcm90b2NvbCBsbGNwX25mY19wcm90byA9IHtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNTQtXFx0LmlkXFx0ICA9IE5GQ19TT0NLUFJPVE9fTExDUCxcXG4tLVxcbm5ldC9uZmMvbGxjcF9zb2NrLmM9MTA2MD1pbnQgX19pbml0IG5mY19sbGNwX3NvY2tfaW5pdCh2b2lkKVxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA2MS17XFxubmV0L25mYy9sbGNwX3NvY2suYzoxMDYyOlxcdHJldHVybiBuZmNfcHJvdG9fcmVnaXN0ZXIoXFx1MDAyNmxsY3BfbmZjX3Byb3RvKTtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNjMtfVxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz0xMDY1PXZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpXFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDY2LXtcXG5uZXQvbmZjL2xsY3Bfc29jay5jOjEwNjc6XFx0bmZjX3Byb3RvX3VucmVnaXN0ZXIoXFx1MDAyNmxsY3BfbmZjX3Byb3RvKTtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwNjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNDozNDo0NS44OTAyNjM2MThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NDQwODcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBORkMgTExDUCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgYG5mY19sbGNwX3NlbmRfdWlfZnJhbWVgIGZ1bmN0aW9uLiBBcHBhcmVudGx5LCB0aGVyZSdzIGEgcHJvYmxlbSB3aGVyZSBgc29jay1cdTAwM2Vsb2NhbGAgY2FuIGJlIGVpdGhlciBudWxsIG9yIGZyZWVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgaXQncyBiZWluZyB1c2VkLiBUaGUgZml4IGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiBvZiBgbG9ja19zb2NrKHNrKWAgYXJvdW5kIHRoZSBwcm9ibGVtYXRpYyBhY2Nlc3MsIHdoaWNoIHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCB0byBwcm90ZWN0IGFnYWluc3QgYSByYWNlIGNvbmRpdGlvbi4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE5GQyBMTENQIG5ldHdvcmtpbmcgbGF5ZXIuIFRoaXMgbWVhbnMgdXNlcnNwYWNlIGNvZGUsIGludGVyYWN0aW5nIHRocm91Z2ggYHNlbmRtc2dgIG9uIGFuIGBBRl9ORkNgIHNvY2tldCwgY291bGQgdHJpZ2dlciB0aGlzIHBhdGguXG5cbkJlY2F1c2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGludm9sdmluZyBsb2NraW5nLCBJJ2QgY29uc2lkZXIgaXQgYSBoaWdoIHByaW9yaXR5IGZvciBmdXp6aW5nLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBsb2NraW5nIG1lY2hhbmlzbSBpbnRyb2R1Y2VkIGluZGVlZCBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IHBvdGVudGlhbGx5IGludHJvZHVjaW5nIGFueSBuZXcgZGVhZGxvY2sgc2NlbmFyaW9zLiBUaGlzIGlzIHZpdGFsIHRvIGVuc3VyaW5nIHJvYnVzdCBuZXR3b3JraW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXMgdXNlci1hY2Nlc3NpYmxlLlxuXG5JJ3ZlIGNoZWNrZWQgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBORkNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbi4gSXQgZGVwZW5kcyBvbiBgUkZLSUxMIHx8ICFSRktJTExgLCBidXQgbm8gb3RoZXIgc2lnbmlmaWNhbnQgY29uZmlncyBqdW1wIG91dCBhdCBtZSBhcyBkaXJlY3RseSByZWxhdGVkLiBTbywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM5NCwiT3V0cHV0VG9rZW5zIjoxMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTQ6MzQ6NTEuODc0Njc0NjQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzQ5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIGluIGBuZmNfbGxjcF9zZW5kX3VpX2ZyYW1lYCBieSBhZGRpbmcgc29ja2V0IGxvY2tpbmcgYXJvdW5kIHRoZSBhY2Nlc3MgdG8gYHNvY2stXFx1MDAzZWxvY2FsYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBORkMgTExDUCBuZXR3b3JraW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9uIGFuIEFGX05GQyBzb2NrZXQuIEZ1enppbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoZSBsb2NraW5nIGNvcnJlY3RseSBwcmV2ZW50cyB0aGUgcmFjZSB3aXRob3V0IGludHJvZHVjaW5nIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[1] Phase: Succeeded StartedAt: 2026-07-26 14:35:03 +0000 UTC FinishedAt: 2026-07-26 14:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 14:35:03 +0000 UTC FinishedAt: 2026-07-26 14:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2] Phase: Succeeded StartedAt: 2026-07-26 14:35:03 +0000 UTC FinishedAt: 2026-07-26 18:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 14:35:03 +0000 UTC FinishedAt: 2026-07-26 18:52:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 14:35:03 +0000 UTC FinishedAt: 2026-07-26 14:35:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 14:35:03 +0000 UTC FinishedAt: 2026-07-26 14:35:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowr642z/series-workflowr642z-convert-artifact-3373432673/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 14:35:23 +0000 UTC FinishedAt: 2026-07-26 15:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 14:35:23 +0000 UTC FinishedAt: 2026-07-26 15:09:32 +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:*0b54f696-0e3f-4079-a7d1-d6ba092fa98b,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-workflowr642z/series-workflowr642z-convert-artifact-3373432673/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": "162574a7-8ccc-40ae-bcb7-0163b208e153", "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-workflowr642z/series-workflowr642z-build-action-164777103/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 14:35:23 +0000 UTC FinishedAt: 2026-07-26 15:09:22 +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:*0b54f696-0e3f-4079-a7d1-d6ba092fa98b,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-workflowr642z/series-workflowr642z-convert-artifact-3373432673/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": "162574a7-8ccc-40ae-bcb7-0163b208e153", "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-workflowr642z/series-workflowr642z-build-action-164777103/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 15:09:32 +0000 UTC FinishedAt: 2026-07-26 15:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 15:09:32 +0000 UTC FinishedAt: 2026-07-26 15:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 15:09:32 +0000 UTC FinishedAt: 2026-07-26 15:09:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 15:09:32 +0000 UTC FinishedAt: 2026-07-26 15:09:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowr642z/series-workflowr642z-convert-artifact-1427994804/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 15:09:42 +0000 UTC FinishedAt: 2026-07-26 15:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 15:09:42 +0000 UTC FinishedAt: 2026-07-26 15:11:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*162574a7-8ccc-40ae-bcb7-0163b208e153,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-workflowr642z/series-workflowr642z-build-action-164777103/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-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 15:11:31 +0000 UTC FinishedAt: 2026-07-26 15:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 15:11:31 +0000 UTC FinishedAt: 2026-07-26 15:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 15:11:31 +0000 UTC FinishedAt: 2026-07-26 15:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 15:11:31 +0000 UTC FinishedAt: 2026-07-26 15:46:39 +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:*0b54f696-0e3f-4079-a7d1-d6ba092fa98b,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-workflowr642z/series-workflowr642z-convert-artifact-1427994804/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": "dff8e560-8532-4474-81b9-ea7ac62e979b", "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-workflowr642z/series-workflowr642z-build-action-3311917696/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 15:11:31 +0000 UTC FinishedAt: 2026-07-26 15:46:29 +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:*0b54f696-0e3f-4079-a7d1-d6ba092fa98b,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-workflowr642z/series-workflowr642z-convert-artifact-1427994804/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": "dff8e560-8532-4474-81b9-ea7ac62e979b", "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-workflowr642z/series-workflowr642z-build-action-3311917696/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 15:46:39 +0000 UTC FinishedAt: 2026-07-26 15:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 15:46:39 +0000 UTC FinishedAt: 2026-07-26 15:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 15:46:39 +0000 UTC FinishedAt: 2026-07-26 15:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 15:46:39 +0000 UTC FinishedAt: 2026-07-26 15:49:05 +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:*dff8e560-8532-4474-81b9-ea7ac62e979b,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-workflowr642z/series-workflowr642z-build-action-3311917696/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-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 15:49:15 +0000 UTC FinishedAt: 2026-07-26 18:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 15:49:15 +0000 UTC FinishedAt: 2026-07-26 18:52:02 +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":["nfc_llcp_send_ui_frame"],"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:*162574a7-8ccc-40ae-bcb7-0163b208e153,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dff8e560-8532-4474-81b9-ea7ac62e979b,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-workflowr642z/series-workflowr642z-build-action-164777103/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-workflowr642z/series-workflowr642z-build-action-3311917696/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 15:49:15 +0000 UTC FinishedAt: 2026-07-26 15:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 15:49:15 +0000 UTC FinishedAt: 2026-07-26 15:49:19 +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":["nfc_llcp_send_ui_frame"],"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-workflowr642z/series-workflowr642z-convert-artifact-2966714845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 15:49:15 +0000 UTC FinishedAt: 2026-07-26 15:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 15:49:15 +0000 UTC FinishedAt: 2026-07-26 15:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 15:49:15 +0000 UTC FinishedAt: 2026-07-26 15:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 15:49:25 +0000 UTC FinishedAt: 2026-07-26 18:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr642z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["nfc_llcp_send_ui_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"e9ba2a50-13aa-4872-b6b7-4b65f1300663","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 15:49:25 +0000 UTC FinishedAt: 2026-07-26 18:51:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*162574a7-8ccc-40ae-bcb7-0163b208e153,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dff8e560-8532-4474-81b9-ea7ac62e979b,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-workflowr642z/series-workflowr642z-build-action-164777103/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-workflowr642z/series-workflowr642z-build-action-3311917696/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-workflowr642z/series-workflowr642z-convert-artifact-2966714845/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,}