Name: series-workflowlllpv Phase: Succeeded StartedAt: 2026-08-01 22:42:05 +0000 UTC FinishedAt: 2026-08-02 02:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[0] Phase: Succeeded StartedAt: 2026-08-01 22:42:05 +0000 UTC FinishedAt: 2026-08-01 22:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 22:42:05 +0000 UTC FinishedAt: 2026-08-01 22:44:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "2eb7db41-7dd9-4429-a6d4-688094e67f7a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_incoming_options", "mptcp_data_ready", "mptcp_recvmsg", "mptcp_worker", "mptcp_release_cb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgICAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF93b3JrZXImIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVsZWFzZV9jYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMgYnkgcHJ1bmluZyB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGFuZCBkcm9wcGluZyBwYWNrZXRzIGZyb20gdGhlIGJhY2tsb2cgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBJdCBhbHNvIGZpeGVzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBwcm9wZXJseSBwdXNoIHJldHJhbnNtaXNzaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBidWdzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzMjI2ZjZmYzFkNDA2ZDNjZjE0ZjZmN2Q2OWFjOGVkNzhiMTYxYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjQzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jXG5AQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RmFsbGJhY2tGYWlsZWRcJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1dpblByb2JlXCYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7QmFja2xvZ0Ryb3BcJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtSY3ZQcnVuZWRcJiMzNDssIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7T0ZPUHJ1bmVkXCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcbiB9O1xuIFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcbmluZGV4IDgxMjIxOGI1ZWQyYmYuLjNhMzQyNWUyNThhNzYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgJiM0Mzs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG4mIzQzO1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4mIzQzO1x0TVBUQ1BfTUlCX1JDVlBSVU5FRCxcdFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzICovXG4mIzQzO1x0TVBUQ1BfTUlCX09GT1BSVU5FRCxcdFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xuIFx0X19NUFRDUF9NSUJfTUFYXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggYzY2NDAyM2QzN2JhOC4uNTY0MjI3N2M4YjNkMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTI3LDggJiM0MzsxMTI3LDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1xuJiM0MztcdG1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbik7XG4mIzQzO1x0aWYgKGxpa2VseShtZW0gXHUwMDNjPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIHNpbGVudGx5IGRyb3BwaW5nIHB1cmUgYWNrcywgZmluIG9yIGFscmVhZHktYWNrZWQgc2VnbWVudHMuICovXG4mIzQzO1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbiYjNDM7XHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjYgVENQSERSX0ZJTiB8fFxuJiM0MztcdCAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVx1MDAzZXJjdl9ueHQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cbiYjNDM7XHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4mIzQzO1x0aW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7XG4mIzQzO1xuJiM0MztcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuJiM0MztcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXG4gICovXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtMTE1NCw3ICYjNDM7MTE4MCw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjY4YzlkOTUyZDFkM2QgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNzMsNiAmIzQzOzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuIFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gfVxuIFxuJiM0MzsvKiBcJiMzNDtJbnNwaXJlZFwmIzM0OyBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXG4mIzQzOyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4mIzQzO1x0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcbiYjNDM7XHR1NjQgbWVtO1xuJiM0MztcbiYjNDM7XHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRub2RlID0gXHUwMDI2bXNrLVx1MDAzZW9vb19sYXN0X3NrYi1cdTAwM2VyYm5vZGU7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7XG4mIzQzO1xuJiM0MztcdFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlcSwgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHBydW5lZCA9IHRydWU7XG4mIzQzO1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbiYjNDM7XHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4mIzQzO1xuJiM0MztcdFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRub2RlID0gcHJldjtcbiYjNDM7XHR9IHdoaWxlIChub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBydW5lZClcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuJiM0MztcdHJldHVybiBtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0dTY0IGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG5AQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xuIFxuJiM0MztcdC8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW1cbiYjNDM7XHQgKiB3aWxsIGJyZWFrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpIHtcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgPT0gbXNrLVx1MDAzZWFja19zZXEpIHtcbiBcdFx0LyogaW4gc2VxdWVuY2UgKi9cbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjtcbkBAIC02NzUsNiAmIzQzOzcyOSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNvY2sgKnNzayA9IHNrYi1cdTAwM2VzaztcbiBcdGJvb2wgZnJhZ3N0b2xlbjtcbiYjNDM7XHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4Miw2ICYjNDM7NzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXG4mIzQzO1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XHRsaW1pdCAmIzQzOz0gKGxpbWl0IFx1MDAzZVx1MDAzZSAxKSAmIzQzOyA2NCAqIDEwMjQ7XG4mIzQzO1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2ViYWNrbG9nX2xlbiBcdTAwM2UgbGltaXQgXHUwMDI2XHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjNDM7XHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzUzLDcgJiM0Mzs4MTgsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcbiBcdFx0XHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xuIFxuLVx0XHRcdGlmIChvd25fbXNrIFx1MDAyNlx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuJiM0MztcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTM2LDEzICYjNDM7MTIwMSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIwOSwxMiAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdFxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdGJvb2wgbW92ZWQgPSBmYWxzZTtcbiBcbi1cdCpkZWx0YSA9IDA7XG4gXHR3aGlsZSAoMSkge1xuLVx0XHQvKiBJZiB0aGUgbXNrIHJlY3ZidWYgaXMgZnVsbCBzdG9wLCBkb24mIzM5O3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgJiM0Mzs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQyLDkgJiM0MzsyMjk1LDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXHUwMDNlYmFja2xvZ191bmFjY291bnRlZCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTtcbiBcbi1cdC8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjUyLDIwICYjNDM7MjMwMywxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuLXtcbi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4tXG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuLVx0bGlzdF9zcGxpY2Uoc2ticywgXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4ge1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG4gXG4gXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI3ODUsNDQgJiM0MzsyODI4LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7LypcbiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcbiYjNDM7ICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXG4mIzQzO1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwmIzM0O3N0YWxlXCYjMzQ7IGxvZ2ljICovXG4tXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuLVx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4tXHRpZiAoIWRmcmFnKSB7XG4tXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4tXG4tXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0aW50IHJldCwgbGVuID0gMDtcbiBcbiBcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2VzY2hlZHVsZWQpKSB7XG4mIzQzO1x0XHRcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRcdHUxNiBjb3BpZWQgPSAwO1xuIFxuIFx0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XG5AQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbiYjNDM7XHRcdFx0aW5mby5zZW50ID0gb2Zmc2V0O1xuIFx0XHRcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cdTAwM2VkYXRhX2xlbiA6XG4gXHRcdFx0XHRcdFx0XHRcdCAgICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQ7XG4gXG5AQCAtMjg0Nyw3ICYjNDM7Mjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICAgICFtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VmYWxsYmFja19sb2NrKTtcbiBcdFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuLVx0XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3MCwxMyAmIzQzOzI4OTEsMTA5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuJiM0MztcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuJiM0MztcdGJvb2wgbmVlZF9yZXRyYW5zO1xuJiM0MztcdHU2NCByZXRyYW5zX3NlcTtcbiYjNDM7XHRpbnQgZXJyLCBsZW47XG4gXG4tXHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuLVx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcbiYjNDM7XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4mIzQzO1x0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbiYjNDM7XHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuJiM0MztcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbiYjNDM7XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0Z290byBjaGVja19kYXRhX2ZpbjtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLVx1MDAzZWRhdGFfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4tXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0Ym9vbCBhbHJlYWR5X3JldHJhbnM7XG4mIzQzO1x0XHR1NjQgc2VudF9zZXE7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayBcJiMzNDtzdGFsZVwmIzM0OyBsb2dpYywgdGhhdCBpblxuJiM0MztcdFx0ICogdHVybiBjYW4gcHJvY2VzcyBpbmNvbWluZyBhY2tzIGFuZCBjbGVhbiB0aGUgUlRYIHF1ZXVlO1xuJiM0MztcdFx0ICogZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGZyYWcgd2lsbCBzdGlsbCBiZSBhcm91bmRcbiYjNDM7XHRcdCAqIGFmdGVyd2FyZHMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGdldF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxuJiM0MztcdFx0ICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdFx0YWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCk7XG4mIzQzO1x0XHRwdXRfcGFnZShkZnJhZy1cdTAwM2VwYWdlKTtcbiYjNDM7XHRcdGlmIChhbHJlYWR5X3JldHJhbnMpIHtcbiYjNDM7XHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjNDM7XHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuJiM0MztcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4mIzQzO1x0XHQgKiAgcXVldWUgZHVlIHRvIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4mIzQzO1x0XHRsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuJiM0MztcbiYjNDM7XHRcdHJldHJhbnNfc2VxICYjNDM7PSBsZW47XG4mIzQzO1x0XHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuJiM0MztcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmV0cmFuc19zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4mIzQzO1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4mIzQzO1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4mIzQzO1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4mIzQzO1x0XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbiYjNDM7Y2hlY2tfZGF0YV9maW46XG4mIzQzO1x0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuJiM0MztcdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbiYjNDM7XHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4mIzQzO1x0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4mIzQzO1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbiYjNDM7XHR9XG4gXG4gcmVzZXRfdGltZXI6XG4gXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xuQEAgLTM2NzAsMTIgJiM0MzszNzg3LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHUzMiBtb3ZlZCA9IDA7XG4gXG4gXHRmb3IgKDs7KSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVx1MDAzZWNiX2ZsYWdzIFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XG4gXHRcdGJvb2wgc3Bvb2xfYmw7XG4tXHRcdHUzMiBtb3ZlZDtcbiBcbiBcdFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticyk7XG4gXHRcdGlmICghZmxhZ3MgXHUwMDI2XHUwMDI2ICFzcG9vbF9ibClcbkBAIC0zNzA4LDkgJiM0MzszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4tXHRcdGlmIChzcG9vbF9ibClcbi1cdFx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbiYjNDM7XHRpZiAobW92ZWQpXG4mIzQzO1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFxuIFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXHUwMDI2bXNrLVx1MDAzZWNiX2ZsYWdzKSlcbiBcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGF0YV9yZWFkeSYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3dvcmtlciYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGJ1Z3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDMyMjZmNmZjMWQ0MDZkM2NmMTRmNmY3ZDY5YWM4ZWQ3OGIxNjFjNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMjI6NDM6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmMgYi9uZXQvbXB0Y3AvbWliLmMKaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuYwpAQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLAogCVNOTVBfTUlCX0lURU0oJiMzNDtGYWxsYmFja0ZhaWxlZCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtXaW5Qcm9iZSYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7QmFja2xvZ0Ryb3AmIzM0OywgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O1JjdlBydW5lZCYjMzQ7LCBNUFRDUF9NSUJfUkNWUFJVTkVEKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O09GT1BydW5lZCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSwKIH07CiAKIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnMKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaAppbmRleCA4MTIyMThiNWVkMmJmLi4zYTM0MjVlMjU4YTc2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvbWliLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5oCkBAIC04OCw2ICYjNDM7ODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7CiAJTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSywJLyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi8KIAlNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsCS8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqLwogCU1QVENQX01JQl9XSU5QUk9CRSwJCS8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovCiYjNDM7CU1QVENQX01JQl9CQUNLTE9HRFJPUCwJCS8qIEJhY2tsb2cgb3ZlciBtZW1vcnkgbGltaXQgKi8KJiM0MzsJTVBUQ1BfTUlCX1JDVlBSVU5FRCwJCS8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqLwomIzQzOwlNUFRDUF9NSUJfT0ZPUFJVTkVELAkJLyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqLwogCV9fTVBUQ1BfTUlCX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmMKaW5kZXggYzY2NDAyM2QzN2JhOC4uNTY0MjI3N2M4YjNkMCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC0xMTI3LDggJiM0MzsxMTI3LDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlyZXR1cm4gaG1hYyA9PSBtcF9vcHQtJmd0O2FobWFjOwogfQogCi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksCi0gKiBlbHNlIHJldHVybiB0cnVlLgomIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CiYjNDM7CW1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4pOwomIzQzOwlpZiAobGlrZWx5KG1lbSAmbHQ7PSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciBhbHJlYWR5LWFja2VkIHNlZ21lbnRzLiAqLwomIzQzOwlpZiAoVENQX1NLQl9DQihza2IpLSZndDtzZXEgPT0gVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxIHx8CiYjNDM7CSAgICBUQ1BfU0tCX0NCKHNrYiktJmd0O3RjcF9mbGFncyAmYW1wOyBUQ1BIRFJfRklOIHx8CiYjNDM7CSAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxLCB0Y3Bfc2soc3NrKS0mZ3Q7cmN2X254dCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cywgc2NoZWR1bGUgYW4gYWNrLiAqLwomIzQzOwlpbmV0X2Nzayhzc2spLSZndDtpY3NrX2Fjay5wZW5kaW5nIHw9IElDU0tfQUNLX05PTUVNIHwgSUNTS19BQ0tfTk9XOwomIzQzOwlpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTsKJiM0MzsKJiM0MzsJLyogUGxhaW4gVENQIChmYWxsYmFjaykgYW5kIHNrYiBpcyBkcm9wcGVkIGJlZm9yZSB0aGUgVENQIHJlY3YgcXVldWUuICovCiYjNDM7CU5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLAomIzQzOyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy4KICAqLwogYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTExNTQsNyAmIzQzOzExODAsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJCV9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LSZndDtjb25uKTsKIAkJbXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy0mZ3Q7Y29ubik7Ci0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctJmd0O2Nvbm4sIHNrLCBza2IpOwogCX0KIAogCW1wdGNwX2dldF9vcHRpb25zKHNrYiwgJmFtcDttcF9vcHQpOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBjYTY0NGVjNTNlZWRiLi42OGM5ZDk1MmQxZDNkIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzczLDYgJiM0MzszNzMsNDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfaW5pdF9za2Ioc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAlza2JfZHN0X2Ryb3Aoc2tiKTsKIH0KIAomIzQzOy8qICYjMzQ7SW5zcGlyZWQmIzM0OyBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQCiYjNDM7ICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2OwomIzQzOwlib29sIHBydW5lZCA9IGZhbHNlOwomIzQzOwl1NjQgbWVtOwomIzQzOwomIzQzOwlpZiAoUkJfRU1QVFlfUk9PVCgmYW1wO21zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlub2RlID0gJmFtcDttc2stJmd0O29vb19sYXN0X3NrYi0mZ3Q7cmJub2RlOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpOwomIzQzOwomIzQzOwkJLyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi8KJiM0MzsJCWlmIChhZnRlcjY0KHNlcSwgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcHJ1bmVkID0gdHJ1ZTsKJiM0MzsJCXByZXYgPSByYl9wcmV2KG5vZGUpOwomIzQzOwkJcmJfZXJhc2Uobm9kZSwgJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSk7CiYjNDM7CQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJbXNrLSZndDtvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7CiYjNDM7CiYjNDM7CQltZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTsKJiM0MzsJCWlmIChtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW5vZGUgPSBwcmV2OwomIzQzOwl9IHdoaWxlIChub2RlKTsKJiM0MzsKJiM0MzsJaWYgKHBydW5lZCkKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpOwomIzQzOwomIzQzO291dDoKJiM0MzsJbWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CXJldHVybiBtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwpAQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAltcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpOwogCiYjNDM7CS8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW0KJiM0MzsJICogd2lsbCBicmVhay4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgJmd0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpICZhbXA7JmFtcDsKJiM0MzsJICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKSB7CiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKJiM0MzsJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAlpZiAoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgPT0gbXNrLSZndDthY2tfc2VxKSB7CiAJCS8qIGluIHNlcXVlbmNlICovCiAJCW1zay0mZ3Q7Ynl0ZXNfcmVjZWl2ZWQgJiM0Mzs9IGNvcHlfbGVuOwpAQCAtNjc1LDYgJiM0Mzs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKnNzayA9IHNrYi0mZ3Q7c2s7CiAJYm9vbCBmcmFnc3RvbGVuOwomIzQzOwl1NjQgbGltaXQ7CiAJaW50IGRlbHRhOwogCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7CkBAIC02ODIsNiAmIzQzOzczNywxNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuOwogCX0KIAomIzQzOwkvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi8KJiM0MzsJbGltaXQgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWxpbWl0ICYjNDM7PSAobGltaXQgJmd0OyZndDsgMSkgJiM0MzsgNjQgKiAxMDI0OwomIzQzOwlsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTsKJiM0MzsJaWYgKG1zay0mZ3Q7YmFja2xvZ19sZW4gJmd0OyBsaW1pdCAmYW1wOyZhbXA7ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHsKJiM0MzsJCV9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQl0YWlsID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTsKQEAgLTc1Myw3ICYjNDM7ODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAkJCW1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7CiAKLQkJCWlmIChvd25fbXNrICZhbXA7JmFtcDsgc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDsgc2stJmd0O3NrX3JjdmJ1ZikgewomIzQzOwkJCWlmIChvd25fbXNrKSB7CiAJCQkJbXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpOwogCQkJCXJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpOwogCQkJfSBlbHNlIHsKQEAgLTExMzYsMTMgJiM0MzsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKIAltcHRjcF93cml0ZV9zcGFjZShzayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKQotewotCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQltcHRjcF9kYXRhX3VubG9jayhzayk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKQEAgLTIyMDksMTIgJiM0MzsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHQKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCWJvb2wgbW92ZWQgPSBmYWxzZTsKIAotCSpkZWx0YSA9IDA7CiAJd2hpbGUgKDEpIHsKLQkJLyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJiMzOTt0IGRyb3AgKi8KLQkJaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCi0JCQlicmVhazsKLQogCQlwcmVmZXRjaChza2ItJmd0O25leHQpOwogCQlsaXN0X2RlbCgmYW1wO3NrYi0mZ3Q7bGlzdCk7CiAJCSpkZWx0YSAmIzQzOz0gc2tiLSZndDt0cnVlc2l6ZTsKQEAgLTIyNDIsOSAmIzQzOzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpCiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stJmd0O2JhY2tsb2dfdW5hY2NvdW50ZWQgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc29ja2V0ICZhbXA7JmFtcDsKIAkJCSAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTsKIAotCS8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkgfHwKLQkgICAgc2tfcm1lbV9hbGxvY19nZXQoc2spICZndDsgc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKHNrYnMpOwpAQCAtMjI1MiwyMCAmIzQzOzIzMDMsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQotewotCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7Ci0KLQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7Ci0JbGlzdF9zcGxpY2Uoc2ticywgJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCk7Ci19Ci0KIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IGxpc3RfaGVhZCBza2JzOwogCWJvb2wgZW5xdWV1ZWQgPSBmYWxzZTsKLQl1MzIgbW92ZWQ7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAltcHRjcF9kYXRhX2xvY2soc2spOwogCXdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKSkgewpAQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiAJCWVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCAmYW1wO3NrYnMsICZhbXA7bW92ZWQpOwogCiAJCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAJbXB0Y3BfZGF0YV91bmxvY2soc2spOwogCiAJaWYgKGVucXVldWVkICZhbXA7JmFtcDsgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpCkBAIC0yNzg1LDQ0ICYjNDM7MjgyOCwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAlza19lcnJvcl9yZXBvcnQoc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzOy8qCiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cywKJiM0MzsgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsCiYjNDM7CQkJCXU2NCBzZW50X3NlcSkKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07CiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93OwotCXN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnOwogCXN0cnVjdCBzb2NrICpzc2s7Ci0JaW50IHJldCwgZXJyOwotCXUxNiBsZW4gPSAwOwotCi0JbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7Ci0KLQkvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMgKi8KLQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwotCWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwotCWlmICghZGZyYWcpIHsKLQkJaWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkgewotCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCi0JCQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMsCi0JCQkJICAgaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTsKLQkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwotCQkJbXB0Y3Bfc2VuZF9hY2sobXNrKTsKLQotCQkJZ290byByZXNldF90aW1lcjsKLQkJfQotCi0JCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKLQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwotCi0JCWdvdG8gcmVzZXRfdGltZXI7Ci0JfQotCi0JaWYgKGVycikKLQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJaW50IHJldCwgbGVuID0gMDsKIAogCW1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7CiAJCWlmIChSRUFEX09OQ0Uoc3ViZmxvdy0mZ3Q7c2NoZWR1bGVkKSkgewomIzQzOwkJCXUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcTsKIAkJCXUxNiBjb3BpZWQgPSAwOwogCiAJCQltcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpOwpAQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQlsb2NrX3NvY2soc3NrKTsKIAogCQkJLyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovCi0JCQlpbmZvLnNlbnQgPSAwOwomIzQzOwkJCWluZm8uc2VudCA9IG9mZnNldDsKIAkJCWluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLSZndDtjc3VtX2VuYWJsZWQpID8gZGZyYWctJmd0O2RhdGFfbGVuIDoKIAkJCQkJCQkJICAgIGRmcmFnLSZndDthbHJlYWR5X3NlbnQ7CiAKQEAgLTI4NDcsNyAmIzQzOzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQogCQkJICAgICFtc2stJmd0O2FsbG93X3N1YmZsb3dzKSB7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O2ZhbGxiYWNrX2xvY2spOwogCQkJCXJlbGVhc2Vfc29jayhzc2spOwotCQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKIAkJCXdoaWxlIChpbmZvLnNlbnQgJmx0OyBpbmZvLmxpbWl0KSB7CkBAIC0yODcwLDEzICYjNDM7Mjg5MSwxMDkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCXJlbGVhc2Vfc29jayhzc2spOwogCQl9CiAJfQomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsJc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiYjNDM7CWJvb2wgbmVlZF9yZXRyYW5zOwomIzQzOwl1NjQgcmV0cmFuc19zZXE7CiYjNDM7CWludCBlcnIsIGxlbjsKIAotCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwotCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctJmd0O2FscmVhZHlfc2VudCwgbGVuKTsKJiM0MzsJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwomIzQzOwluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CWlmICghZGZyYWcpCiYjNDM7CQlnb3RvIGNoZWNrX2RhdGFfZmluOwogCi0JLyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCi0JaWYgKGFmdGVyNjQoZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXEsIG1zay0mZ3Q7c25kX254dCkpCi0JCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWJvb2wgYWxyZWFkeV9yZXRyYW5zOwomIzQzOwkJdTY0IHNlbnRfc2VxOwomIzQzOwomIzQzOwkJLyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMsIHRoYXQgaW4KJiM0MzsJCSAqIHR1cm4gY2FuIHByb2Nlc3MgaW5jb21pbmcgYWNrcyBhbmQgY2xlYW4gdGhlIFJUWCBxdWV1ZTsKJiM0MzsJCSAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kCiYjNDM7CQkgKiBhZnRlcndhcmRzLgomIzQzOwkJICovCiYjNDM7CQlnZXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXB1dF9wYWdlKGRmcmFnLSZndDtwYWdlKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlcgomIzQzOwkJICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLgomIzQzOwkJICovCiYjNDM7CQltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwkJYWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay0mZ3Q7c25kX3VuYSwgZGZyYWctJmd0O2RhdGFfc2VxICYjNDM7CiYjNDM7CQkJCQkgICAgZGZyYWctJmd0O2FscmVhZHlfc2VudCk7CiYjNDM7CQlwdXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQlpZiAoYWxyZWFkeV9yZXRyYW5zKSB7CiYjNDM7CQkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJCQlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJCQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKJiM0MzsJCQluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwkJfSBlbHNlIGlmIChhZnRlcjY0KG1zay0mZ3Q7c25kX3VuYSwgcmV0cmFuc19zZXEpKSB7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQl9CiYjNDM7CQltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CiYjNDM7CQkvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWAomIzQzOwkJICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZGZyYWcgfHwgIWRmcmFnLSZndDthbHJlYWR5X3NlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovCiYjNDM7CQlsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTsKJiM0MzsJCWlmIChsZW4gJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwomIzQzOwkJcmV0cmFuc19zZXEgJiM0Mzs9IGxlbjsKJiM0MzsJCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwomIzQzOwkJZGZyYWctJmd0O2FscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctJmd0O2FscmVhZHlfc2VudCwKJiM0MzsJCQkJCSAgICByZXRyYW5zX3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi8KJiM0MzsJCXNlbnRfc2VxID0gZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXE7CiYjNDM7CQlpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLSZndDtzbmRfbnh0KSkKJiM0MzsJCQlXUklURV9PTkNFKG1zay0mZ3Q7c25kX254dCwgc2VudF9zZXEpOwomIzQzOwomIzQzOwkJLyogQXR0ZW1wdCB0aGUgbmV4dCBmcmFnbWVudCBvbmx5IGlmIHRoZSBjdXJyZW50IG9uZSBpcwomIzQzOwkJICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYmVmb3JlNjQocmV0cmFuc19zZXEsIGRmcmFnLSZndDtkYXRhX3NlcSAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9sZW4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZGZyYWcgPSBsaXN0X2lzX2xhc3QoJmFtcDtkZnJhZy0mZ3Q7bGlzdCwgJmFtcDttc2stJmd0O3J0eF9xdWV1ZSkgPwomIzQzOwkJCQlOVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTsKJiM0MzsJCWlmICghZGZyYWcpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi8KJiM0MzsJaWYgKCFuZWVkX3JldHJhbnMpIHsKJiM0MztjaGVja19kYXRhX2ZpbjoKJiM0MzsJCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKJiM0MzsJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiYjNDM7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAomIzQzOwkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwomIzQzOwkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwomIzQzOwkJCW1wdGNwX3NlbmRfYWNrKG1zayk7CiYjNDM7CQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJfQogCiByZXNldF90aW1lcjoKIAltcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spOwpAQCAtMzY3MCwxMiAmIzQzOzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spCiAJX19tdXN0X2hvbGQoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay0mZ3Q7Y2JfZmxhZ3MgJmFtcDsgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7CiAJCXN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzOwogCQlib29sIHNwb29sX2JsOwotCQl1MzIgbW92ZWQ7CiAKIAkJc3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKTsKIAkJaWYgKCFmbGFncyAmYW1wOyZhbXA7ICFzcG9vbF9ibCkKQEAgLTM3MDgsOSAmIzQzOzM4MjUsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAogCQljb25kX3Jlc2NoZWQoKTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2xvY2suc2xvY2spOwotCQlpZiAoc3Bvb2xfYmwpCi0JCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJaWYgKG1vdmVkKQomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgJmFtcDttc2stJmd0O2NiX2ZsYWdzKSkKIAkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBNZW1vcnkgTWFuYWdlbWVudCBhbmQgUmV0cmFuc21pc3Npb24gSW1wcm92ZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgaGl0dGluZyB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbXB0Y3AvbWliLmNgLCBgbWliLmhgLCBgb3B0aW9ucy5jYCwgYW5kIGBwcm90b2NvbC5jYC4gTG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBzb21lIFNOTVAgTUlCIGNvdW50ZXJzIGZvciBNUFRDUCAtIEJhY2tsb2dEcm9wLCBSY3ZQcnVuZWQsIGFuZCBPRk9QcnVuZWQsIHdoaWNoIGlzIGdvb2QgZm9yIG1vbml0b3JpbmcuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgbWFuYWdpbmcgbWVtb3J5IGxpbWl0cyBhbmQgaW1wcm92aW5nIHJldHJhbnNtaXNzaW9uLgoKVGhleSYjMzk7dmUgbWFkZSBzb21lIGtleSBtb2RpZmljYXRpb25zLiBUaGUgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGZ1bmN0aW9uIGlzIG1vZGlmaWVkIHRvIGNoZWNrIGBtcHRjcF9vdmVyX2xpbWl0YC4gQWxzbyBhZGRlZCBhcmUgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAgYW5kIHRoZSBgX19tcHRjcF9tb3ZlX3NrYmAgZnVuY3Rpb25zIHRvIGhhbmRsZSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBtZW1vcnkgZ29lcyBvdmVyIHRoZSBkZWZpbmVkIGxpbWl0LiBUaGUgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGlzIHVwZGF0ZWQgdG8gZHJvcCBwYWNrZXRzIHdoZW4gdGhlIGJhY2tsb2cgZXhjZWVkcyB0aGUgbGltaXQuIEltcG9ydGFudGx5LCBgX19tcHRjcF9yZXRyYW5zYCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHB1c2ggcmV0cmFuc21pc3Npb25zIGNvcnJlY3RseS4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLXVwIG9mIHNvbWUgaW1wb3J0YW50IG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgaW4gTVBUQ1AuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBoYW5kbGVzIHRoZSBtZW1vcnkgbGltaXRzLCBib3RoIHBydW5pbmcgYW5kIGRyb3BwaW5nLCBhbmQgbG9va3MgbGlrZSBpdCBmaXhlcyBzb21lIHJldHJhbnNtaXNzaW9uIGlzc3Vlcy4gR2l2ZW4gdGhlIGNoYW5nZXMgdG8gY3JpdGljYWwgbG9naWMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgc29saWQgZnV6emluZyBlZmZvcnQgdG8gaWRlbnRpZnkgdGhlIHNpZGUgZWZmZWN0cyBvZiBtZW1vcnkgbGltaXQgaGFuZGxpbmcuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGNoYW5nZWQvYWRkZWQgZnVuY3Rpb25zIGFyZSB0aGUgcGxhY2UgdG8gc3RhcnQuIEkgc2VlIGBtcHRjcF9vdmVyX2xpbWl0YCAoc3RhdGljKSwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChub24tc3RhdGljKSwgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAgKHN0YXRpYyksIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKSwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIChzdGF0aWMpLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCAoc3RhdGljKSwgYF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cGAgKHN0YXRpYyksIGBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZ2AgKHN0YXRpYyksIGBtcHRjcF9tb3ZlX3NrYnNgIChzdGF0aWMpLCBgX19tcHRjcF9wdXNoX3JldHJhbnNgIChzdGF0aWMpLCBgX19tcHRjcF9yZXRyYW5zYCAoc3RhdGljKSBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIChzdGF0aWMpLgoKV2FpdCwgaGFuZyBvbi4uLiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgbm9uLXN0YXRpYz8gT2theSwgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSBhbiBlbnRyeSBwb2ludC4gVGhlIHN0YXRpYyBvbmVzIGFyZSB3aGVyZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSwgYnV0IHRoYXQgbm9uLXN0YXRpYyBvbmUgaXMgY3J1Y2lhbCB0byBzZWUgaG93IGl0JiMzOTtzIGludm9rZWQuIFdlIGNhbiYjMzk7dCBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGFjdC4KCkxldCYjMzk7cyBjaGVjayBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBzZWUgaG93IHRoZXNlIGxpbWl0IGNoZWNrcyBhcmUgYmVpbmcgdHJpZ2dlcmVkLiBJZiB0aGVyZSBpcyBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQsIHdlIGhhdmUgYSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgdGVzdGluZy4gYF9fbXB0Y3BfcmV0cmFuc2AsIGlzIGNhbGxlZCBieSBgbXB0Y3Bfd29ya2VyYCBvciBzaW1pbGFyPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIFRoaXMgbmVlZHMgc29tZSBkZWRpY2F0ZWQgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfcmV0cmFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtLmM9MTA2Mz1zdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDg0LVx0XHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZSA9IDE7XG5uZXQvbXB0Y3AvcG0uYzoxMDg1Olx0XHRcdFx0X19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzayk7XG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKG5ldCwgTVBUQ1BfTUlCX1NVQkZMT1dTVEFMRSk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MzAtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTMyLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcdG5lZWRfcHVzaCA9IChmbGFncyBcdTAwMjYgTVBUQ1BfQ0ZfUFVTSCkgXHUwMDI2XHUwMDI2IF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjY2Ni1cdGlmICghZGlzcG9zZV9pdCkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4MzU9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4OTYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODk3OnN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk4LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTQ4LVx0XHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjk0OTpcdFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTUwLVx0XHQgKi9cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTA2PXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0My1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFx1MDAyNm1zay1cdTAwM2VmbGFncykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTQ0Olx0XHRfX21wdGNwX3JldHJhbnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0NS1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzg2PXN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MTgtXHRcdGlmIChmbGFncyBcdTAwMjYgQklUKE1QVENQX1JFVFJBTlNNSVQpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzgxOTpcdFx0XHRfX21wdGNwX3JldHJhbnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyMC1cdFx0aWYgKHNwb29sX2JsIFx1MDAyNlx1MDAyNiBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpKSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9ODA4PXZvaWQgX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtODEwLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtODEyLXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgUmV0cmFuc21pc3Npb24gYW5kIEJhY2tsb2cgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvZGUgYWdhaW4sIHNwZWNpZmljYWxseSBhcm91bmQgcmV0cmFuc21pc3Npb25zIGFuZCBiYWNrbG9nIG1hbmFnZW1lbnQuIEkmIzM5O3ZlIG5vdGljZWQgdGhhdCBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGJvdGggY2FsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fbXB0Y3BfcmV0cmFuc2AsIHdoaWNoIGlzIHdoZXJlIHRoZSBjb3JlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHNlZW1zIHRvIHJlc2lkZS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHdvcmtlciB0aHJlYWRzIGRlYWxpbmcgd2l0aCByZXRyYW5zbWlzc2lvbnMuCgpUaGVuLCB0aGVyZSYjMzk7cyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHdoaWNoIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSB0aGUgTVBUQ1AgbW9kdWxlIGl0c2VsZiwgYW5kIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHBvaW50IG9mIGludGVyZXN0LCBjb3VsZCBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgbGF0ZXIuCgpNeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgYmFja2xvZywgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGZyb20gdGhlcmUgYW5kIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBoYXBwZW5pbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBiYWNrbG9nIGFkZGl0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByZXRyYW5zbWlzc2lvbiBwcm9jZXNzIEkgd2FzIGxvb2tpbmcgYXQgZWFybGllci4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21wdGNwX2FkZF9iYWNrbG9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MTY9c3RhdGljIHZvaWQgbXB0Y3BfZHNzX2NvcnJ1cHRpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3MjQ6c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXHRcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjQtXHRcdFx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcdFx0XHRcdF9fbXB0Y3BfYWRkX2JhY2tsb2coc2ssIHN1YmZsb3csIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjYtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmbG93LCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgTVBUQ1AgU0tCIE1vdmVtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGNhbGxpbmcgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBoZXJlLiBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgaW50ZW50IG9mIG1vdmluZyBTS0JzIChTb2NrZXQgQnVmZmVyKSBiZXR3ZWVuIHN1YmZsb3dzLCBhbmQgYWRkaW5nIHRoZW0gdG8gYSBiYWNrbG9nIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhhdCBjb250ZXh0LiBCdXQgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hhdCB0cmlnZ2VycyB0aGlzIHdob2xlIHNlcXVlbmNlPyogV2hvJiMzOTtzIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbSwgYSBmYWlsb3ZlciBwcm9jZWR1cmUsIGEgcmUtZXN0YWJsaXNobWVudCBvZiBhIHN1YmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IHRoYXQgdXBzdHJlYW0gY29udGV4dCwgdGhpcyBpcyBqdXN0IGEgc2luZ2xlIGxpbmsgaW4gYSBtdWNoIGxhcmdlciBjaGFpbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF04oCZcyBhY3R1YWxseSBoYXBwZW5pbmcuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9NzI0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc3NzpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cdFx0XHRcdFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk0MT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6OTQ2Olx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA1LVx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwMDY6XHRcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNy1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTVBUQ1AgQ29kZSBSZXZpZXcgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1QVENQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBmdW5jdGlvbiBzY29wZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIFRoZSBgbXB0Y3BfZGF0YV9yZWFkeWAgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCB3aGljaCBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgZm9yIHBvdGVudGlhbCBzY29wZSBpbXBsaWNhdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdvcnRoIG5vdGluZy4gTm93LCB0aGUgYG1wdGNwX3dvcmtlcmAgZnVuY3Rpb24gKmlzKiBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgc28gdGhlIHN0YXRpYyBrZXl3b3JkIGlzIHByb2JhYmx5IGxlc3MgY3JpdGljYWwgdGhlcmUsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgaXQmIzM5O3MgdXNlZCBjb3JyZWN0bHkgd2l0aGluIGl0cyBjb250ZXh0LiBTaW1pbGFybHksIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhIHNvY2tldCByZWxlYXNlIGNhbGxiYWNrLiBJdHMgdXNhZ2UgaXMgY29udGFpbmVkLiBUaGUgcXVlc3Rpb24gdGhhdCBqdW1wcyBvdXQgaXMsIHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgbXB0Y3BfbW92ZV9za2JzYD8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gdG8gc2VlIGlmIGl0JiMzOTtzIHN0YXRpYyBvciBub3QgYW5kIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgTVBUQ1Agc3RydWN0dXJlLiBUaGlzIGlzIHNvbWV0aGluZyBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX21vdmVfc2ticyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9NzI0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc3NzpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cdFx0XHRcdFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk0MT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6OTQ2Olx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA1LVx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwMDY6XHRcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNy1cdH1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMjEwPXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGNvcGllZClcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjYzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjI2NDpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdGEpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjY1LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMjg4PXN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjMwNjpzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjMwNy17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjMxNS1cdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjMxNjpcdFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTctXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM1MD1zdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM5My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzOTQ6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSBcdTAwMjZcdTAwMjYgbXB0Y3BfbW92ZV9za2JzKHNrKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTUtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzc4Nj1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE5LVx0XHRcdF9fbXB0Y3BfcmV0cmFucyhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODIwOlx0XHRpZiAoc3Bvb2xfYmwgXHUwMDI2XHUwMDI2IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCkpIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjEtXHRcdFx0Lyogbm90aWZ5IGFjayBzZXEgdXBkYXRlICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA3OD1zdGF0aWMgaW50IG1wdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwODgtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDg5Olx0XHRpZiAobXB0Y3BfbW92ZV9za2JzKHNrKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwOTAtXHRcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgMCk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDQ5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1wdGNwX3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyICpvZmYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDUwMS1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ1MDI6XHRcdG1wdGNwX21vdmVfc2ticyhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgRGF0YSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSB3aGVyZSB0aGUgY29yZSBwcm9jZXNzaW5nIGhhcHBlbnMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYG1wdGNwX21vdmVfc2tic2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBwbGFjZXM6IGBtcHRjcF9yZWN2bXNnYCwgYG1wdGNwX2lvY3RsYCwgYW5kIGBtcHRjcF9yZWN2X3NrYmAuIFRoZXJlZm9yZSwgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IGNhbmRpZGF0ZXMgZm9yIGtleSBmb2N1cyBwb2ludHMgaW4gbXkgYW5hbHlzaXMuCgpCZXlvbmQgdGhvc2UsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdGhlciBtYWluIGVudHJ5IHBvaW50cy4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMsIGJ1dCBJIGhhdmUgYSBmZXcgb3RoZXIgcG90ZW50aWFsIHBvaW50cyB0byBsb29rIGF0LgoKSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IGBfX21wdGNwX3JldHJhbnNgLiBJdCYjMzk7cyBjYWxsZWQgYnkgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gQWgsIGBtcHRjcF93b3JrZXJgIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgaXMgYSBzb2NrZXQgcmVsZWFzZSBjYWxsYmFjay4gSSBpbml0aWFsbHkgZGlzbWlzc2VkIHRoZW0sIGJ1dCBub3cgSSYjMzk7bSByZWNvbnNpZGVyaW5nLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBmb2N1c2luZyBvbiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9kYXRhX3JlYWR5YCBhbmQgYG1wdGNwX3JlY3Ztc2dgLgoKV2FpdCwgd2FpdC4uLiBoYW5nIG9uLiBgbXB0Y3Bfd29ya2VyYCBpcyAqc3RhdGljKiwgYnV0IGl0JiMzOTtzIHRoZSBtYWluIHdvcmtlciBmb3IgTVBUQ1AsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCAqdHJpZ2dlcnMqIHJldHJhbnNtaXNzaW9ucz8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gU28sIGBtcHRjcF93b3JrZXJgIGlzIHJlZ2lzdGVyZWQgYXMgYSB3b3JrcXVldWUgaXRlbSwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyByZWdpc3RlcmVkIGFzIHRoZSBgc2stJmd0O3NrX3Byb3QtJmd0O3JlbGVhc2VfY2JgLiBSaWdodC4gT2theS4gVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNUFRDUCBhbmQgc2VlIGlmIHRob3NlIG9mZmVyIGFueSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhhdCBhcyB0aGUgcHJpbWFyeSBhcmVhIG9mIGZvY3VzLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIGRpdmluZyBpbnRvIGRldGFpbHMsIGlzIHRvIHF1aWNrbHkgcnVsZSBvdXQgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGludm9sdmVkIG9yIGlmIHRoZXJlIGFyZSBvdGhlcnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoLCBvciBpbmZsdWVuY2UsIHRoZSBgTVBUQ1BgIHNldHVwLiBUaGUgcHJpb3JpdHkgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgcHJlbGltaW5hcnkgc3dlZXAgdG8gY2hlY2sgZm9yIGFueSBhZGphY2VudCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjA1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIENoYW5nZXM6IEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBjb25maWdzIHRoYXQgYXJlIHJlbGV2YW50IGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IGFyZSBub3cgaGFuZGxpbmcgbWVtb3J5IGxpbWl0cyBhbmQgcmV0cmFuc21pc3Npb24gaW1wcm92ZW1lbnRzLCB0byBlbnN1cmUgdGhleSYjMzk7cmUgcm9idXN0IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy4KCkluaXRpYWxseSwgSSB3YXMgZ29pbmcgdG8gYXZvaWQgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBiZWNhdXNlIHRoZXkmIzM5O3JlIHN0YXRpYywgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoZSBndWlkYW5jZSB0byBwcmVmZXIgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgKnVubGVzcyogdGhleSBhcmUgbm90IGlubGluZWQuIEluIHRoaXMgY2FzZSwgYG1wdGNwX3dvcmtlcmAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgSU5JVF9XT1JLYCwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyBhc3NpZ25lZCB0byBgc2stJmd0O3NrX3Byb3QtJmd0O3JlbGVhc2VfY2JgLCBzbyB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSB0aGVtLiBTbyBJICp3aWxsKiBpbmNsdWRlIHRoZW0uCgpTbywgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gdGhlc2UgY3JpdGljYWwgYXJlYXM6CgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgOiBUaGlzIGhhbmRsZXMgaW5jb21pbmcgb3B0aW9ucyBhbmQsIGNydWNpYWxseSwgY2hlY2tzIGlmIHdlJiMzOTtyZSBvdmVyIHRoZSBtZW1vcnkgbGltaXQsIHRoZW4gY2FsbHMgYG1wdGNwX292ZXJfbGltaXRgLiBUaGlzIGlzIGEgY2xlYXIgcG9pbnQgd2hlcmUgbWVtb3J5IGxpbWl0cyBhcmUgZW5mb3JjZWQuCiogICBgbXB0Y3BfZGF0YV9yZWFkeWA6IERlYWxzIHdpdGggc3ViZmxvdyBkYXRhIHJlYWR5IGV2ZW50cy4gV2l0aGluIHRoaXMgZnVuY3Rpb24sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGlzIGNhbGxlZCB3aGljaCBpbiB0dXJucyBjYWxsIGBfX21wdGNwX2FkZF9iYWNrbG9nYCB3aGljaCBjYW4gZHJvcCBwYWNrZXRzIGlmIHRoZSBiYWNrbG9nIGlzIGV4Y2VlZGVkLCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JgCiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gbW92aW5nIFNLQnMuCiogICBgbXB0Y3Bfd29ya2VyYDogSXQgaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMgYnkgY2FsbGluZyBgX19tcHRjcF9yZXRyYW5zYCwgd2hpY2ggaXMgbm93IHBhcnQgb2YgdGhlIG1lbW9yeSBsaW1pdCBoYW5kbGluZyBsb2dpYywgYW5kIGEgY3JpdGljYWwgYXJlYS4KKiAgIGBtcHRjcF9yZWxlYXNlX2NiYDogQWxzbyBoYW5kbGVzIHJldHJhbnNtaXNzaW9ucyBieSBjYWxsaW5nIGBfX21wdGNwX3JldHJhbnNgIGFuZCBwb3RlbnRpYWxseSBgX19tcHRjcF9tb3ZlX3NrYnNgLgoKVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzLCBkZWFsaW5nIHdpdGggbWVtb3J5IGxpbWl0cyBhbmQgcmV0cmFuc21pc3Npb25zLiBUaGVzZSBtb2RpZmljYXRpb25zIGNvdWxkIGludHJvZHVjZSBhbGwgc29ydHMgb2YgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aG9zZSBzZWN0aW9ucywgYmVjYXVzZSBtZW1vcnkgcHJlc3N1cmUgY2FuIGV4cG9zZSBzdWJ0bGUgYnVncyBsaWtlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2dpYyBlcnJvcnMgaW4gdGhlIGNvZGUuIEkgd2lsbCBpbmNsdWRlIHRoZXNlIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz05NjE9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5ODc6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9OTU2PXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTYwLVxubmV0L21wdGNwL3Byb3RvY29sLmg6OTYxOnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtOTYyLWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDY9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MzAtXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUzMTpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUzMi1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4NzQ9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4NS1cdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4NjpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4Ny1cdGVsc2UgaWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2VycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnRlcm5hbCBBdWRpdCBvZiBNUFRDUCBEYXRhIEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbWVudGFsbHkgdHJhY2luZyB0aGUgZGF0YSBmbG93IGhlcmUuIFRoZSBrZXkgaXMgdGhhdCBgbXB0Y3BfZGF0YV9yZWFkeWAgKmlzbiYjMzk7dCogYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkLCBnaXZlbiBob3cgaXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBtdWx0aS1wYXRoIFRDUCBjb250ZXh0LiBJJiMzOTt2ZSBub3RlZCB0aGF0IGl0JiMzOTtzIGJlaW5nIGludm9rZWQgZnJvbSBib3RoIGBzdWJmbG93X2RhdGFfcmVhZHlgIGFuZCBgc3ViZmxvd19zdGF0ZV9jaGFuZ2VgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGNhbiBub3cgYmUgc3VyZSBhYm91dCB0aGlzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNpcmN1bXN0YW5jZXMgb2YgdGhlc2UgY2FsbHMuCgpXaXRoIHRoYXQgY29uZmlybWVkLCBJJiMzOTttIHNoaWZ0aW5nIG15IGZvY3VzIHRvIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIGNhdXNpbmcgdGhpcywgYW5kIGhvdyB0aGUgbXVsdGktcGF0aCBUQ1AgaGVhZGVyIGlzIHBhcnNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xMDUzPXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMDc4LVxubmV0L21wdGNwL29wdGlvbnMuYzoxMDc5Olx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMDgwLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTEzMD1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNTgtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE2MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBvZiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AqKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsICYjMzQ7V2hvJiMzOTtzIGFjdHVhbGx5IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXMgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGZ1bmN0aW9uPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1cHN0cmVhbSBjb2RlIHBhdGgsIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgZGF0YSBpdCYjMzk7cyBzdXBwb3NlZCB0byBoYW5kbGUuIElzIGl0IGNhbGxlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCwgZGF0YSB0cmFuc21pc3Npb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NDg4ND12b2lkIHRjcF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5MC1cdC8qIG1wdGNwIGNhbiYjMzk7dCB0ZWxsIHVzIHRvIGlnbm9yZSByZXNldCBwa3RzLFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5MTpcdCAqIHNvIGp1c3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpLlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5Mi1cdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5My1cdGlmIChza19pc19tcHRjcChzaykpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODk0Olx0XHRtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5NS1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NjA3PXN0YXRpYyB2b2lkIHRjcF9kYXRhX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE2LVx0ICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1NjE3Olx0aWYgKHNrX2lzX21wdGNwKHNrKSBcdTAwMjZcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTgtXHRcdF9fa2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczNzktXHRcdFx0ICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MzgwOlx0XHRcdGlmIChza19pc19tcHRjcChzaykgXHUwMDI2XHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM4MS1cdFx0XHRcdGdvdG8gZGlzY2FyZDtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEwNTM9c3RhdGljIHZvaWQgYWNrX3VwZGF0ZV9tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwNzgtXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEwNzk6XHQvKiB0aGlzIGFzc3VtZXMgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpIGlzIGludm9rZWQgYWZ0ZXIgdGNwX2FjaygpICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwODAtXHRpZiAoYWZ0ZXI2NChtc2stXHUwMDNld25kX2VuZCwgc25kX254dCkpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0xMTMwPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1OC0gKi9cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21wdGNwL29wdGlvbnMuYy0xMTYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipNUFRDUCBDb2RlIEV4cGxvcmF0aW9uOiBJbml0aWFsIEZvY3VzKioKClJpZ2h0LCBzbyBJIHNlZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgY2FsbGVkIHdpdGhpbiBgdGNwX2lucHV0LmNgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTXVsdGlwYXRoIFRDUCBvcHRpb25zIGFyZSBoYW5kbGVkIHdoZW4gaW5jb21pbmcuIFRoZSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChvYnZpb3VzbHksIHRoYXQmIzM5O3Mgd2hlcmUgd2Ugc3RhcnRlZCkKKiAgIGBtcHRjcF9kYXRhX3JlYWR5YCAoY3JpdGljYWwsIGhvdyYjMzk7cyBkYXRhIHNpZ25hbGxlZD8pCiogICBgbXB0Y3BfcmVjdm1zZ2AgKGhvdyBhcmUgbWVzc2FnZXMgcHJvY2Vzc2VkIG9uIHRoZSByZWNlaXZpbmcgZW5kPykKKiAgIGBtcHRjcF93b3JrZXJgIChzZWVtcyBsaWtlIGEgd29ya2VyIGZ1bmN0aW9uIG9yIHRocmVhZCkKKiAgIGBtcHRjcF9yZWxlYXNlX2NiYCAoY2FsbGJhY2sgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMsIG1heWJlPykuCgpIbW0sIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGBtcHRjcF93b3JrZXJgLiBJIHdvbmRlciBpZiB0aGF0JiMzOTtzIHRoZSBjYW5vbmljYWwgbmFtZSB1c2VkIGluIHRoZSBjb2RlIG9yIHBlcmhhcHMgaXQgdXNlcyBhbm90aGVyIG5hbWUgZm9yIGl0cyB3b3JrIGZ1bmN0aW9uLiBUaW1lIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF93b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTEwNzM9Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDc3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3ODpcdC8qIEdldCBhIHJlZmVyZW5jZSBvbiB0aGlzIHNvY2tldCwgbXB0Y3Bfd29ya2VyKCkgd2lsbCByZWxlYXNlIGl0LlxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3OTpcdCAqIEFzIG1wdGNwX3dvcmtlcigpIG1pZ2h0IGNvbXBsZXRlIGJlZm9yZSB1cywgd2UgY2FuIG5vdCBhdm9pZFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4MC1cdCAqIGEgc29ja19ob2xkKCkvc29ja19wdXQoKSBpZiBzY2hlZHVsZV93b3JrKCkgcmV0dXJucyBmYWxzZS5cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjUwLVx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgc29ja19mbGFnKHNzaywgU09DS19ERUFEKSkpIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2NTE6XHRcdC8qIGVuc3VyZSBsYXRlciBjaGVjayBpbiBtcHRjcF93b3JrZXIoKSB3aWxsIGRpc3Bvc2UgdGhlIG1zayAqL1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1Mi1cdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNzgyPXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4MjItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODIzOlx0LyogdGhlIGNhbGxpbmcgbXB0Y3Bfd29ya2VyIHdpbGwgcHJvcGVybHkgZGVzdHJveSB0aGUgc29ja2V0ICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODI0LVx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMDcwPXN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxMDY6c3RhdGljIHZvaWQgbXB0Y3Bfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMDcte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxNTU9c3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjItXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxNjM6XHRJTklUX1dPUksoXHUwMDI2bXNrLVx1MDAzZXdvcmssIG1wdGNwX3dvcmtlcik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTY0LVx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODYwCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBNZW1vcnkgUHJlc3N1cmUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgcGlubmVkIGRvd24gYG1wdGNwX3dvcmtlcmAgYXMgdGhlIGtleSB3b3JrcXVldWUgZnVuY3Rpb24gaGVyZS4gRXhjZWxsZW50LiBOb3csIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2UgY29yZSBzeW1ib2xzOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9kYXRhX3JlYWR5YCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfd29ya2VyYCwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHdpdGhpbiBNUFRDUC4KClRoZSBzeXN0ZW0gY29uZmlncyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggYXJlIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4gTWFrZXMgc2Vuc2UsIHBhcnRpY3VsYXJseSB0aGUgbGF0dGVyLCBhcyBJUHY2IGNhbiBpbnRyb2R1Y2UgaXRzIG93biB1bmlxdWUgbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcy4KClRoZSBwYXRjaCYjMzk7cyBjb3JlIG1vZGlmaWNhdGlvbiBpcyBoYW5kbGluZyBtZW1vcnkgbGltaXRzOyBzcGVjaWZpY2FsbHksIHBydW5pbmcgdGhlIG91dC1vZi1vcmRlciBxdWV1ZSBhbmQgZHJvcHBpbmcgYmFja2xvZyBwYWNrZXRzIHdoZW4gbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQuIEFuZCB0aGVyZSBpcyBhIGZpeCBmb3IgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHdoaWNoIHdpbGwgbm93IHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgcmVxdWlyZXMgcmlnb3JvdXMgdGVzdGluZy4gVGhlIGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2dpYyBlcnJvcnMgdGhhdCBjb3VsZCBtYW5pZmVzdCB1bmRlciBoaWdoIG1lbW9yeSBwcmVzc3VyZS4gSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIHRlc3RzIHRoYXQgYWdncmVzc2l2ZWx5IGV4cGxvcmUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuCgpSaWdodCwgdGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGF0YV9yZWFkeSYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3dvcmtlciYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGJ1Z3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfd29ya2VyJiMzNDssCiAgICAmIzM0O21wdGNwX3JlbGVhc2VfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBtZW1vcnkgbGltaXRzIGJ5IHBydW5pbmcgdGhlIG91dC1vZi1vcmRlciBxdWV1ZSBhbmQgZHJvcHBpbmcgcGFja2V0cyBmcm9tIHRoZSBiYWNrbG9nIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZC4gSXQgYWxzbyBmaXhlcyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gcHJvcGVybHkgcHVzaCByZXRyYW5zbWlzc2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0MzozMC4zMzcwMzI0MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg0NzA0ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3dvcmtlclwiLFxuICAgIFwibXB0Y3BfcmVsZWFzZV9jYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQzOjMwLjMzNzAzOTU5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjM3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDMyMjZmNmZjMWQ0MDZkM2NmMTRmNmY3ZDY5YWM4ZWQ3OGIxNjFjN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjQzOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXFxuKysrIGIvbmV0L21wdGNwL21pYi5jXFxuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIkZhbGxiYWNrRmFpbGVkXFxcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiV2luUHJvYmVcXFwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJCYWNrbG9nRHJvcFxcXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIlJjdlBydW5lZFxcXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJPRk9QcnVuZWRcXFwiLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcXG4gfTtcXG4gXFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXFxuaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcXG4rKysgYi9uZXQvbXB0Y3AvbWliLmhcXG5AQCAtODgsNiArODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XFxuIFxcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cXG4gXFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFxcdC8qIENhbid0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXFxuIFxcdE1QVENQX01JQl9XSU5QUk9CRSxcXHRcXHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xcbitcXHRNUFRDUF9NSUJfQkFDS0xPR0RST1AsXFx0XFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xcbitcXHRNUFRDUF9NSUJfUkNWUFJVTkVELFxcdFxcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqL1xcbitcXHRNUFRDUF9NSUJfT0ZPUFJVTkVELFxcdFxcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cXG4gXFx0X19NUFRDUF9NSUJfTUFYXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xcbmluZGV4IGM2NjQwMjNkMzdiYTguLjU2NDIyNzdjOGIzZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcXG5AQCAtMTEyNyw4ICsxMTI3LDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVxcdTAwM2VhaG1hYztcXG4gfVxcbiBcXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxcbi0gKiBlbHNlIHJldHVybiB0cnVlLlxcbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XFxuK1xcbitcXHRtZW0gKz0gUkVBRF9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4pO1xcbitcXHRpZiAobGlrZWx5KG1lbSBcXHUwMDNjPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1ZikpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciBhbHJlYWR5LWFja2VkIHNlZ21lbnRzLiAqL1xcbitcXHRpZiAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIHx8XFxuK1xcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9GSU4gfHxcXG4rXFx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVxcdTAwM2VyY3Zfbnh0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXFxuK1xcdGluZXRfY3NrKHNzayktXFx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XFxuK1xcdGluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spO1xcbitcXG4rXFx0LyogUGxhaW4gVENQIChmYWxsYmFjaykgYW5kIHNrYiBpcyBkcm9wcGVkIGJlZm9yZSB0aGUgVENQIHJlY3YgcXVldWUuICovXFxuK1xcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qIFJldHVybiBmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBkcm9wIHRoZSBwYWNrZXQsIGkuZS4gaW4gY2FzZSBvZiBlcnJvcixcXG4rICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLlxcbiAgKi9cXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbkBAIC0xMTU0LDcgKzExODAsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0XFx0X19tcHRjcF9kYXRhX2Fja2VkKHN1YmZsb3ctXFx1MDAzZWNvbm4pO1xcbiBcXHRcXHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVxcdTAwM2Vjb25uKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVxcdTAwM2Vjb25uLCBzaywgc2tiKTtcXG4gXFx0fVxcbiBcXG4gXFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcXHUwMDI2bXBfb3B0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjY4YzlkOTUyZDFkM2QgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbkBAIC0zNzMsNiArMzczLDQ5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2luaXRfc2tiKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXFxuIFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiB9XFxuIFxcbisvKiBcXFwiSW5zcGlyZWRcXFwiIGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcXG4rICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cXG4rICovXFxuK3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpXFxuK3tcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4rXFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2O1xcbitcXHRib29sIHBydW5lZCA9IGZhbHNlO1xcbitcXHR1NjQgbWVtO1xcbitcXG4rXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRub2RlID0gXFx1MDAyNm1zay1cXHUwMDNlb29vX2xhc3Rfc2tiLVxcdTAwM2VyYm5vZGU7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7XFxuK1xcbitcXHRcXHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xcbitcXHRcXHRpZiAoYWZ0ZXI2NChzZXEsIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRwcnVuZWQgPSB0cnVlO1xcbitcXHRcXHRwcmV2ID0gcmJfcHJldihub2RlKTtcXG4rXFx0XFx0cmJfZXJhc2Uobm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKTtcXG4rXFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG4rXFx0XFx0bXNrLVxcdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XFxuK1xcbitcXHRcXHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcXG4rXFx0XFx0aWYgKG1lbSBcXHUwMDNjPSBzay1cXHUwMDNlc2tfcmN2YnVmKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdG5vZGUgPSBwcmV2O1xcbitcXHR9IHdoaWxlIChub2RlKTtcXG4rXFxuK1xcdGlmIChwcnVuZWQpXFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xcbitcXG4rb3V0OlxcbitcXHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcXG4rXFx0cmV0dXJuIG1lbSBcXHUwMDNjPSBzay1cXHUwMDNlc2tfcmN2YnVmO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHR1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxO1xcbkBAIC0zODEsNiArNDI0LDE3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0bXB0Y3BfYm9ycm93X2Z3ZG1lbShzaywgc2tiKTtcXG4gXFxuK1xcdC8qIENhbid0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IHRoaXMgbGF0ZSwgb3IgdGhlIHN0cmVhbVxcbitcXHQgKiB3aWxsIGJyZWFrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIFJFQURfT05DRShzay1cXHUwMDNlc2tfcmN2YnVmKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFtcHRjcF9wcnVuZV9vZm9fcXVldWUoc2ssIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxKSkge1xcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcXG4rXFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEgPT0gbXNrLVxcdTAwM2VhY2tfc2VxKSB7XFxuIFxcdFxcdC8qIGluIHNlcXVlbmNlICovXFxuIFxcdFxcdG1zay1cXHUwMDNlYnl0ZXNfcmVjZWl2ZWQgKz0gY29weV9sZW47XFxuQEAgLTY3NSw2ICs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc3NrID0gc2tiLVxcdTAwM2VzaztcXG4gXFx0Ym9vbCBmcmFnc3RvbGVuO1xcbitcXHR1NjQgbGltaXQ7XFxuIFxcdGludCBkZWx0YTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xcbkBAIC02ODIsNiArNzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFNpbWlsYXIgYWRkaXRpb25hbCBhbGxvd2FuY2UgYXMgcGxhaW4gVENQLiAqL1xcbitcXHRsaW1pdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcmN2YnVmKTtcXG4rXFx0bGltaXQgKz0gKGxpbWl0IFxcdTAwM2VcXHUwMDNlIDEpICsgNjQgKiAxMDI0O1xcbitcXHRsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTtcXG4rXFx0aWYgKG1zay1cXHUwMDNlYmFja2xvZ19sZW4gXFx1MDAzZSBsaW1pdCBcXHUwMDI2XFx1MDAyNiAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XFxuK1xcdFxcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcXG4rXFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfQkFDS0xPRyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0LyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovXFxuIFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbiBcXHRcXHR0YWlsID0gbGlzdF9sYXN0X2VudHJ5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCwgc3RydWN0IHNrX2J1ZmYsIGxpc3QpO1xcbkBAIC03NTMsNyArODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcbiBcXHRcXHRcXHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xcbiBcXG4tXFx0XFx0XFx0aWYgKG93bl9tc2sgXFx1MDAyNlxcdTAwMjYgc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2Mgc2stXFx1MDAzZXNrX3JjdmJ1Zikge1xcbitcXHRcXHRcXHRpZiAob3duX21zaykge1xcbiBcXHRcXHRcXHRcXHRtcHRjcF9zdWJmbG93X2xlbmRfZndkbWVtKHN1YmZsb3csIHNrYik7XFxuIFxcdFxcdFxcdFxcdHJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbkBAIC0xMTM2LDEzICsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0bXB0Y3Bfd3JpdGVfc3BhY2Uoc2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcXG4te1xcbi1cXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbi1cXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbi1cXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG5AQCAtMjIwOSwxMiArMjI2Nyw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0XFxuIFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuIFxcdGJvb2wgbW92ZWQgPSBmYWxzZTtcXG4gXFxuLVxcdCpkZWx0YSA9IDA7XFxuIFxcdHdoaWxlICgxKSB7XFxuLVxcdFxcdC8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbid0IGRyb3AgKi9cXG4tXFx0XFx0aWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIHNrLVxcdTAwM2Vza19yY3ZidWYpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4gXFx0XFx0cHJlZmV0Y2goc2tiLVxcdTAwM2VuZXh0KTtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnNrYi1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdCpkZWx0YSArPSBza2ItXFx1MDAzZXRydWVzaXplO1xcbkBAIC0yMjQyLDkgKzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuIFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX3VuYWNjb3VudGVkIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zb2NrZXQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICAgIG1lbV9jZ3JvdXBfZnJvbV9zayhzaykpO1xcbiBcXG4tXFx0LyogRG9uJ3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqL1xcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpIHx8XFxuLVxcdCAgICBza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzZSBzay1cXHUwMDNlc2tfcmN2YnVmKVxcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChza2JzKTtcXG5AQCAtMjI1MiwyMCArMjMwMywxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4te1xcbi1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbi1cXG4tXFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXFx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xcbi1cXHRsaXN0X3NwbGljZShza2JzLCBcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2ticztcXG4gXFx0Ym9vbCBlbnF1ZXVlZCA9IGZhbHNlO1xcbi1cXHR1MzIgbW92ZWQ7XFxuK1xcdHUzMiBtb3ZlZCA9IDA7XFxuIFxcbiBcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbiBcXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFxcdTAwMjZza2JzKSkge1xcbkBAIC0yMjczLDggKzIzMTYsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRlbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgXFx1MDAyNnNrYnMsIFxcdTAwMjZtb3ZlZCk7XFxuIFxcbiBcXHRcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbi1cXHRcXHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcXHUwMDI2c2ticyk7XFxuIFxcdH1cXG4rXFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXFx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xcbiBcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuIFxcbiBcXHRpZiAoZW5xdWV1ZWQgXFx1MDAyNlxcdTAwMjYgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpXFxuQEAgLTI3ODUsNDQgKzI4MjgsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIFxcdHNrX2Vycm9yX3JlcG9ydChzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuKy8qXFxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXFxuKyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZVxcbisgKi9cXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbitcXHRcXHRcXHRcXHR1NjQgc2VudF9zZXEpXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbi1cXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4gXFx0c3RydWN0IHNvY2sgKnNzaztcXG4tXFx0aW50IHJldCwgZXJyO1xcbi1cXHR1MTYgbGVuID0gMDtcXG4tXFxuLVxcdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbi1cXG4tXFx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXFxcInN0YWxlXFxcIiBsb2dpYyAqL1xcbi1cXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xcbi1cXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4tXFx0aWYgKCFkZnJhZykge1xcbi1cXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4tXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4tXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbi1cXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4tXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4tXFxuLVxcdFxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcXG4tXFx0XFx0XFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XFxuLVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbitcXHRpbnQgcmV0LCBsZW4gPSAwO1xcbiBcXG4gXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG4gXFx0XFx0aWYgKFJFQURfT05DRShzdWJmbG93LVxcdTAwM2VzY2hlZHVsZWQpKSB7XFxuK1xcdFxcdFxcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVxcdTAwM2VkYXRhX3NlcTtcXG4gXFx0XFx0XFx0dTE2IGNvcGllZCA9IDA7XFxuIFxcbiBcXHRcXHRcXHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xcbkBAIC0yODMyLDcgKzI4NTMsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHRsb2NrX3NvY2soc3NrKTtcXG4gXFxuIFxcdFxcdFxcdC8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqL1xcbi1cXHRcXHRcXHRpbmZvLnNlbnQgPSAwO1xcbitcXHRcXHRcXHRpbmZvLnNlbnQgPSBvZmZzZXQ7XFxuIFxcdFxcdFxcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVxcdTAwM2Vjc3VtX2VuYWJsZWQpID8gZGZyYWctXFx1MDAzZWRhdGFfbGVuIDpcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQ7XFxuIFxcbkBAIC0yODQ3LDcgKzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHQgICAgIW1zay1cXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlZmFsbGJhY2tfbG9jayk7XFxuIFxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbkBAIC0yODcwLDEzICsyODkxLDEwOSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHRyZWxlYXNlX3NvY2soc3NrKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHJldHVybiBsZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG4rXFx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XFxuK1xcdGJvb2wgbmVlZF9yZXRyYW5zO1xcbitcXHR1NjQgcmV0cmFuc19zZXE7XFxuK1xcdGludCBlcnIsIGxlbjtcXG4gXFxuLVxcdG1zay1cXHUwMDNlYnl0ZXNfcmV0cmFucyArPSBsZW47XFxuLVxcdGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcXG4rXFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcXG4rXFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG4rXFx0cmV0cmFuc19zZXEgPSBtc2stXFx1MDAzZXNuZF91bmE7XFxuK1xcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xcbitcXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xcbitcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuK1xcdGlmICghZGZyYWcpXFxuK1xcdFxcdGdvdG8gY2hlY2tfZGF0YV9maW47XFxuIFxcbi1cXHQvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cXG4tXFx0aWYgKGFmdGVyNjQoZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSwgbXNrLVxcdTAwM2VzbmRfbnh0KSlcXG4tXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXNuZF9ueHQsIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cXHUwMDNlZGF0YV9zZXEpO1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdGJvb2wgYWxyZWFkeV9yZXRyYW5zO1xcbitcXHRcXHR1NjQgc2VudF9zZXE7XFxuK1xcbitcXHRcXHQvKiBUaGUgZGVmYXVsdCBzY2hlZHVsZXIgd2lsbCBraWNrIFxcXCJzdGFsZVxcXCIgbG9naWMsIHRoYXQgaW5cXG4rXFx0XFx0ICogdHVybiBjYW4gcHJvY2VzcyBpbmNvbWluZyBhY2tzIGFuZCBjbGVhbiB0aGUgUlRYIHF1ZXVlO1xcbitcXHRcXHQgKiBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkZnJhZyB3aWxsIHN0aWxsIGJlIGFyb3VuZFxcbitcXHRcXHQgKiBhZnRlcndhcmRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Z2V0X3BhZ2UoZGZyYWctXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHB1dF9wYWdlKGRmcmFnLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxcbitcXHRcXHQgKiB0aGUgY3VycmVudCBkZnJhZywgaWYgc28gdHJ5IHRvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbitcXHRcXHRhbHJlYWR5X3JldHJhbnMgPSAhYmVmb3JlNjQobXNrLVxcdTAwM2VzbmRfdW5hLCBkZnJhZy1cXHUwMDNlZGF0YV9zZXEgK1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCk7XFxuK1xcdFxcdHB1dF9wYWdlKGRmcmFnLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0aWYgKGFscmVhZHlfcmV0cmFucykge1xcbitcXHRcXHRcXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbitcXHRcXHRcXHRyZXRyYW5zX3NlcSA9IG1zay1cXHUwMDNlc25kX3VuYTtcXG4rXFx0XFx0XFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XFxuK1xcdFxcdFxcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYWZ0ZXI2NChtc2stXFx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xcbitcXHRcXHRcXHRyZXRyYW5zX3NlcSA9IG1zay1cXHUwMDNlc25kX3VuYTtcXG4rXFx0XFx0fVxcbitcXHRcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuK1xcbitcXHRcXHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxcbitcXHRcXHQgKiAgcXVldWUgZHVlIHRvIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghZGZyYWcgfHwgIWRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogQ2FuIGZhaWwgb25seSBpbiBjYXNlIG9mIGZhbGxiYWNrLiAqL1xcbitcXHRcXHRsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xcbitcXG4rXFx0XFx0cmV0cmFuc19zZXEgKz0gbGVuO1xcbitcXHRcXHRtc2stXFx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xcbitcXHRcXHRkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcmV0cmFuc19zZXEgLSBkZnJhZy1cXHUwMDNlZGF0YV9zZXEpO1xcbitcXG4rXFx0XFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXFxuK1xcdFxcdHNlbnRfc2VxID0gZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcTtcXG4rXFx0XFx0aWYgKGFmdGVyNjQoc2VudF9zZXEsIG1zay1cXHUwMDNlc25kX254dCkpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VzbmRfbnh0LCBzZW50X3NlcSk7XFxuK1xcbitcXHRcXHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXFxuK1xcdFxcdCAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXFx1MDAzZWRhdGFfc2VxICsgZGZyYWctXFx1MDAzZWRhdGFfbGVuKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcXHUwMDI2ZGZyYWctXFx1MDAzZWxpc3QsIFxcdTAwMjZtc2stXFx1MDAzZXJ0eF9xdWV1ZSkgP1xcbitcXHRcXHRcXHRcXHROVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTtcXG4rXFx0XFx0aWYgKCFkZnJhZylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXFxuK1xcdGlmICghbmVlZF9yZXRyYW5zKSB7XFxuK2NoZWNrX2RhdGFfZmluOlxcbitcXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4rXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4rXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbitcXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4rXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4rXFx0XFx0XFx0Z290byByZXNldF90aW1lcjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0fVxcbiBcXG4gcmVzZXRfdGltZXI6XFxuIFxcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XFxuQEAgLTM2NzAsMTIgKzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHR1MzIgbW92ZWQgPSAwO1xcbiBcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay1cXHUwMDNlY2JfZmxhZ3MgXFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XFxuIFxcdFxcdGJvb2wgc3Bvb2xfYmw7XFxuLVxcdFxcdHUzMiBtb3ZlZDtcXG4gXFxuIFxcdFxcdHNwb29sX2JsID0gbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFxcdTAwMjZza2JzKTtcXG4gXFx0XFx0aWYgKCFmbGFncyBcXHUwMDI2XFx1MDAyNiAhc3Bvb2xfYmwpXFxuQEAgLTM3MDgsOSArMzgyNSw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spO1xcbi1cXHRcXHRpZiAoc3Bvb2xfYmwpXFxuLVxcdFxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRpZiAobW92ZWQpXFxuK1xcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVxcdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcXG4gXFxuIFxcdGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9DTEVBTl9VTkEsIFxcdTAwMjZtc2stXFx1MDAzZWNiX2ZsYWdzKSlcXG4gXFx0XFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6MzAuODQ2MDYxNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzMzODAwNjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3dvcmtlclwiLFxuICAgIFwibXB0Y3BfcmVsZWFzZV9jYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzMjI2ZjZmYzFkNDA2ZDNjZjE0ZjZmN2Q2OWFjOGVkNzhiMTYxYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjQzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCBmMjNmZGEwYzU1YTcyLi4yNTY5Mzg1YmFiN2NhIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcbkBAIC04NSw2ICs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7XG4gXHRTTk1QX01JQl9JVEVNKFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXCIsIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLFxuIFx0U05NUF9NSUJfSVRFTShcIkZhbGxiYWNrRmFpbGVkXCIsIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwiV2luUHJvYmVcIiwgTVBUQ1BfTUlCX1dJTlBST0JFKSxcbitcdFNOTVBfTUlCX0lURU0oXCJCYWNrbG9nRHJvcFwiLCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApLFxuK1x0U05NUF9NSUJfSVRFTShcIlJjdlBydW5lZFwiLCBNUFRDUF9NSUJfUkNWUFJVTkVEKSxcbitcdFNOTVBfTUlCX0lURU0oXCJPRk9QcnVuZWRcIiwgTVBUQ1BfTUlCX09GT1BSVU5FRCksXG4gfTtcbiBcbiAvKiBtcHRjcF9taWJfYWxsb2MgLSBhbGxvY2F0ZSBwZXJjcHUgbWliIGNvdW50ZXJzXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXG5pbmRleCA4MTIyMThiNWVkMmJmLi4zYTM0MjVlMjU4YTc2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5oXG4rKysgYi9uZXQvbXB0Y3AvbWliLmhcbkBAIC04OCw2ICs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cbiBcdE1QVENQX01JQl9XSU5QUk9CRSxcdFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cbitcdE1QVENQX01JQl9CQUNLTE9HRFJPUCxcdFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xuK1x0TVBUQ1BfTUlCX1JDVlBSVU5FRCxcdFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzICovXG4rXHRNUFRDUF9NSUJfT0ZPUFJVTkVELFx0XHQvKiBNUFRDUC1sZXZlbCBPb08gcXVldWUgcHJ1bmVkICovXG4gXHRfX01QVENQX01JQl9NQVhcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXG5pbmRleCBjNjY0MDIzZDM3YmE4Li41NjQyMjc3YzhiM2QwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xuKysrIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuQEAgLTExMjcsOCArMTEyNywzNCBAQCBzdGF0aWMgYm9vbCBhZGRfYWRkcl9obWFjX3ZhbGlkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRyZXR1cm4gaG1hYyA9PSBtcF9vcHQtXHUwMDNlYWhtYWM7XG4gfVxuIFxuLS8qIFJldHVybiBmYWxzZSBpbiBjYXNlIG9mIGVycm9yIChvciBzdWJmbG93IGhhcyBiZWVuIHJlc2V0KSxcbi0gKiBlbHNlIHJldHVybiB0cnVlLlxuK3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuK1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0dTY0IG1lbSA9IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcbitcdG1lbSArPSBSRUFEX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuKTtcbitcdGlmIChsaWtlbHkobWVtIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciBhbHJlYWR5LWFja2VkIHNlZ21lbnRzLiAqL1xuK1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbitcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfRklOIHx8XG4rXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCB0Y3Bfc2soc3NrKS1cdTAwM2VyY3Zfbnh0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXG4rXHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4rXHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbitcbitcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuK1x0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuKyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy5cbiAgKi9cbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC0xMTU0LDcgKzExODAsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cdTAwM2Vjb25uKTtcbiBcdFx0bXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy1cdTAwM2Vjb25uKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjY4YzlkOTUyZDFkM2QgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNzMsNiArMzczLDQ5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2luaXRfc2tiKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG4gXHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiB9XG4gXG4rLyogXCJJbnNwaXJlZFwiIGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcbisgKiBzb2NrZXQgaXMgdW5kZXIgbWVtb3J5IGxpbWl0LlxuKyAqL1xuK3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjtcbitcdGJvb2wgcHJ1bmVkID0gZmFsc2U7XG4rXHR1NjQgbWVtO1xuK1xuK1x0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bm9kZSA9IFx1MDAyNm1zay1cdTAwM2Vvb29fbGFzdF9za2ItXHUwMDNlcmJub2RlO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xuK1xuK1x0XHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xuK1x0XHRpZiAoYWZ0ZXI2NChzZXEsIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRwcnVuZWQgPSB0cnVlO1xuK1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbitcdFx0cmJfZXJhc2Uobm9kZSwgXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4rXG4rXHRcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuK1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRub2RlID0gcHJldjtcbitcdH0gd2hpbGUgKG5vZGUpO1xuK1xuK1x0aWYgKHBydW5lZClcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT1BSVU5FRCk7XG4rXG4rb3V0OlxuK1x0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XG4rXHRyZXR1cm4gbWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmO1xuK31cbitcbiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbkBAIC0zODEsNiArNDI0LDE3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0bXB0Y3BfYm9ycm93X2Z3ZG1lbShzaywgc2tiKTtcbiBcbitcdC8qIENhbid0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IHRoaXMgbGF0ZSwgb3IgdGhlIHN0cmVhbVxuK1x0ICogd2lsbCBicmVhay5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2UgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbiBcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxID09IG1zay1cdTAwM2VhY2tfc2VxKSB7XG4gXHRcdC8qIGluIHNlcXVlbmNlICovXG4gXHRcdG1zay1cdTAwM2VieXRlc19yZWNlaXZlZCArPSBjb3B5X2xlbjtcbkBAIC02NzUsNiArNzI5LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrID0gc2tiLVx1MDAzZXNrO1xuIFx0Ym9vbCBmcmFnc3RvbGVuO1xuK1x0dTY0IGxpbWl0O1xuIFx0aW50IGRlbHRhO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkpIHtcbkBAIC02ODIsNiArNzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHQvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi9cbitcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXHRsaW1pdCArPSAobGltaXQgXHUwMDNlXHUwMDNlIDEpICsgNjQgKiAxMDI0O1xuK1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4rXHRpZiAobXNrLVx1MDAzZWJhY2tsb2dfbGVuIFx1MDAzZSBsaW1pdCBcdTAwMjZcdTAwMjYgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSkge1xuK1x0XHRfX01QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9CQUNLTE9HRFJPUCk7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzUzLDcgKzgxOCw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0XHRcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XG4gXG4tXHRcdFx0aWYgKG93bl9tc2sgXHUwMDI2XHUwMDI2IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Mgc2stXHUwMDNlc2tfcmN2YnVmKSB7XG4rXHRcdFx0aWYgKG93bl9tc2spIHtcbiBcdFx0XHRcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcbiBcdFx0XHRcdHJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpO1xuIFx0XHRcdH0gZWxzZSB7XG5AQCAtMTEzNiwxMyArMTIwMSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIwOSwxMiArMjI2Nyw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xuIFxuLVx0KmRlbHRhID0gMDtcbiBcdHdoaWxlICgxKSB7XG4tXHRcdC8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbid0IGRyb3AgKi9cbi1cdFx0aWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuLVx0XHRcdGJyZWFrO1xuLVxuIFx0XHRwcmVmZXRjaChza2ItXHUwMDNlbmV4dCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnNrYi1cdTAwM2VsaXN0KTtcbiBcdFx0KmRlbHRhICs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQyLDkgKzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX3VuYWNjb3VudGVkIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zb2NrZXQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIG1lbV9jZ3JvdXBfZnJvbV9zayhzaykpO1xuIFxuLVx0LyogRG9uJ3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqL1xuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcbi1cdCAgICBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjUyLDIwICsyMzAzLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsXG4tXHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4te1xuLVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbi1cbi1cdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4tXHRsaXN0X3NwbGljZShza2JzLCBcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KTtcbi19XG4tXG4gc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xuIFx0Ym9vbCBlbnF1ZXVlZCA9IGZhbHNlO1xuLVx0dTMyIG1vdmVkO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3Myw4ICsyMzE2LDggQEAgc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKTtcbiBcbiBcdFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuIFxuIFx0aWYgKGVucXVldWVkIFx1MDAyNlx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcbkBAIC0yNzg1LDQ0ICsyODI4LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbisvKlxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXG4rICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4rICovXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuK1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwic3RhbGVcIiBsb2dpYyAqL1xuLVx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbi1cdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xuLVx0aWYgKCFkZnJhZykge1xuLVx0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4tXHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuLVxuLVx0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuLVx0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRpbnQgcmV0LCBsZW4gPSAwO1xuIFxuIFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiBcdFx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZXNjaGVkdWxlZCkpIHtcbitcdFx0XHR1MTYgb2Zmc2V0ID0gc2VudF9zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiBcdFx0XHR1MTYgY29waWVkID0gMDtcbiBcbiBcdFx0XHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xuQEAgLTI4MzIsNyArMjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbitcdFx0XHRpbmZvLnNlbnQgPSBvZmZzZXQ7XG4gXHRcdFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXHUwMDNlY3N1bV9lbmFibGVkKSA/IGRmcmFnLVx1MDAzZWRhdGFfbGVuIDpcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudDtcbiBcbkBAIC0yODQ3LDcgKzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdCAgICAhbXNrLVx1MDAzZWFsbG93X3N1YmZsb3dzKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlZmFsbGJhY2tfbG9jayk7XG4gXHRcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbi1cdFx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3MCwxMyArMjg5MSwxMDkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbitcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuK1x0Ym9vbCBuZWVkX3JldHJhbnM7XG4rXHR1NjQgcmV0cmFuc19zZXE7XG4rXHRpbnQgZXJyLCBsZW47XG4gXG4tXHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyArPSBsZW47XG4tXHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xuK1x0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbitcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4rXHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuK1x0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuK1x0aWYgKCFkZnJhZylcbitcdFx0Z290byBjaGVja19kYXRhX2ZpbjtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbi1cdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1x0Zm9yICg7Oykge1xuK1x0XHRib29sIGFscmVhZHlfcmV0cmFucztcbitcdFx0dTY0IHNlbnRfc2VxO1xuK1xuK1x0XHQvKiBUaGUgZGVmYXVsdCBzY2hlZHVsZXIgd2lsbCBraWNrIFwic3RhbGVcIiBsb2dpYywgdGhhdCBpblxuK1x0XHQgKiB0dXJuIGNhbiBwcm9jZXNzIGluY29taW5nIGFja3MgYW5kIGNsZWFuIHRoZSBSVFggcXVldWU7XG4rXHRcdCAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kXG4rXHRcdCAqIGFmdGVyd2FyZHMuXG4rXHRcdCAqL1xuK1x0XHRnZXRfcGFnZShkZnJhZy1cdTAwM2VwYWdlKTtcbitcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHB1dF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxuK1x0XHQgKiB0aGUgY3VycmVudCBkZnJhZywgaWYgc28gdHJ5IHRvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXG4rXHRcdCAqL1xuK1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0XHRhbHJlYWR5X3JldHJhbnMgPSAhYmVmb3JlNjQobXNrLVx1MDAzZXNuZF91bmEsIGRmcmFnLVx1MDAzZWRhdGFfc2VxICtcbitcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCk7XG4rXHRcdHB1dF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuK1x0XHRpZiAoYWxyZWFkeV9yZXRyYW5zKSB7XG4rXHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbitcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0XHRcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xuK1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4rXHRcdH0gZWxzZSBpZiAoYWZ0ZXI2NChtc2stXHUwMDNlc25kX3VuYSwgcmV0cmFuc19zZXEpKSB7XG4rXHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbitcdFx0fVxuK1x0XHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4rXG4rXHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4rXHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4rXHRcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1xuK1x0XHRyZXRyYW5zX3NlcSArPSBsZW47XG4rXHRcdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbitcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4rXHRcdFx0XHRcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbitcbitcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4rXHRcdHNlbnRfc2VxID0gZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4rXHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4rXHRcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgc2VudF9zZXEpO1xuK1xuK1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4rXHRcdCAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cdTAwM2VkYXRhX2xlbikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGRmcmFnID0gbGlzdF9pc19sYXN0KFx1MDAyNmRmcmFnLVx1MDAzZWxpc3QsIFx1MDAyNm1zay1cdTAwM2VydHhfcXVldWUpID9cbitcdFx0XHRcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xuK1x0XHRpZiAoIWRmcmFnKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0LyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi9cbitcdGlmICghbmVlZF9yZXRyYW5zKSB7XG4rY2hlY2tfZGF0YV9maW46XG4rXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbitcdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4rXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgKyAxKTtcbitcdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbitcdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuK1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0fVxuIFxuIHJlc2V0X3RpbWVyOlxuIFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcbkBAIC0zNjcwLDEyICszNzg3LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdGZvciAoOzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IChtc2stXHUwMDNlY2JfZmxhZ3MgXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcbiBcdFx0Ym9vbCBzcG9vbF9ibDtcbi1cdFx0dTMyIG1vdmVkO1xuIFxuIFx0XHRzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCBcdTAwMjZza2JzKTtcbiBcdFx0aWYgKCFmbGFncyBcdTAwMjZcdTAwMjYgIXNwb29sX2JsKVxuQEAgLTM3MDgsOSArMzgyNSw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spO1xuLVx0XHRpZiAoc3Bvb2xfYmwpXG4tXHRcdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRpZiAobW92ZWQpXG4rXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXG4gXHRpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCBcdTAwMjZtc2stXHUwMDNlY2JfZmxhZ3MpKVxuIFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6MzAuODQ2MDYyNzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTkyMTg3NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBSZXRyYW5zbWlzc2lvbiBJbXByb3ZlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBoaXR0aW5nIHRoZSBNUFRDUCBpbXBsZW1lbnRhdGlvbi4gSXQncyB0b3VjaGluZyBgbmV0L21wdGNwL21pYi5jYCwgYG1pYi5oYCwgYG9wdGlvbnMuY2AsIGFuZCBgcHJvdG9jb2wuY2AuIExvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBzb21lIFNOTVAgTUlCIGNvdW50ZXJzIGZvciBNUFRDUCAtIEJhY2tsb2dEcm9wLCBSY3ZQcnVuZWQsIGFuZCBPRk9QcnVuZWQsIHdoaWNoIGlzIGdvb2QgZm9yIG1vbml0b3JpbmcuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgbWFuYWdpbmcgbWVtb3J5IGxpbWl0cyBhbmQgaW1wcm92aW5nIHJldHJhbnNtaXNzaW9uLlxuXG5UaGV5J3ZlIG1hZGUgc29tZSBrZXkgbW9kaWZpY2F0aW9ucy4gVGhlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBmdW5jdGlvbiBpcyBtb2RpZmllZCB0byBjaGVjayBgbXB0Y3Bfb3Zlcl9saW1pdGAuIEFsc28gYWRkZWQgYXJlIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIGFuZCB0aGUgYF9fbXB0Y3BfbW92ZV9za2JgIGZ1bmN0aW9ucyB0byBoYW5kbGUgcHJ1bmluZyB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbWVtb3J5IGdvZXMgb3ZlciB0aGUgZGVmaW5lZCBsaW1pdC4gVGhlIGBfX21wdGNwX2FkZF9iYWNrbG9nYCBpcyB1cGRhdGVkIHRvIGRyb3AgcGFja2V0cyB3aGVuIHRoZSBiYWNrbG9nIGV4Y2VlZHMgdGhlIGxpbWl0LiBJbXBvcnRhbnRseSwgYF9fbXB0Y3BfcmV0cmFuc2AgaGFzIGJlZW4gY2hhbmdlZCB0byBwdXNoIHJldHJhbnNtaXNzaW9ucyBjb3JyZWN0bHkuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbi11cCBvZiBzb21lIGltcG9ydGFudCBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGluIE1QVENQLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBoYW5kbGVzIHRoZSBtZW1vcnkgbGltaXRzLCBib3RoIHBydW5pbmcgYW5kIGRyb3BwaW5nLCBhbmQgbG9va3MgbGlrZSBpdCBmaXhlcyBzb21lIHJldHJhbnNtaXNzaW9uIGlzc3Vlcy4gR2l2ZW4gdGhlIGNoYW5nZXMgdG8gY3JpdGljYWwgbG9naWMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgc29saWQgZnV6emluZyBlZmZvcnQgdG8gaWRlbnRpZnkgdGhlIHNpZGUgZWZmZWN0cyBvZiBtZW1vcnkgbGltaXQgaGFuZGxpbmcuXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIFRoZSBjaGFuZ2VkL2FkZGVkIGZ1bmN0aW9ucyBhcmUgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJIHNlZSBgbXB0Y3Bfb3Zlcl9saW1pdGAgKHN0YXRpYyksIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCAobm9uLXN0YXRpYyksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIChzdGF0aWMpLCBgX19tcHRjcF9tb3ZlX3NrYmAgKHN0YXRpYyksIGBfX21wdGNwX2FkZF9iYWNrbG9nYCAoc3RhdGljKSwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgKHN0YXRpYyksIGBfX21wdGNwX2NsZWFuX3VuYV93YWtldXBgIChzdGF0aWMpLCBgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2dgIChzdGF0aWMpLCBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKSwgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCAoc3RhdGljKSwgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYykgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKS5cblxuV2FpdCwgaGFuZyBvbi4uLiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgbm9uLXN0YXRpYz8gT2theSwgdGhhdCdzIHBvdGVudGlhbGx5IGFuIGVudHJ5IHBvaW50LiBUaGUgc3RhdGljIG9uZXMgYXJlIHdoZXJlIHRoZSBjb3JlIGNoYW5nZXMgYXJlLCBidXQgdGhhdCBub24tc3RhdGljIG9uZSBpcyBjcnVjaWFsIHRvIHNlZSBob3cgaXQncyBpbnZva2VkLiBXZSBjYW4ndCBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGFjdC5cblxuTGV0J3MgY2hlY2sgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxpbmcgdGhlIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBsaW1pdCBjaGVja3MgYXJlIGJlaW5nIHRyaWdnZXJlZC4gSWYgdGhlcmUgaXMgYSBub24tc3RhdGljIGVudHJ5IHBvaW50LCB3ZSBoYXZlIGEgY2FuZGlkYXRlIGZvciBmb2N1c2VkIHRlc3RpbmcuIGBfX21wdGNwX3JldHJhbnNgLCBpcyBjYWxsZWQgYnkgYG1wdGNwX3dvcmtlcmAgb3Igc2ltaWxhcj8gTGV0J3MgdmVyaWZ5IHRoYXQuIFRoaXMgbmVlZHMgc29tZSBkZWRpY2F0ZWQgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6MzguODM4MjUyNzk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY1MjE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX3JldHJhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDYzPXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA4NC1cXHRcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZSA9IDE7XFxubmV0L21wdGNwL3BtLmM6MTA4NTpcXHRcXHRcXHRcXHRfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY2LVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjgzNT1zdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTc6c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDgtXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTQ5OlxcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NTAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTA2PXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTQzLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFxcdTAwMjZtc2stXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTQ0OlxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0NS1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3ODY9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE4LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODE5OlxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyMC1cXHRcXHRpZiAoc3Bvb2xfYmwgXFx1MDAyNlxcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MDg9dm9pZCBfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMi12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0MzozOC45NDk5MTI2NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE4NzU3OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNUFRDUCBSZXRyYW5zbWlzc2lvbiBhbmQgQmFja2xvZyBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvZGUgYWdhaW4sIHNwZWNpZmljYWxseSBhcm91bmQgcmV0cmFuc21pc3Npb25zIGFuZCBiYWNrbG9nIG1hbmFnZW1lbnQuIEkndmUgbm90aWNlZCB0aGF0IGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgYm90aCBjYWxsIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgX19tcHRjcF9yZXRyYW5zYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGNvcmUgcmV0cmFuc21pc3Npb24gbG9naWMgc2VlbXMgdG8gcmVzaWRlLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgd29ya2VyIHRocmVhZHMgZGVhbGluZyB3aXRoIHJldHJhbnNtaXNzaW9ucy5cblxuVGhlbiwgdGhlcmUncyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHdoaWNoIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIHRoZSBNUFRDUCBtb2R1bGUgaXRzZWxmLCBhbmQgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBwb2ludCBvZiBpbnRlcmVzdCwgY291bGQgYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgYmVpbmcgdXNlZCBsYXRlci5cblxuTXkgbWFpbiBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGJhY2tsb2csIGFuZCBob3cgaXQncyBoYW5kbGVkLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgZnJvbSB0aGVyZSBhbmQgZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueXRoaW5nIHVudXN1YWwgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaGFwcGVuaW5nLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBiYWNrbG9nIGFkZGl0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByZXRyYW5zbWlzc2lvbiBwcm9jZXNzIEkgd2FzIGxvb2tpbmcgYXQgZWFybGllci4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0Mzo0Mi41Njg2NzM4NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2MTM5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9hZGRfYmFja2xvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTcxNj1zdGF0aWMgdm9pZCBtcHRjcF9kc3NfY29ycnVwdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzIzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcyNDpzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXFx0XFx0XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNC1cXHRcXHRcXHR9IGVsc2Uge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcXHRcXHRcXHRcXHRfX21wdGNwX2FkZF9iYWNrbG9nKHNrLCBzdWJmbG93LCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNi1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQzOjQyLjY0MzI5MjQ4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjQ5MDAzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGZsb3csIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIE1QVENQIFNLQiBNb3ZlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgY2FsbGluZyBgX19tcHRjcF9hZGRfYmFja2xvZ2AuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgaGVyZS4gSSB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIGludGVudCBvZiBtb3ZpbmcgU0tCcyAoU29ja2V0IEJ1ZmZlcikgYmV0d2VlbiBzdWJmbG93cywgYW5kIGFkZGluZyB0aGVtIHRvIGEgYmFja2xvZyBtYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoYXQgY29udGV4dC4gQnV0IG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQgdHJpZ2dlcnMgdGhpcyB3aG9sZSBzZXF1ZW5jZT8qIFdobydzIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbSwgYSBmYWlsb3ZlciBwcm9jZWR1cmUsIGEgcmUtZXN0YWJsaXNobWVudCBvZiBhIHN1YmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IHRoYXQgdXBzdHJlYW0gY29udGV4dCwgdGhpcyBpcyBqdXN0IGEgc2luZ2xlIGxpbmsgaW4gYSBtdWNoIGxhcmdlciBjaGFpbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF04oCZcyBhY3R1YWxseSBoYXBwZW5pbmcuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQzOjQ2LjMwODE5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MTk3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9NzI0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzc2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc3NzpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTQxPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0NS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NDY6XFx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0Ny1cXHRfX21wdGNwX29mb19xdWV1ZShtc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTg3PXZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA1LVxcdH0gZWxzZSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNjpcXHRcXHRfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIGZhbHNlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA3LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NDYuMzgwOTIxMDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NjM3NzgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk1QVENQIENvZGUgUmV2aWV3IENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGZ1bmN0aW9uIHNjb3BlIGFuZCBob3cgaXQncyB1c2VkLiBUaGUgYG1wdGNwX2RhdGFfcmVhZHlgIGZ1bmN0aW9uIGlzbid0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCB3aGljaCBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBmb3IgcG90ZW50aWFsIHNjb3BlIGltcGxpY2F0aW9ucy4gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd29ydGggbm90aW5nLiBOb3csIHRoZSBgbXB0Y3Bfd29ya2VyYCBmdW5jdGlvbiAqaXMqIHN0YXRpYywgYnV0IGl0J3MgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIHRoZSBzdGF0aWMga2V5d29yZCBpcyBwcm9iYWJseSBsZXNzIGNyaXRpY2FsIHRoZXJlLCBidXQgSSdsbCBtYWtlIHN1cmUgaXQncyB1c2VkIGNvcnJlY3RseSB3aXRoaW4gaXRzIGNvbnRleHQuIFNpbWlsYXJseSwgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHN0YXRpYywgYnV0IGl0J3MgYSBzb2NrZXQgcmVsZWFzZSBjYWxsYmFjay4gSXRzIHVzYWdlIGlzIGNvbnRhaW5lZC4gVGhlIHF1ZXN0aW9uIHRoYXQganVtcHMgb3V0IGlzLCB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgbXB0Y3BfbW92ZV9za2JzYD8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uIHRvIHNlZSBpZiBpdCdzIHN0YXRpYyBvciBub3QgYW5kIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgTVBUQ1Agc3RydWN0dXJlLiBUaGlzIGlzIHNvbWV0aGluZyBJJ2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTAuMTM3MzAzMDUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDg4NTcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9tb3ZlX3NrYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcXHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVxcdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXFx0fVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjIxMD1zdGF0aWMgdm9pZCBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBjb3BpZWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjYzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIyNjQ6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRhKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyNjUte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjI4OD1zdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMDY6c3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTUtXFx0XFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMTY6XFx0XFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTctXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMzUwPXN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM5NDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KSBcXHUwMDI2XFx1MDAyNiBtcHRjcF9tb3ZlX3NrYnMoc2spKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzg2PXN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgxOS1cXHRcXHRcXHRfX21wdGNwX3JldHJhbnMoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MjA6XFx0XFx0aWYgKHNwb29sX2JsIFxcdTAwMjZcXHUwMDI2IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKSkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjEtXFx0XFx0XFx0Lyogbm90aWZ5IGFjayBzZXEgdXBkYXRlICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDc4PXN0YXRpYyBpbnQgbXB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDg4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDA4OTpcXHRcXHRpZiAobXB0Y3BfbW92ZV9za2JzKHNrKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDkwLVxcdFxcdFxcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIDApO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDQ5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1wdGNwX3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyICpvZmYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAxLVxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ1MDI6XFx0XFx0bXB0Y3BfbW92ZV9za2JzKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0Mzo1MC4yMjgxOTgxNjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNTA2OTQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBUQ1AgRGF0YSBGbG93KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTVBUQ1AgY29kZSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93LCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIGNvcmUgcHJvY2Vzc2luZyBoYXBwZW5zLiBJdCdzIGNsZWFyIHRoYXQgYG1wdGNwX21vdmVfc2tic2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQncyBjYWxsZWQgZnJvbSBzZXZlcmFsIHBsYWNlczogYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3BfaW9jdGxgLCBhbmQgYG1wdGNwX3JlY3Zfc2tiYC4gVGhlcmVmb3JlLCB0aG9zZSB0aHJlZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3Iga2V5IGZvY3VzIHBvaW50cyBpbiBteSBhbmFseXNpcy5cblxuQmV5b25kIHRob3NlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgb3RoZXIgbWFpbiBlbnRyeSBwb2ludHMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGFzIGxpa2VseSBjYW5kaWRhdGVzLCBidXQgSSBoYXZlIGEgZmV3IG90aGVyIHBvdGVudGlhbCBwb2ludHMgdG8gbG9vayBhdC5cblxuSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgYF9fbXB0Y3BfcmV0cmFuc2AuIEl0J3MgY2FsbGVkIGJ5IGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEFoLCBgbXB0Y3Bfd29ya2VyYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjayBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGEgc29ja2V0IHJlbGVhc2UgY2FsbGJhY2suIEkgaW5pdGlhbGx5IGRpc21pc3NlZCB0aGVtLCBidXQgbm93IEknbSByZWNvbnNpZGVyaW5nLlxuXG5JJ2xsIHN0YXJ0IHdpdGggZm9jdXNpbmcgb24gYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAgYW5kIGBtcHRjcF9yZWN2bXNnYC5cblxuV2FpdCwgd2FpdC4uLiBoYW5nIG9uLiBgbXB0Y3Bfd29ya2VyYCBpcyAqc3RhdGljKiwgYnV0IGl0J3MgdGhlIG1haW4gd29ya2VyIGZvciBNUFRDUCwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0ICp0cmlnZ2VycyogcmV0cmFuc21pc3Npb25zPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBTbywgYG1wdGNwX3dvcmtlcmAgaXMgcmVnaXN0ZXJlZCBhcyBhIHdvcmtxdWV1ZSBpdGVtLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHJlZ2lzdGVyZWQgYXMgdGhlIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXJlbGVhc2VfY2JgLiBSaWdodC4gT2theS4gVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNUFRDUCBhbmQgc2VlIGlmIHRob3NlIG9mZmVyIGFueSBpbnNpZ2h0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxOTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTUuNzUzMjcwMTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTUyNDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0Mzo1NS44MjQ4MDA5MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNTc2MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGVzdGFibGlzaCB0aGF0IGFzIHRoZSBwcmltYXJ5IGFyZWEgb2YgZm9jdXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgZGl2aW5nIGludG8gZGV0YWlscywgaXMgdG8gcXVpY2tseSBydWxlIG91dCBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgb3IgaWYgdGhlcmUgYXJlIG90aGVycyB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGgsIG9yIGluZmx1ZW5jZSwgdGhlIGBNUFRDUGAgc2V0dXAuIFRoZSBwcmlvcml0eSBpcyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgc28gbGV0J3Mgc3RhcnQgd2l0aCBhIHByZWxpbWluYXJ5IHN3ZWVwIHRvIGNoZWNrIGZvciBhbnkgYWRqYWNlbnQgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTkuNzYwNTY2OTQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTkuNzYyNzY1NzM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNDA2MjMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgQ2hhbmdlczogRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBjb25maWdzIHRoYXQgYXJlIHJlbGV2YW50IGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IGFyZSBub3cgaGFuZGxpbmcgbWVtb3J5IGxpbWl0cyBhbmQgcmV0cmFuc21pc3Npb24gaW1wcm92ZW1lbnRzLCB0byBlbnN1cmUgdGhleSdyZSByb2J1c3QgYW5kIGRvbid0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMuXG5cbkluaXRpYWxseSwgSSB3YXMgZ29pbmcgdG8gYXZvaWQgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBiZWNhdXNlIHRoZXkncmUgc3RhdGljLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhlIGd1aWRhbmNlIHRvIHByZWZlciBub24tc3RhdGljIGVudHJ5IHBvaW50cyAqdW5sZXNzKiB0aGV5IGFyZSBub3QgaW5saW5lZC4gSW4gdGhpcyBjYXNlLCBgbXB0Y3Bfd29ya2VyYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBJTklUX1dPUktgLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGFzc2lnbmVkIHRvIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXJlbGVhc2VfY2JgLCBzbyB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIHRoZW0uIFNvIEkgKndpbGwqIGluY2x1ZGUgdGhlbS5cblxuU28sIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gdGhlc2UgY3JpdGljYWwgYXJlYXM6XG5cbiogICBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2A6IFRoaXMgaGFuZGxlcyBpbmNvbWluZyBvcHRpb25zIGFuZCwgY3J1Y2lhbGx5LCBjaGVja3MgaWYgd2UncmUgb3ZlciB0aGUgbWVtb3J5IGxpbWl0LCB0aGVuIGNhbGxzIGBtcHRjcF9vdmVyX2xpbWl0YC4gVGhpcyBpcyBhIGNsZWFyIHBvaW50IHdoZXJlIG1lbW9yeSBsaW1pdHMgYXJlIGVuZm9yY2VkLlxuKiAgIGBtcHRjcF9kYXRhX3JlYWR5YDogRGVhbHMgd2l0aCBzdWJmbG93IGRhdGEgcmVhZHkgZXZlbnRzLiBXaXRoaW4gdGhpcyBmdW5jdGlvbiwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgaXMgY2FsbGVkIHdoaWNoIGluIHR1cm5zIGNhbGwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIHdoaWNoIGNhbiBkcm9wIHBhY2tldHMgaWYgdGhlIGJhY2tsb2cgaXMgZXhjZWVkZWQsIGFuZCBgX19tcHRjcF9tb3ZlX3NrYmBcbiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gbW92aW5nIFNLQnMuXG4qICAgYG1wdGNwX3dvcmtlcmA6IEl0IGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIGJ5IGNhbGxpbmcgYF9fbXB0Y3BfcmV0cmFuc2AsIHdoaWNoIGlzIG5vdyBwYXJ0IG9mIHRoZSBtZW1vcnkgbGltaXQgaGFuZGxpbmcgbG9naWMsIGFuZCBhIGNyaXRpY2FsIGFyZWEuXG4qICAgYG1wdGNwX3JlbGVhc2VfY2JgOiBBbHNvIGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIGJ5IGNhbGxpbmcgYF9fbXB0Y3BfcmV0cmFuc2AgYW5kIHBvdGVudGlhbGx5IGBfX21wdGNwX21vdmVfc2tic2AuXG5cblRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcywgZGVhbGluZyB3aXRoIG1lbW9yeSBsaW1pdHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBjb3VsZCBpbnRyb2R1Y2UgYWxsIHNvcnRzIG9mIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhvc2Ugc2VjdGlvbnMsIGJlY2F1c2UgbWVtb3J5IHByZXNzdXJlIGNhbiBleHBvc2Ugc3VidGxlIGJ1Z3MgbGlrZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbG9naWMgZXJyb3JzIGluIHRoZSBjb2RlLiBJIHdpbGwgaW5jbHVkZSB0aGVzZSBpbiB0aGUgZnV6emluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDowOS4xMDMzOTMyMzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzcwNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz05NjE9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4Ni1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5ODc6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODgte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTU2PXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05NjAtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6OTYxOnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2Mi1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDY9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUzMC1cXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MzE6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MzItXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4NzQ9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xODg1LVxcdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODY6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODctXFx0ZWxzZSBpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2VycikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjA5LjE4Nzc2OTE0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYzMTU3NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIEF1ZGl0IG9mIE1QVENQIERhdGEgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgZGF0YSBmbG93IGhlcmUuIFRoZSBrZXkgaXMgdGhhdCBgbXB0Y3BfZGF0YV9yZWFkeWAgKmlzbid0KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQsIGdpdmVuIGhvdyBpdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIG11bHRpLXBhdGggVENQIGNvbnRleHQuIEkndmUgbm90ZWQgdGhhdCBpdCdzIGJlaW5nIGludm9rZWQgZnJvbSBib3RoIGBzdWJmbG93X2RhdGFfcmVhZHlgIGFuZCBgc3ViZmxvd19zdGF0ZV9jaGFuZ2VgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGNhbiBub3cgYmUgc3VyZSBhYm91dCB0aGlzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNpcmN1bXN0YW5jZXMgb2YgdGhlc2UgY2FsbHMuXG5cbldpdGggdGhhdCBjb25maXJtZWQsIEknbSBzaGlmdGluZyBteSBmb2N1cyB0byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIGNhdXNpbmcgdGhpcywgYW5kIGhvdyB0aGUgbXVsdGktcGF0aCBUQ1AgaGVhZGVyIGlzIHBhcnNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDoxMi4yNTA5Mjk0MzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjI5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jPTEwNTM9c3RhdGljIHZvaWQgYWNrX3VwZGF0ZV9tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA3OC1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEwNzk6XFx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA4MC1cXHRpZiAoYWZ0ZXI2NChtc2stXFx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMTMwPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTU4LSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE2MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjEyLjMzNDU2NTI3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUwNzA5MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVyIG9mIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBcIldobydzIGFjdHVhbGx5IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXMgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGZ1bmN0aW9uP1wiIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1cHN0cmVhbSBjb2RlIHBhdGgsIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgZGF0YSBpdCdzIHN1cHBvc2VkIHRvIGhhbmRsZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLCBkYXRhIHRyYW5zbWlzc2lvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGxlciBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjE0Ljg4NTI3ODU4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNjQwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz00ODg0PXZvaWQgdGNwX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTAtXFx0LyogbXB0Y3AgY2FuJ3QgdGVsbCB1cyB0byBpZ25vcmUgcmVzZXQgcGt0cyxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODkxOlxcdCAqIHNvIGp1c3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTItXFx0ICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5My1cXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTQ6XFx0XFx0bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODk1LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTYwNz1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE2LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU2MTc6XFx0aWYgKHNrX2lzX21wdGNwKHNrKSBcXHUwMDI2XFx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTgtXFx0XFx0X19rZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTI9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczNzktXFx0XFx0XFx0ICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzM4MDpcXHRcXHRcXHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFxcdTAwMjZcXHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczODEtXFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMDUzPXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwNzgtXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMDc5OlxcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwODAtXFx0aWYgKGFmdGVyNjQobXNrLVxcdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTEzMD1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1OC0gKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDoxNS4wNDU5MjQxNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjU0MzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqTVBUQ1AgQ29kZSBFeHBsb3JhdGlvbjogSW5pdGlhbCBGb2N1cyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgY2FsbGVkIHdpdGhpbiBgdGNwX2lucHV0LmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBBbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgcGxheWVycyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE11bHRpcGF0aCBUQ1Agb3B0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIGluY29taW5nLiBUaGUgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYXJlOlxuXG4qICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChvYnZpb3VzbHksIHRoYXQncyB3aGVyZSB3ZSBzdGFydGVkKVxuKiAgIGBtcHRjcF9kYXRhX3JlYWR5YCAoY3JpdGljYWwsIGhvdydzIGRhdGEgc2lnbmFsbGVkPylcbiogICBgbXB0Y3BfcmVjdm1zZ2AgKGhvdyBhcmUgbWVzc2FnZXMgcHJvY2Vzc2VkIG9uIHRoZSByZWNlaXZpbmcgZW5kPylcbiogICBgbXB0Y3Bfd29ya2VyYCAoc2VlbXMgbGlrZSBhIHdvcmtlciBmdW5jdGlvbiBvciB0aHJlYWQpXG4qICAgYG1wdGNwX3JlbGVhc2VfY2JgIChjYWxsYmFjayBmb3IgcmVsZWFzaW5nIHJlc291cmNlcywgbWF5YmU/KS5cblxuSG1tLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBgbXB0Y3Bfd29ya2VyYC4gSSB3b25kZXIgaWYgdGhhdCdzIHRoZSBjYW5vbmljYWwgbmFtZSB1c2VkIGluIHRoZSBjb2RlIG9yIHBlcmhhcHMgaXQgdXNlcyBhbm90aGVyIG5hbWUgZm9yIGl0cyB3b3JrIGZ1bmN0aW9uLiBUaW1lIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgzOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjE4Ljc3MjQ3MTAwM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwNzM1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfd29ya2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MTA3Mz1ib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDc4OlxcdC8qIEdldCBhIHJlZmVyZW5jZSBvbiB0aGlzIHNvY2tldCwgbXB0Y3Bfd29ya2VyKCkgd2lsbCByZWxlYXNlIGl0Llxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzk6XFx0ICogQXMgbXB0Y3Bfd29ya2VyKCkgbWlnaHQgY29tcGxldGUgYmVmb3JlIHVzLCB3ZSBjYW4gbm90IGF2b2lkXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4MC1cXHQgKiBhIHNvY2tfaG9sZCgpL3NvY2tfcHV0KCkgaWYgc2NoZWR1bGVfd29yaygpIHJldHVybnMgZmFsc2UuXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTAtXFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgc29ja19mbGFnKHNzaywgU09DS19ERUFEKSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjUxOlxcdFxcdC8qIGVuc3VyZSBsYXRlciBjaGVjayBpbiBtcHRjcF93b3JrZXIoKSB3aWxsIGRpc3Bvc2UgdGhlIG1zayAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTItXFx0XFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3ODI9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4MjM6XFx0LyogdGhlIGNhbGxpbmcgbXB0Y3Bfd29ya2VyIHdpbGwgcHJvcGVybHkgZGVzdHJveSB0aGUgc29ja2V0ICovXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyNC1cXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA3MD1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTA2OnN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNy17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTU1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjItXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTYzOlxcdElOSVRfV09SSyhcXHUwMDI2bXNrLVxcdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjQtXFx0bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDoxOC44NTA1NTEzMDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3ODI1NDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBNZW1vcnkgUHJlc3N1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbm5lZCBkb3duIGBtcHRjcF93b3JrZXJgIGFzIHRoZSBrZXkgd29ya3F1ZXVlIGZ1bmN0aW9uIGhlcmUuIEV4Y2VsbGVudC4gTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGNvcmUgc3ltYm9sczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYG1wdGNwX3dvcmtlcmAsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoaW4gTVBUQ1AuXG5cblRoZSBzeXN0ZW0gY29uZmlncyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggYXJlIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4gTWFrZXMgc2Vuc2UsIHBhcnRpY3VsYXJseSB0aGUgbGF0dGVyLCBhcyBJUHY2IGNhbiBpbnRyb2R1Y2UgaXRzIG93biB1bmlxdWUgbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gaXMgaGFuZGxpbmcgbWVtb3J5IGxpbWl0czsgc3BlY2lmaWNhbGx5LCBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIGJhY2tsb2cgcGFja2V0cyB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBBbmQgdGhlcmUgaXMgYSBmaXggZm9yIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCB3aWxsIG5vdyBwcm9wZXJseSBwdXNoIHJldHJhbnNtaXNzaW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHJlcXVpcmVzIHJpZ29yb3VzIHRlc3RpbmcuIFRoZSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbG9naWMgZXJyb3JzIHRoYXQgY291bGQgbWFuaWZlc3QgdW5kZXIgaGlnaCBtZW1vcnkgcHJlc3N1cmUuIEkgbmVlZCB0byBkZXNpZ24gZnV6emluZyB0ZXN0cyB0aGF0IGFnZ3Jlc3NpdmVseSBleHBsb3JlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLlxuXG5SaWdodCwgdGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg2MCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDQ6MjQuMDI4ODA4MjA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjU1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3dvcmtlclwiLFxuICAgIFwibXB0Y3BfcmVsZWFzZV9jYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gICAgXCJtcHRjcF9yZWN2bXNnXCIsXG4gICAgXCJtcHRjcF93b3JrZXJcIixcbiAgICBcIm1wdGNwX3JlbGVhc2VfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMgYnkgcHJ1bmluZyB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGFuZCBkcm9wcGluZyBwYWNrZXRzIGZyb20gdGhlIGJhY2tsb2cgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBJdCBhbHNvIGZpeGVzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBwcm9wZXJseSBwdXNoIHJldHJhbnNtaXNzaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGJ1Z3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 22:42:05 +0000 UTC FinishedAt: 2026-08-01 22:44:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "2eb7db41-7dd9-4429-a6d4-688094e67f7a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_incoming_options", "mptcp_data_ready", "mptcp_recvmsg", "mptcp_worker", "mptcp_release_cb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgICAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF93b3JrZXImIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVsZWFzZV9jYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMgYnkgcHJ1bmluZyB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGFuZCBkcm9wcGluZyBwYWNrZXRzIGZyb20gdGhlIGJhY2tsb2cgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBJdCBhbHNvIGZpeGVzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBwcm9wZXJseSBwdXNoIHJldHJhbnNtaXNzaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBidWdzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzMjI2ZjZmYzFkNDA2ZDNjZjE0ZjZmN2Q2OWFjOGVkNzhiMTYxYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjQzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jXG5AQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RmFsbGJhY2tGYWlsZWRcJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1dpblByb2JlXCYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7QmFja2xvZ0Ryb3BcJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtSY3ZQcnVuZWRcJiMzNDssIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7T0ZPUHJ1bmVkXCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcbiB9O1xuIFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcbmluZGV4IDgxMjIxOGI1ZWQyYmYuLjNhMzQyNWUyNThhNzYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgJiM0Mzs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG4mIzQzO1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4mIzQzO1x0TVBUQ1BfTUlCX1JDVlBSVU5FRCxcdFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzICovXG4mIzQzO1x0TVBUQ1BfTUlCX09GT1BSVU5FRCxcdFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xuIFx0X19NUFRDUF9NSUJfTUFYXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggYzY2NDAyM2QzN2JhOC4uNTY0MjI3N2M4YjNkMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTI3LDggJiM0MzsxMTI3LDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1xuJiM0MztcdG1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbik7XG4mIzQzO1x0aWYgKGxpa2VseShtZW0gXHUwMDNjPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIHNpbGVudGx5IGRyb3BwaW5nIHB1cmUgYWNrcywgZmluIG9yIGFscmVhZHktYWNrZWQgc2VnbWVudHMuICovXG4mIzQzO1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbiYjNDM7XHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjYgVENQSERSX0ZJTiB8fFxuJiM0MztcdCAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVx1MDAzZXJjdl9ueHQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cbiYjNDM7XHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4mIzQzO1x0aW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7XG4mIzQzO1xuJiM0MztcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuJiM0MztcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXG4gICovXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtMTE1NCw3ICYjNDM7MTE4MCw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjY4YzlkOTUyZDFkM2QgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNzMsNiAmIzQzOzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuIFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gfVxuIFxuJiM0MzsvKiBcJiMzNDtJbnNwaXJlZFwmIzM0OyBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXG4mIzQzOyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4mIzQzO1x0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcbiYjNDM7XHR1NjQgbWVtO1xuJiM0MztcbiYjNDM7XHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRub2RlID0gXHUwMDI2bXNrLVx1MDAzZW9vb19sYXN0X3NrYi1cdTAwM2VyYm5vZGU7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7XG4mIzQzO1xuJiM0MztcdFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlcSwgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHBydW5lZCA9IHRydWU7XG4mIzQzO1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbiYjNDM7XHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4mIzQzO1xuJiM0MztcdFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRub2RlID0gcHJldjtcbiYjNDM7XHR9IHdoaWxlIChub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBydW5lZClcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuJiM0MztcdHJldHVybiBtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0dTY0IGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG5AQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xuIFxuJiM0MztcdC8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW1cbiYjNDM7XHQgKiB3aWxsIGJyZWFrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpIHtcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgPT0gbXNrLVx1MDAzZWFja19zZXEpIHtcbiBcdFx0LyogaW4gc2VxdWVuY2UgKi9cbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjtcbkBAIC02NzUsNiAmIzQzOzcyOSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNvY2sgKnNzayA9IHNrYi1cdTAwM2VzaztcbiBcdGJvb2wgZnJhZ3N0b2xlbjtcbiYjNDM7XHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4Miw2ICYjNDM7NzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXG4mIzQzO1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XHRsaW1pdCAmIzQzOz0gKGxpbWl0IFx1MDAzZVx1MDAzZSAxKSAmIzQzOyA2NCAqIDEwMjQ7XG4mIzQzO1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2ViYWNrbG9nX2xlbiBcdTAwM2UgbGltaXQgXHUwMDI2XHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjNDM7XHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzUzLDcgJiM0Mzs4MTgsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcbiBcdFx0XHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xuIFxuLVx0XHRcdGlmIChvd25fbXNrIFx1MDAyNlx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuJiM0MztcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTM2LDEzICYjNDM7MTIwMSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIwOSwxMiAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdFxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdGJvb2wgbW92ZWQgPSBmYWxzZTtcbiBcbi1cdCpkZWx0YSA9IDA7XG4gXHR3aGlsZSAoMSkge1xuLVx0XHQvKiBJZiB0aGUgbXNrIHJlY3ZidWYgaXMgZnVsbCBzdG9wLCBkb24mIzM5O3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgJiM0Mzs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQyLDkgJiM0MzsyMjk1LDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXHUwMDNlYmFja2xvZ191bmFjY291bnRlZCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTtcbiBcbi1cdC8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjUyLDIwICYjNDM7MjMwMywxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuLXtcbi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4tXG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuLVx0bGlzdF9zcGxpY2Uoc2ticywgXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4ge1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG4gXG4gXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI3ODUsNDQgJiM0MzsyODI4LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7LypcbiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcbiYjNDM7ICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXG4mIzQzO1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwmIzM0O3N0YWxlXCYjMzQ7IGxvZ2ljICovXG4tXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuLVx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4tXHRpZiAoIWRmcmFnKSB7XG4tXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4tXG4tXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0aW50IHJldCwgbGVuID0gMDtcbiBcbiBcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2VzY2hlZHVsZWQpKSB7XG4mIzQzO1x0XHRcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRcdHUxNiBjb3BpZWQgPSAwO1xuIFxuIFx0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XG5AQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbiYjNDM7XHRcdFx0aW5mby5zZW50ID0gb2Zmc2V0O1xuIFx0XHRcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cdTAwM2VkYXRhX2xlbiA6XG4gXHRcdFx0XHRcdFx0XHRcdCAgICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQ7XG4gXG5AQCAtMjg0Nyw3ICYjNDM7Mjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICAgICFtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VmYWxsYmFja19sb2NrKTtcbiBcdFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuLVx0XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3MCwxMyAmIzQzOzI4OTEsMTA5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuJiM0MztcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuJiM0MztcdGJvb2wgbmVlZF9yZXRyYW5zO1xuJiM0MztcdHU2NCByZXRyYW5zX3NlcTtcbiYjNDM7XHRpbnQgZXJyLCBsZW47XG4gXG4tXHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuLVx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcbiYjNDM7XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4mIzQzO1x0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbiYjNDM7XHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuJiM0MztcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbiYjNDM7XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0Z290byBjaGVja19kYXRhX2ZpbjtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLVx1MDAzZWRhdGFfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4tXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0Ym9vbCBhbHJlYWR5X3JldHJhbnM7XG4mIzQzO1x0XHR1NjQgc2VudF9zZXE7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayBcJiMzNDtzdGFsZVwmIzM0OyBsb2dpYywgdGhhdCBpblxuJiM0MztcdFx0ICogdHVybiBjYW4gcHJvY2VzcyBpbmNvbWluZyBhY2tzIGFuZCBjbGVhbiB0aGUgUlRYIHF1ZXVlO1xuJiM0MztcdFx0ICogZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGZyYWcgd2lsbCBzdGlsbCBiZSBhcm91bmRcbiYjNDM7XHRcdCAqIGFmdGVyd2FyZHMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGdldF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxuJiM0MztcdFx0ICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdFx0YWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCk7XG4mIzQzO1x0XHRwdXRfcGFnZShkZnJhZy1cdTAwM2VwYWdlKTtcbiYjNDM7XHRcdGlmIChhbHJlYWR5X3JldHJhbnMpIHtcbiYjNDM7XHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjNDM7XHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuJiM0MztcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4mIzQzO1x0XHQgKiAgcXVldWUgZHVlIHRvIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4mIzQzO1x0XHRsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuJiM0MztcbiYjNDM7XHRcdHJldHJhbnNfc2VxICYjNDM7PSBsZW47XG4mIzQzO1x0XHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuJiM0MztcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmV0cmFuc19zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4mIzQzO1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4mIzQzO1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4mIzQzO1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4mIzQzO1x0XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbiYjNDM7Y2hlY2tfZGF0YV9maW46XG4mIzQzO1x0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuJiM0MztcdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbiYjNDM7XHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4mIzQzO1x0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4mIzQzO1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbiYjNDM7XHR9XG4gXG4gcmVzZXRfdGltZXI6XG4gXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xuQEAgLTM2NzAsMTIgJiM0MzszNzg3LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHUzMiBtb3ZlZCA9IDA7XG4gXG4gXHRmb3IgKDs7KSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVx1MDAzZWNiX2ZsYWdzIFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XG4gXHRcdGJvb2wgc3Bvb2xfYmw7XG4tXHRcdHUzMiBtb3ZlZDtcbiBcbiBcdFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticyk7XG4gXHRcdGlmICghZmxhZ3MgXHUwMDI2XHUwMDI2ICFzcG9vbF9ibClcbkBAIC0zNzA4LDkgJiM0MzszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4tXHRcdGlmIChzcG9vbF9ibClcbi1cdFx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbiYjNDM7XHRpZiAobW92ZWQpXG4mIzQzO1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFxuIFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXHUwMDI2bXNrLVx1MDAzZWNiX2ZsYWdzKSlcbiBcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGF0YV9yZWFkeSYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3dvcmtlciYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGJ1Z3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDMyMjZmNmZjMWQ0MDZkM2NmMTRmNmY3ZDY5YWM4ZWQ3OGIxNjFjNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMjI6NDM6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmMgYi9uZXQvbXB0Y3AvbWliLmMKaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuYwpAQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLAogCVNOTVBfTUlCX0lURU0oJiMzNDtGYWxsYmFja0ZhaWxlZCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtXaW5Qcm9iZSYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7QmFja2xvZ0Ryb3AmIzM0OywgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O1JjdlBydW5lZCYjMzQ7LCBNUFRDUF9NSUJfUkNWUFJVTkVEKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O09GT1BydW5lZCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSwKIH07CiAKIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnMKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaAppbmRleCA4MTIyMThiNWVkMmJmLi4zYTM0MjVlMjU4YTc2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvbWliLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5oCkBAIC04OCw2ICYjNDM7ODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7CiAJTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSywJLyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi8KIAlNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsCS8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqLwogCU1QVENQX01JQl9XSU5QUk9CRSwJCS8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovCiYjNDM7CU1QVENQX01JQl9CQUNLTE9HRFJPUCwJCS8qIEJhY2tsb2cgb3ZlciBtZW1vcnkgbGltaXQgKi8KJiM0MzsJTVBUQ1BfTUlCX1JDVlBSVU5FRCwJCS8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqLwomIzQzOwlNUFRDUF9NSUJfT0ZPUFJVTkVELAkJLyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqLwogCV9fTVBUQ1BfTUlCX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmMKaW5kZXggYzY2NDAyM2QzN2JhOC4uNTY0MjI3N2M4YjNkMCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC0xMTI3LDggJiM0MzsxMTI3LDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlyZXR1cm4gaG1hYyA9PSBtcF9vcHQtJmd0O2FobWFjOwogfQogCi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksCi0gKiBlbHNlIHJldHVybiB0cnVlLgomIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CiYjNDM7CW1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4pOwomIzQzOwlpZiAobGlrZWx5KG1lbSAmbHQ7PSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciBhbHJlYWR5LWFja2VkIHNlZ21lbnRzLiAqLwomIzQzOwlpZiAoVENQX1NLQl9DQihza2IpLSZndDtzZXEgPT0gVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxIHx8CiYjNDM7CSAgICBUQ1BfU0tCX0NCKHNrYiktJmd0O3RjcF9mbGFncyAmYW1wOyBUQ1BIRFJfRklOIHx8CiYjNDM7CSAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxLCB0Y3Bfc2soc3NrKS0mZ3Q7cmN2X254dCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cywgc2NoZWR1bGUgYW4gYWNrLiAqLwomIzQzOwlpbmV0X2Nzayhzc2spLSZndDtpY3NrX2Fjay5wZW5kaW5nIHw9IElDU0tfQUNLX05PTUVNIHwgSUNTS19BQ0tfTk9XOwomIzQzOwlpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTsKJiM0MzsKJiM0MzsJLyogUGxhaW4gVENQIChmYWxsYmFjaykgYW5kIHNrYiBpcyBkcm9wcGVkIGJlZm9yZSB0aGUgVENQIHJlY3YgcXVldWUuICovCiYjNDM7CU5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLAomIzQzOyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy4KICAqLwogYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTExNTQsNyAmIzQzOzExODAsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJCV9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LSZndDtjb25uKTsKIAkJbXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy0mZ3Q7Y29ubik7Ci0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctJmd0O2Nvbm4sIHNrLCBza2IpOwogCX0KIAogCW1wdGNwX2dldF9vcHRpb25zKHNrYiwgJmFtcDttcF9vcHQpOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBjYTY0NGVjNTNlZWRiLi42OGM5ZDk1MmQxZDNkIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzczLDYgJiM0MzszNzMsNDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfaW5pdF9za2Ioc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAlza2JfZHN0X2Ryb3Aoc2tiKTsKIH0KIAomIzQzOy8qICYjMzQ7SW5zcGlyZWQmIzM0OyBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQCiYjNDM7ICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2OwomIzQzOwlib29sIHBydW5lZCA9IGZhbHNlOwomIzQzOwl1NjQgbWVtOwomIzQzOwomIzQzOwlpZiAoUkJfRU1QVFlfUk9PVCgmYW1wO21zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlub2RlID0gJmFtcDttc2stJmd0O29vb19sYXN0X3NrYi0mZ3Q7cmJub2RlOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpOwomIzQzOwomIzQzOwkJLyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi8KJiM0MzsJCWlmIChhZnRlcjY0KHNlcSwgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcHJ1bmVkID0gdHJ1ZTsKJiM0MzsJCXByZXYgPSByYl9wcmV2KG5vZGUpOwomIzQzOwkJcmJfZXJhc2Uobm9kZSwgJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSk7CiYjNDM7CQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJbXNrLSZndDtvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7CiYjNDM7CiYjNDM7CQltZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTsKJiM0MzsJCWlmIChtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW5vZGUgPSBwcmV2OwomIzQzOwl9IHdoaWxlIChub2RlKTsKJiM0MzsKJiM0MzsJaWYgKHBydW5lZCkKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpOwomIzQzOwomIzQzO291dDoKJiM0MzsJbWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CXJldHVybiBtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwpAQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAltcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpOwogCiYjNDM7CS8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW0KJiM0MzsJICogd2lsbCBicmVhay4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgJmd0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpICZhbXA7JmFtcDsKJiM0MzsJICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKSB7CiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKJiM0MzsJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAlpZiAoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgPT0gbXNrLSZndDthY2tfc2VxKSB7CiAJCS8qIGluIHNlcXVlbmNlICovCiAJCW1zay0mZ3Q7Ynl0ZXNfcmVjZWl2ZWQgJiM0Mzs9IGNvcHlfbGVuOwpAQCAtNjc1LDYgJiM0Mzs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKnNzayA9IHNrYi0mZ3Q7c2s7CiAJYm9vbCBmcmFnc3RvbGVuOwomIzQzOwl1NjQgbGltaXQ7CiAJaW50IGRlbHRhOwogCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7CkBAIC02ODIsNiAmIzQzOzczNywxNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuOwogCX0KIAomIzQzOwkvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi8KJiM0MzsJbGltaXQgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWxpbWl0ICYjNDM7PSAobGltaXQgJmd0OyZndDsgMSkgJiM0MzsgNjQgKiAxMDI0OwomIzQzOwlsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTsKJiM0MzsJaWYgKG1zay0mZ3Q7YmFja2xvZ19sZW4gJmd0OyBsaW1pdCAmYW1wOyZhbXA7ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHsKJiM0MzsJCV9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQl0YWlsID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTsKQEAgLTc1Myw3ICYjNDM7ODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAkJCW1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7CiAKLQkJCWlmIChvd25fbXNrICZhbXA7JmFtcDsgc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDsgc2stJmd0O3NrX3JjdmJ1ZikgewomIzQzOwkJCWlmIChvd25fbXNrKSB7CiAJCQkJbXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpOwogCQkJCXJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpOwogCQkJfSBlbHNlIHsKQEAgLTExMzYsMTMgJiM0MzsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKIAltcHRjcF93cml0ZV9zcGFjZShzayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKQotewotCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQltcHRjcF9kYXRhX3VubG9jayhzayk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKQEAgLTIyMDksMTIgJiM0MzsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHQKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCWJvb2wgbW92ZWQgPSBmYWxzZTsKIAotCSpkZWx0YSA9IDA7CiAJd2hpbGUgKDEpIHsKLQkJLyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJiMzOTt0IGRyb3AgKi8KLQkJaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCi0JCQlicmVhazsKLQogCQlwcmVmZXRjaChza2ItJmd0O25leHQpOwogCQlsaXN0X2RlbCgmYW1wO3NrYi0mZ3Q7bGlzdCk7CiAJCSpkZWx0YSAmIzQzOz0gc2tiLSZndDt0cnVlc2l6ZTsKQEAgLTIyNDIsOSAmIzQzOzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpCiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stJmd0O2JhY2tsb2dfdW5hY2NvdW50ZWQgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc29ja2V0ICZhbXA7JmFtcDsKIAkJCSAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTsKIAotCS8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkgfHwKLQkgICAgc2tfcm1lbV9hbGxvY19nZXQoc2spICZndDsgc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKHNrYnMpOwpAQCAtMjI1MiwyMCAmIzQzOzIzMDMsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQotewotCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7Ci0KLQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7Ci0JbGlzdF9zcGxpY2Uoc2ticywgJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCk7Ci19Ci0KIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IGxpc3RfaGVhZCBza2JzOwogCWJvb2wgZW5xdWV1ZWQgPSBmYWxzZTsKLQl1MzIgbW92ZWQ7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAltcHRjcF9kYXRhX2xvY2soc2spOwogCXdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKSkgewpAQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiAJCWVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCAmYW1wO3NrYnMsICZhbXA7bW92ZWQpOwogCiAJCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAJbXB0Y3BfZGF0YV91bmxvY2soc2spOwogCiAJaWYgKGVucXVldWVkICZhbXA7JmFtcDsgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpCkBAIC0yNzg1LDQ0ICYjNDM7MjgyOCwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAlza19lcnJvcl9yZXBvcnQoc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzOy8qCiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cywKJiM0MzsgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsCiYjNDM7CQkJCXU2NCBzZW50X3NlcSkKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07CiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93OwotCXN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnOwogCXN0cnVjdCBzb2NrICpzc2s7Ci0JaW50IHJldCwgZXJyOwotCXUxNiBsZW4gPSAwOwotCi0JbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7Ci0KLQkvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMgKi8KLQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwotCWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwotCWlmICghZGZyYWcpIHsKLQkJaWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkgewotCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCi0JCQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMsCi0JCQkJICAgaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTsKLQkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwotCQkJbXB0Y3Bfc2VuZF9hY2sobXNrKTsKLQotCQkJZ290byByZXNldF90aW1lcjsKLQkJfQotCi0JCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKLQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwotCi0JCWdvdG8gcmVzZXRfdGltZXI7Ci0JfQotCi0JaWYgKGVycikKLQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJaW50IHJldCwgbGVuID0gMDsKIAogCW1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7CiAJCWlmIChSRUFEX09OQ0Uoc3ViZmxvdy0mZ3Q7c2NoZWR1bGVkKSkgewomIzQzOwkJCXUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcTsKIAkJCXUxNiBjb3BpZWQgPSAwOwogCiAJCQltcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpOwpAQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQlsb2NrX3NvY2soc3NrKTsKIAogCQkJLyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovCi0JCQlpbmZvLnNlbnQgPSAwOwomIzQzOwkJCWluZm8uc2VudCA9IG9mZnNldDsKIAkJCWluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLSZndDtjc3VtX2VuYWJsZWQpID8gZGZyYWctJmd0O2RhdGFfbGVuIDoKIAkJCQkJCQkJICAgIGRmcmFnLSZndDthbHJlYWR5X3NlbnQ7CiAKQEAgLTI4NDcsNyAmIzQzOzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQogCQkJICAgICFtc2stJmd0O2FsbG93X3N1YmZsb3dzKSB7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O2ZhbGxiYWNrX2xvY2spOwogCQkJCXJlbGVhc2Vfc29jayhzc2spOwotCQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKIAkJCXdoaWxlIChpbmZvLnNlbnQgJmx0OyBpbmZvLmxpbWl0KSB7CkBAIC0yODcwLDEzICYjNDM7Mjg5MSwxMDkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCXJlbGVhc2Vfc29jayhzc2spOwogCQl9CiAJfQomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsJc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiYjNDM7CWJvb2wgbmVlZF9yZXRyYW5zOwomIzQzOwl1NjQgcmV0cmFuc19zZXE7CiYjNDM7CWludCBlcnIsIGxlbjsKIAotCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwotCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctJmd0O2FscmVhZHlfc2VudCwgbGVuKTsKJiM0MzsJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwomIzQzOwluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CWlmICghZGZyYWcpCiYjNDM7CQlnb3RvIGNoZWNrX2RhdGFfZmluOwogCi0JLyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCi0JaWYgKGFmdGVyNjQoZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXEsIG1zay0mZ3Q7c25kX254dCkpCi0JCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWJvb2wgYWxyZWFkeV9yZXRyYW5zOwomIzQzOwkJdTY0IHNlbnRfc2VxOwomIzQzOwomIzQzOwkJLyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMsIHRoYXQgaW4KJiM0MzsJCSAqIHR1cm4gY2FuIHByb2Nlc3MgaW5jb21pbmcgYWNrcyBhbmQgY2xlYW4gdGhlIFJUWCBxdWV1ZTsKJiM0MzsJCSAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kCiYjNDM7CQkgKiBhZnRlcndhcmRzLgomIzQzOwkJICovCiYjNDM7CQlnZXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXB1dF9wYWdlKGRmcmFnLSZndDtwYWdlKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlcgomIzQzOwkJICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLgomIzQzOwkJICovCiYjNDM7CQltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwkJYWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay0mZ3Q7c25kX3VuYSwgZGZyYWctJmd0O2RhdGFfc2VxICYjNDM7CiYjNDM7CQkJCQkgICAgZGZyYWctJmd0O2FscmVhZHlfc2VudCk7CiYjNDM7CQlwdXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQlpZiAoYWxyZWFkeV9yZXRyYW5zKSB7CiYjNDM7CQkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJCQlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJCQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKJiM0MzsJCQluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwkJfSBlbHNlIGlmIChhZnRlcjY0KG1zay0mZ3Q7c25kX3VuYSwgcmV0cmFuc19zZXEpKSB7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQl9CiYjNDM7CQltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CiYjNDM7CQkvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWAomIzQzOwkJICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZGZyYWcgfHwgIWRmcmFnLSZndDthbHJlYWR5X3NlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovCiYjNDM7CQlsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTsKJiM0MzsJCWlmIChsZW4gJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwomIzQzOwkJcmV0cmFuc19zZXEgJiM0Mzs9IGxlbjsKJiM0MzsJCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwomIzQzOwkJZGZyYWctJmd0O2FscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctJmd0O2FscmVhZHlfc2VudCwKJiM0MzsJCQkJCSAgICByZXRyYW5zX3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi8KJiM0MzsJCXNlbnRfc2VxID0gZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXE7CiYjNDM7CQlpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLSZndDtzbmRfbnh0KSkKJiM0MzsJCQlXUklURV9PTkNFKG1zay0mZ3Q7c25kX254dCwgc2VudF9zZXEpOwomIzQzOwomIzQzOwkJLyogQXR0ZW1wdCB0aGUgbmV4dCBmcmFnbWVudCBvbmx5IGlmIHRoZSBjdXJyZW50IG9uZSBpcwomIzQzOwkJICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYmVmb3JlNjQocmV0cmFuc19zZXEsIGRmcmFnLSZndDtkYXRhX3NlcSAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9sZW4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZGZyYWcgPSBsaXN0X2lzX2xhc3QoJmFtcDtkZnJhZy0mZ3Q7bGlzdCwgJmFtcDttc2stJmd0O3J0eF9xdWV1ZSkgPwomIzQzOwkJCQlOVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTsKJiM0MzsJCWlmICghZGZyYWcpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi8KJiM0MzsJaWYgKCFuZWVkX3JldHJhbnMpIHsKJiM0MztjaGVja19kYXRhX2ZpbjoKJiM0MzsJCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKJiM0MzsJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiYjNDM7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAomIzQzOwkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwomIzQzOwkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwomIzQzOwkJCW1wdGNwX3NlbmRfYWNrKG1zayk7CiYjNDM7CQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJfQogCiByZXNldF90aW1lcjoKIAltcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spOwpAQCAtMzY3MCwxMiAmIzQzOzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spCiAJX19tdXN0X2hvbGQoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay0mZ3Q7Y2JfZmxhZ3MgJmFtcDsgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7CiAJCXN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzOwogCQlib29sIHNwb29sX2JsOwotCQl1MzIgbW92ZWQ7CiAKIAkJc3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKTsKIAkJaWYgKCFmbGFncyAmYW1wOyZhbXA7ICFzcG9vbF9ibCkKQEAgLTM3MDgsOSAmIzQzOzM4MjUsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAogCQljb25kX3Jlc2NoZWQoKTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2xvY2suc2xvY2spOwotCQlpZiAoc3Bvb2xfYmwpCi0JCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJaWYgKG1vdmVkKQomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgJmFtcDttc2stJmd0O2NiX2ZsYWdzKSkKIAkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBNZW1vcnkgTWFuYWdlbWVudCBhbmQgUmV0cmFuc21pc3Npb24gSW1wcm92ZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgaGl0dGluZyB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbXB0Y3AvbWliLmNgLCBgbWliLmhgLCBgb3B0aW9ucy5jYCwgYW5kIGBwcm90b2NvbC5jYC4gTG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBzb21lIFNOTVAgTUlCIGNvdW50ZXJzIGZvciBNUFRDUCAtIEJhY2tsb2dEcm9wLCBSY3ZQcnVuZWQsIGFuZCBPRk9QcnVuZWQsIHdoaWNoIGlzIGdvb2QgZm9yIG1vbml0b3JpbmcuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgbWFuYWdpbmcgbWVtb3J5IGxpbWl0cyBhbmQgaW1wcm92aW5nIHJldHJhbnNtaXNzaW9uLgoKVGhleSYjMzk7dmUgbWFkZSBzb21lIGtleSBtb2RpZmljYXRpb25zLiBUaGUgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGZ1bmN0aW9uIGlzIG1vZGlmaWVkIHRvIGNoZWNrIGBtcHRjcF9vdmVyX2xpbWl0YC4gQWxzbyBhZGRlZCBhcmUgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAgYW5kIHRoZSBgX19tcHRjcF9tb3ZlX3NrYmAgZnVuY3Rpb25zIHRvIGhhbmRsZSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBtZW1vcnkgZ29lcyBvdmVyIHRoZSBkZWZpbmVkIGxpbWl0LiBUaGUgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGlzIHVwZGF0ZWQgdG8gZHJvcCBwYWNrZXRzIHdoZW4gdGhlIGJhY2tsb2cgZXhjZWVkcyB0aGUgbGltaXQuIEltcG9ydGFudGx5LCBgX19tcHRjcF9yZXRyYW5zYCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHB1c2ggcmV0cmFuc21pc3Npb25zIGNvcnJlY3RseS4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLXVwIG9mIHNvbWUgaW1wb3J0YW50IG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgaW4gTVBUQ1AuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBoYW5kbGVzIHRoZSBtZW1vcnkgbGltaXRzLCBib3RoIHBydW5pbmcgYW5kIGRyb3BwaW5nLCBhbmQgbG9va3MgbGlrZSBpdCBmaXhlcyBzb21lIHJldHJhbnNtaXNzaW9uIGlzc3Vlcy4gR2l2ZW4gdGhlIGNoYW5nZXMgdG8gY3JpdGljYWwgbG9naWMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgc29saWQgZnV6emluZyBlZmZvcnQgdG8gaWRlbnRpZnkgdGhlIHNpZGUgZWZmZWN0cyBvZiBtZW1vcnkgbGltaXQgaGFuZGxpbmcuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGNoYW5nZWQvYWRkZWQgZnVuY3Rpb25zIGFyZSB0aGUgcGxhY2UgdG8gc3RhcnQuIEkgc2VlIGBtcHRjcF9vdmVyX2xpbWl0YCAoc3RhdGljKSwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChub24tc3RhdGljKSwgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAgKHN0YXRpYyksIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKSwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIChzdGF0aWMpLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCAoc3RhdGljKSwgYF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cGAgKHN0YXRpYyksIGBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZ2AgKHN0YXRpYyksIGBtcHRjcF9tb3ZlX3NrYnNgIChzdGF0aWMpLCBgX19tcHRjcF9wdXNoX3JldHJhbnNgIChzdGF0aWMpLCBgX19tcHRjcF9yZXRyYW5zYCAoc3RhdGljKSBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIChzdGF0aWMpLgoKV2FpdCwgaGFuZyBvbi4uLiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgbm9uLXN0YXRpYz8gT2theSwgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSBhbiBlbnRyeSBwb2ludC4gVGhlIHN0YXRpYyBvbmVzIGFyZSB3aGVyZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSwgYnV0IHRoYXQgbm9uLXN0YXRpYyBvbmUgaXMgY3J1Y2lhbCB0byBzZWUgaG93IGl0JiMzOTtzIGludm9rZWQuIFdlIGNhbiYjMzk7dCBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGFjdC4KCkxldCYjMzk7cyBjaGVjayBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBzZWUgaG93IHRoZXNlIGxpbWl0IGNoZWNrcyBhcmUgYmVpbmcgdHJpZ2dlcmVkLiBJZiB0aGVyZSBpcyBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQsIHdlIGhhdmUgYSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgdGVzdGluZy4gYF9fbXB0Y3BfcmV0cmFuc2AsIGlzIGNhbGxlZCBieSBgbXB0Y3Bfd29ya2VyYCBvciBzaW1pbGFyPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIFRoaXMgbmVlZHMgc29tZSBkZWRpY2F0ZWQgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfcmV0cmFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtLmM9MTA2Mz1zdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDg0LVx0XHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZSA9IDE7XG5uZXQvbXB0Y3AvcG0uYzoxMDg1Olx0XHRcdFx0X19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzayk7XG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKG5ldCwgTVBUQ1BfTUlCX1NVQkZMT1dTVEFMRSk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MzAtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTMyLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcdG5lZWRfcHVzaCA9IChmbGFncyBcdTAwMjYgTVBUQ1BfQ0ZfUFVTSCkgXHUwMDI2XHUwMDI2IF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjY2Ni1cdGlmICghZGlzcG9zZV9pdCkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4MzU9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4OTYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODk3OnN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk4LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTQ4LVx0XHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjk0OTpcdFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTUwLVx0XHQgKi9cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTA2PXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0My1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFx1MDAyNm1zay1cdTAwM2VmbGFncykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTQ0Olx0XHRfX21wdGNwX3JldHJhbnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0NS1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzg2PXN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MTgtXHRcdGlmIChmbGFncyBcdTAwMjYgQklUKE1QVENQX1JFVFJBTlNNSVQpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzgxOTpcdFx0XHRfX21wdGNwX3JldHJhbnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyMC1cdFx0aWYgKHNwb29sX2JsIFx1MDAyNlx1MDAyNiBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpKSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9ODA4PXZvaWQgX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtODEwLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtODEyLXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgUmV0cmFuc21pc3Npb24gYW5kIEJhY2tsb2cgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvZGUgYWdhaW4sIHNwZWNpZmljYWxseSBhcm91bmQgcmV0cmFuc21pc3Npb25zIGFuZCBiYWNrbG9nIG1hbmFnZW1lbnQuIEkmIzM5O3ZlIG5vdGljZWQgdGhhdCBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGJvdGggY2FsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fbXB0Y3BfcmV0cmFuc2AsIHdoaWNoIGlzIHdoZXJlIHRoZSBjb3JlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHNlZW1zIHRvIHJlc2lkZS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHdvcmtlciB0aHJlYWRzIGRlYWxpbmcgd2l0aCByZXRyYW5zbWlzc2lvbnMuCgpUaGVuLCB0aGVyZSYjMzk7cyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHdoaWNoIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSB0aGUgTVBUQ1AgbW9kdWxlIGl0c2VsZiwgYW5kIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIHBvaW50IG9mIGludGVyZXN0LCBjb3VsZCBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgbGF0ZXIuCgpNeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgYmFja2xvZywgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGZyb20gdGhlcmUgYW5kIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBoYXBwZW5pbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBiYWNrbG9nIGFkZGl0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByZXRyYW5zbWlzc2lvbiBwcm9jZXNzIEkgd2FzIGxvb2tpbmcgYXQgZWFybGllci4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21wdGNwX2FkZF9iYWNrbG9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MTY9c3RhdGljIHZvaWQgbXB0Y3BfZHNzX2NvcnJ1cHRpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3MjQ6c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXHRcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjQtXHRcdFx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcdFx0XHRcdF9fbXB0Y3BfYWRkX2JhY2tsb2coc2ssIHN1YmZsb3csIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjYtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmbG93LCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgTVBUQ1AgU0tCIE1vdmVtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGNhbGxpbmcgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBoZXJlLiBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgaW50ZW50IG9mIG1vdmluZyBTS0JzIChTb2NrZXQgQnVmZmVyKSBiZXR3ZWVuIHN1YmZsb3dzLCBhbmQgYWRkaW5nIHRoZW0gdG8gYSBiYWNrbG9nIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhhdCBjb250ZXh0LiBCdXQgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hhdCB0cmlnZ2VycyB0aGlzIHdob2xlIHNlcXVlbmNlPyogV2hvJiMzOTtzIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbSwgYSBmYWlsb3ZlciBwcm9jZWR1cmUsIGEgcmUtZXN0YWJsaXNobWVudCBvZiBhIHN1YmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IHRoYXQgdXBzdHJlYW0gY29udGV4dCwgdGhpcyBpcyBqdXN0IGEgc2luZ2xlIGxpbmsgaW4gYSBtdWNoIGxhcmdlciBjaGFpbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF04oCZcyBhY3R1YWxseSBoYXBwZW5pbmcuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9NzI0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc3NzpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cdFx0XHRcdFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk0MT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6OTQ2Olx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA1LVx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwMDY6XHRcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNy1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTVBUQ1AgQ29kZSBSZXZpZXcgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE1QVENQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBmdW5jdGlvbiBzY29wZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIFRoZSBgbXB0Y3BfZGF0YV9yZWFkeWAgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCB3aGljaCBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgZm9yIHBvdGVudGlhbCBzY29wZSBpbXBsaWNhdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdvcnRoIG5vdGluZy4gTm93LCB0aGUgYG1wdGNwX3dvcmtlcmAgZnVuY3Rpb24gKmlzKiBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgc28gdGhlIHN0YXRpYyBrZXl3b3JkIGlzIHByb2JhYmx5IGxlc3MgY3JpdGljYWwgdGhlcmUsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgaXQmIzM5O3MgdXNlZCBjb3JyZWN0bHkgd2l0aGluIGl0cyBjb250ZXh0LiBTaW1pbGFybHksIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhIHNvY2tldCByZWxlYXNlIGNhbGxiYWNrLiBJdHMgdXNhZ2UgaXMgY29udGFpbmVkLiBUaGUgcXVlc3Rpb24gdGhhdCBqdW1wcyBvdXQgaXMsIHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgbXB0Y3BfbW92ZV9za2JzYD8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gdG8gc2VlIGlmIGl0JiMzOTtzIHN0YXRpYyBvciBub3QgYW5kIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgTVBUQ1Agc3RydWN0dXJlLiBUaGlzIGlzIHNvbWV0aGluZyBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX21vdmVfc2ticyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9NzI0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc3NzpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cdFx0XHRcdFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk0MT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6OTQ2Olx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA1LVx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwMDY6XHRcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNy1cdH1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMjEwPXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGNvcGllZClcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjYzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjI2NDpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdGEpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjY1LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMjg4PXN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjMwNjpzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjMwNy17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjMxNS1cdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjMxNjpcdFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTctXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM1MD1zdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM5My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzOTQ6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSBcdTAwMjZcdTAwMjYgbXB0Y3BfbW92ZV9za2JzKHNrKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTUtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzc4Nj1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE5LVx0XHRcdF9fbXB0Y3BfcmV0cmFucyhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODIwOlx0XHRpZiAoc3Bvb2xfYmwgXHUwMDI2XHUwMDI2IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCkpIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjEtXHRcdFx0Lyogbm90aWZ5IGFjayBzZXEgdXBkYXRlICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA3OD1zdGF0aWMgaW50IG1wdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwODgtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MDg5Olx0XHRpZiAobXB0Y3BfbW92ZV9za2JzKHNrKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQwOTAtXHRcdFx0bXB0Y3BfY2xlYW51cF9yYnVmKG1zaywgMCk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDQ5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1wdGNwX3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyICpvZmYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDUwMS1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ1MDI6XHRcdG1wdGNwX21vdmVfc2ticyhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgRGF0YSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb2RlLCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3csIHNwZWNpZmljYWxseSB3aGVyZSB0aGUgY29yZSBwcm9jZXNzaW5nIGhhcHBlbnMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYG1wdGNwX21vdmVfc2tic2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBwbGFjZXM6IGBtcHRjcF9yZWN2bXNnYCwgYG1wdGNwX2lvY3RsYCwgYW5kIGBtcHRjcF9yZWN2X3NrYmAuIFRoZXJlZm9yZSwgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IGNhbmRpZGF0ZXMgZm9yIGtleSBmb2N1cyBwb2ludHMgaW4gbXkgYW5hbHlzaXMuCgpCZXlvbmQgdGhvc2UsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdGhlciBtYWluIGVudHJ5IHBvaW50cy4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMsIGJ1dCBJIGhhdmUgYSBmZXcgb3RoZXIgcG90ZW50aWFsIHBvaW50cyB0byBsb29rIGF0LgoKSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IGBfX21wdGNwX3JldHJhbnNgLiBJdCYjMzk7cyBjYWxsZWQgYnkgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gQWgsIGBtcHRjcF93b3JrZXJgIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgaXMgYSBzb2NrZXQgcmVsZWFzZSBjYWxsYmFjay4gSSBpbml0aWFsbHkgZGlzbWlzc2VkIHRoZW0sIGJ1dCBub3cgSSYjMzk7bSByZWNvbnNpZGVyaW5nLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBmb2N1c2luZyBvbiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9kYXRhX3JlYWR5YCBhbmQgYG1wdGNwX3JlY3Ztc2dgLgoKV2FpdCwgd2FpdC4uLiBoYW5nIG9uLiBgbXB0Y3Bfd29ya2VyYCBpcyAqc3RhdGljKiwgYnV0IGl0JiMzOTtzIHRoZSBtYWluIHdvcmtlciBmb3IgTVBUQ1AsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCAqdHJpZ2dlcnMqIHJldHJhbnNtaXNzaW9ucz8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gU28sIGBtcHRjcF93b3JrZXJgIGlzIHJlZ2lzdGVyZWQgYXMgYSB3b3JrcXVldWUgaXRlbSwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyByZWdpc3RlcmVkIGFzIHRoZSBgc2stJmd0O3NrX3Byb3QtJmd0O3JlbGVhc2VfY2JgLiBSaWdodC4gT2theS4gVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNUFRDUCBhbmQgc2VlIGlmIHRob3NlIG9mZmVyIGFueSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhhdCBhcyB0aGUgcHJpbWFyeSBhcmVhIG9mIGZvY3VzLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIGRpdmluZyBpbnRvIGRldGFpbHMsIGlzIHRvIHF1aWNrbHkgcnVsZSBvdXQgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGludm9sdmVkIG9yIGlmIHRoZXJlIGFyZSBvdGhlcnMgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoLCBvciBpbmZsdWVuY2UsIHRoZSBgTVBUQ1BgIHNldHVwLiBUaGUgcHJpb3JpdHkgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgcHJlbGltaW5hcnkgc3dlZXAgdG8gY2hlY2sgZm9yIGFueSBhZGphY2VudCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjA1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIENoYW5nZXM6IEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBjb25maWdzIHRoYXQgYXJlIHJlbGV2YW50IGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IGFyZSBub3cgaGFuZGxpbmcgbWVtb3J5IGxpbWl0cyBhbmQgcmV0cmFuc21pc3Npb24gaW1wcm92ZW1lbnRzLCB0byBlbnN1cmUgdGhleSYjMzk7cmUgcm9idXN0IGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy4KCkluaXRpYWxseSwgSSB3YXMgZ29pbmcgdG8gYXZvaWQgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBiZWNhdXNlIHRoZXkmIzM5O3JlIHN0YXRpYywgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoZSBndWlkYW5jZSB0byBwcmVmZXIgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgKnVubGVzcyogdGhleSBhcmUgbm90IGlubGluZWQuIEluIHRoaXMgY2FzZSwgYG1wdGNwX3dvcmtlcmAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgSU5JVF9XT1JLYCwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyBhc3NpZ25lZCB0byBgc2stJmd0O3NrX3Byb3QtJmd0O3JlbGVhc2VfY2JgLCBzbyB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSB0aGVtLiBTbyBJICp3aWxsKiBpbmNsdWRlIHRoZW0uCgpTbywgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gdGhlc2UgY3JpdGljYWwgYXJlYXM6CgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgOiBUaGlzIGhhbmRsZXMgaW5jb21pbmcgb3B0aW9ucyBhbmQsIGNydWNpYWxseSwgY2hlY2tzIGlmIHdlJiMzOTtyZSBvdmVyIHRoZSBtZW1vcnkgbGltaXQsIHRoZW4gY2FsbHMgYG1wdGNwX292ZXJfbGltaXRgLiBUaGlzIGlzIGEgY2xlYXIgcG9pbnQgd2hlcmUgbWVtb3J5IGxpbWl0cyBhcmUgZW5mb3JjZWQuCiogICBgbXB0Y3BfZGF0YV9yZWFkeWA6IERlYWxzIHdpdGggc3ViZmxvdyBkYXRhIHJlYWR5IGV2ZW50cy4gV2l0aGluIHRoaXMgZnVuY3Rpb24sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGlzIGNhbGxlZCB3aGljaCBpbiB0dXJucyBjYWxsIGBfX21wdGNwX2FkZF9iYWNrbG9nYCB3aGljaCBjYW4gZHJvcCBwYWNrZXRzIGlmIHRoZSBiYWNrbG9nIGlzIGV4Y2VlZGVkLCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JgCiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gbW92aW5nIFNLQnMuCiogICBgbXB0Y3Bfd29ya2VyYDogSXQgaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMgYnkgY2FsbGluZyBgX19tcHRjcF9yZXRyYW5zYCwgd2hpY2ggaXMgbm93IHBhcnQgb2YgdGhlIG1lbW9yeSBsaW1pdCBoYW5kbGluZyBsb2dpYywgYW5kIGEgY3JpdGljYWwgYXJlYS4KKiAgIGBtcHRjcF9yZWxlYXNlX2NiYDogQWxzbyBoYW5kbGVzIHJldHJhbnNtaXNzaW9ucyBieSBjYWxsaW5nIGBfX21wdGNwX3JldHJhbnNgIGFuZCBwb3RlbnRpYWxseSBgX19tcHRjcF9tb3ZlX3NrYnNgLgoKVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzLCBkZWFsaW5nIHdpdGggbWVtb3J5IGxpbWl0cyBhbmQgcmV0cmFuc21pc3Npb25zLiBUaGVzZSBtb2RpZmljYXRpb25zIGNvdWxkIGludHJvZHVjZSBhbGwgc29ydHMgb2YgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aG9zZSBzZWN0aW9ucywgYmVjYXVzZSBtZW1vcnkgcHJlc3N1cmUgY2FuIGV4cG9zZSBzdWJ0bGUgYnVncyBsaWtlIGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2dpYyBlcnJvcnMgaW4gdGhlIGNvZGUuIEkgd2lsbCBpbmNsdWRlIHRoZXNlIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz05NjE9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5ODc6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9OTU2PXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTYwLVxubmV0L21wdGNwL3Byb3RvY29sLmg6OTYxOnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtOTYyLWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDY9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MzAtXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUzMTpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUzMi1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4NzQ9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4NS1cdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4NjpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4Ny1cdGVsc2UgaWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2VycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnRlcm5hbCBBdWRpdCBvZiBNUFRDUCBEYXRhIEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbWVudGFsbHkgdHJhY2luZyB0aGUgZGF0YSBmbG93IGhlcmUuIFRoZSBrZXkgaXMgdGhhdCBgbXB0Y3BfZGF0YV9yZWFkeWAgKmlzbiYjMzk7dCogYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkLCBnaXZlbiBob3cgaXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBtdWx0aS1wYXRoIFRDUCBjb250ZXh0LiBJJiMzOTt2ZSBub3RlZCB0aGF0IGl0JiMzOTtzIGJlaW5nIGludm9rZWQgZnJvbSBib3RoIGBzdWJmbG93X2RhdGFfcmVhZHlgIGFuZCBgc3ViZmxvd19zdGF0ZV9jaGFuZ2VgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGNhbiBub3cgYmUgc3VyZSBhYm91dCB0aGlzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNpcmN1bXN0YW5jZXMgb2YgdGhlc2UgY2FsbHMuCgpXaXRoIHRoYXQgY29uZmlybWVkLCBJJiMzOTttIHNoaWZ0aW5nIG15IGZvY3VzIHRvIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIGNhdXNpbmcgdGhpcywgYW5kIGhvdyB0aGUgbXVsdGktcGF0aCBUQ1AgaGVhZGVyIGlzIHBhcnNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xMDUzPXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMDc4LVxubmV0L21wdGNwL29wdGlvbnMuYzoxMDc5Olx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMDgwLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTEzMD1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNTgtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE2MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlciBvZiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AqKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsICYjMzQ7V2hvJiMzOTtzIGFjdHVhbGx5IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXMgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGZ1bmN0aW9uPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1cHN0cmVhbSBjb2RlIHBhdGgsIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgZGF0YSBpdCYjMzk7cyBzdXBwb3NlZCB0byBoYW5kbGUuIElzIGl0IGNhbGxlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCwgZGF0YSB0cmFuc21pc3Npb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NDg4ND12b2lkIHRjcF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5MC1cdC8qIG1wdGNwIGNhbiYjMzk7dCB0ZWxsIHVzIHRvIGlnbm9yZSByZXNldCBwa3RzLFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5MTpcdCAqIHNvIGp1c3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpLlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5Mi1cdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5My1cdGlmIChza19pc19tcHRjcChzaykpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODk0Olx0XHRtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5NS1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NjA3PXN0YXRpYyB2b2lkIHRjcF9kYXRhX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE2LVx0ICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1NjE3Olx0aWYgKHNrX2lzX21wdGNwKHNrKSBcdTAwMjZcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTgtXHRcdF9fa2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczNzktXHRcdFx0ICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MzgwOlx0XHRcdGlmIChza19pc19tcHRjcChzaykgXHUwMDI2XHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM4MS1cdFx0XHRcdGdvdG8gZGlzY2FyZDtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEwNTM9c3RhdGljIHZvaWQgYWNrX3VwZGF0ZV9tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwNzgtXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEwNzk6XHQvKiB0aGlzIGFzc3VtZXMgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpIGlzIGludm9rZWQgYWZ0ZXIgdGNwX2FjaygpICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwODAtXHRpZiAoYWZ0ZXI2NChtc2stXHUwMDNld25kX2VuZCwgc25kX254dCkpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0xMTMwPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1OC0gKi9cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21wdGNwL29wdGlvbnMuYy0xMTYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipNUFRDUCBDb2RlIEV4cGxvcmF0aW9uOiBJbml0aWFsIEZvY3VzKioKClJpZ2h0LCBzbyBJIHNlZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgY2FsbGVkIHdpdGhpbiBgdGNwX2lucHV0LmNgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTXVsdGlwYXRoIFRDUCBvcHRpb25zIGFyZSBoYW5kbGVkIHdoZW4gaW5jb21pbmcuIFRoZSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChvYnZpb3VzbHksIHRoYXQmIzM5O3Mgd2hlcmUgd2Ugc3RhcnRlZCkKKiAgIGBtcHRjcF9kYXRhX3JlYWR5YCAoY3JpdGljYWwsIGhvdyYjMzk7cyBkYXRhIHNpZ25hbGxlZD8pCiogICBgbXB0Y3BfcmVjdm1zZ2AgKGhvdyBhcmUgbWVzc2FnZXMgcHJvY2Vzc2VkIG9uIHRoZSByZWNlaXZpbmcgZW5kPykKKiAgIGBtcHRjcF93b3JrZXJgIChzZWVtcyBsaWtlIGEgd29ya2VyIGZ1bmN0aW9uIG9yIHRocmVhZCkKKiAgIGBtcHRjcF9yZWxlYXNlX2NiYCAoY2FsbGJhY2sgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMsIG1heWJlPykuCgpIbW0sIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGBtcHRjcF93b3JrZXJgLiBJIHdvbmRlciBpZiB0aGF0JiMzOTtzIHRoZSBjYW5vbmljYWwgbmFtZSB1c2VkIGluIHRoZSBjb2RlIG9yIHBlcmhhcHMgaXQgdXNlcyBhbm90aGVyIG5hbWUgZm9yIGl0cyB3b3JrIGZ1bmN0aW9uLiBUaW1lIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF93b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTEwNzM9Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDc3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3ODpcdC8qIEdldCBhIHJlZmVyZW5jZSBvbiB0aGlzIHNvY2tldCwgbXB0Y3Bfd29ya2VyKCkgd2lsbCByZWxlYXNlIGl0LlxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3OTpcdCAqIEFzIG1wdGNwX3dvcmtlcigpIG1pZ2h0IGNvbXBsZXRlIGJlZm9yZSB1cywgd2UgY2FuIG5vdCBhdm9pZFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4MC1cdCAqIGEgc29ja19ob2xkKCkvc29ja19wdXQoKSBpZiBzY2hlZHVsZV93b3JrKCkgcmV0dXJucyBmYWxzZS5cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjUwLVx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgc29ja19mbGFnKHNzaywgU09DS19ERUFEKSkpIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2NTE6XHRcdC8qIGVuc3VyZSBsYXRlciBjaGVjayBpbiBtcHRjcF93b3JrZXIoKSB3aWxsIGRpc3Bvc2UgdGhlIG1zayAqL1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1Mi1cdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNzgyPXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4MjItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODIzOlx0LyogdGhlIGNhbGxpbmcgbXB0Y3Bfd29ya2VyIHdpbGwgcHJvcGVybHkgZGVzdHJveSB0aGUgc29ja2V0ICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODI0LVx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMDcwPXN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxMDY6c3RhdGljIHZvaWQgbXB0Y3Bfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMDcte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxNTU9c3RhdGljIHZvaWQgX19tcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjItXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMxNjM6XHRJTklUX1dPUksoXHUwMDI2bXNrLVx1MDAzZXdvcmssIG1wdGNwX3dvcmtlcik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTY0LVx0bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSA9IFJCX1JPT1Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODYwCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBNZW1vcnkgUHJlc3N1cmUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgcGlubmVkIGRvd24gYG1wdGNwX3dvcmtlcmAgYXMgdGhlIGtleSB3b3JrcXVldWUgZnVuY3Rpb24gaGVyZS4gRXhjZWxsZW50LiBOb3csIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2UgY29yZSBzeW1ib2xzOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9kYXRhX3JlYWR5YCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfd29ya2VyYCwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHdpdGhpbiBNUFRDUC4KClRoZSBzeXN0ZW0gY29uZmlncyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggYXJlIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4gTWFrZXMgc2Vuc2UsIHBhcnRpY3VsYXJseSB0aGUgbGF0dGVyLCBhcyBJUHY2IGNhbiBpbnRyb2R1Y2UgaXRzIG93biB1bmlxdWUgbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcy4KClRoZSBwYXRjaCYjMzk7cyBjb3JlIG1vZGlmaWNhdGlvbiBpcyBoYW5kbGluZyBtZW1vcnkgbGltaXRzOyBzcGVjaWZpY2FsbHksIHBydW5pbmcgdGhlIG91dC1vZi1vcmRlciBxdWV1ZSBhbmQgZHJvcHBpbmcgYmFja2xvZyBwYWNrZXRzIHdoZW4gbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQuIEFuZCB0aGVyZSBpcyBhIGZpeCBmb3IgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHdoaWNoIHdpbGwgbm93IHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgcmVxdWlyZXMgcmlnb3JvdXMgdGVzdGluZy4gVGhlIGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2dpYyBlcnJvcnMgdGhhdCBjb3VsZCBtYW5pZmVzdCB1bmRlciBoaWdoIG1lbW9yeSBwcmVzc3VyZS4gSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIHRlc3RzIHRoYXQgYWdncmVzc2l2ZWx5IGV4cGxvcmUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuCgpSaWdodCwgdGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGF0YV9yZWFkeSYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3dvcmtlciYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGJ1Z3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfd29ya2VyJiMzNDssCiAgICAmIzM0O21wdGNwX3JlbGVhc2VfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBtZW1vcnkgbGltaXRzIGJ5IHBydW5pbmcgdGhlIG91dC1vZi1vcmRlciBxdWV1ZSBhbmQgZHJvcHBpbmcgcGFja2V0cyBmcm9tIHRoZSBiYWNrbG9nIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZC4gSXQgYWxzbyBmaXhlcyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gcHJvcGVybHkgcHVzaCByZXRyYW5zbWlzc2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGRvbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0MzozMC4zMzcwMzI0MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg0NzA0ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3dvcmtlclwiLFxuICAgIFwibXB0Y3BfcmVsZWFzZV9jYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQzOjMwLjMzNzAzOTU5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjM3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDMyMjZmNmZjMWQ0MDZkM2NmMTRmNmY3ZDY5YWM4ZWQ3OGIxNjFjN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjQzOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXFxuKysrIGIvbmV0L21wdGNwL21pYi5jXFxuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIkZhbGxiYWNrRmFpbGVkXFxcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiV2luUHJvYmVcXFwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJCYWNrbG9nRHJvcFxcXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIlJjdlBydW5lZFxcXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJPRk9QcnVuZWRcXFwiLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcXG4gfTtcXG4gXFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXFxuaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcXG4rKysgYi9uZXQvbXB0Y3AvbWliLmhcXG5AQCAtODgsNiArODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XFxuIFxcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cXG4gXFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFxcdC8qIENhbid0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXFxuIFxcdE1QVENQX01JQl9XSU5QUk9CRSxcXHRcXHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xcbitcXHRNUFRDUF9NSUJfQkFDS0xPR0RST1AsXFx0XFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xcbitcXHRNUFRDUF9NSUJfUkNWUFJVTkVELFxcdFxcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqL1xcbitcXHRNUFRDUF9NSUJfT0ZPUFJVTkVELFxcdFxcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cXG4gXFx0X19NUFRDUF9NSUJfTUFYXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xcbmluZGV4IGM2NjQwMjNkMzdiYTguLjU2NDIyNzdjOGIzZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcXG5AQCAtMTEyNyw4ICsxMTI3LDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVxcdTAwM2VhaG1hYztcXG4gfVxcbiBcXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxcbi0gKiBlbHNlIHJldHVybiB0cnVlLlxcbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XFxuK1xcbitcXHRtZW0gKz0gUkVBRF9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4pO1xcbitcXHRpZiAobGlrZWx5KG1lbSBcXHUwMDNjPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1ZikpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciBhbHJlYWR5LWFja2VkIHNlZ21lbnRzLiAqL1xcbitcXHRpZiAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIHx8XFxuK1xcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9GSU4gfHxcXG4rXFx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVxcdTAwM2VyY3Zfbnh0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXFxuK1xcdGluZXRfY3NrKHNzayktXFx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XFxuK1xcdGluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spO1xcbitcXG4rXFx0LyogUGxhaW4gVENQIChmYWxsYmFjaykgYW5kIHNrYiBpcyBkcm9wcGVkIGJlZm9yZSB0aGUgVENQIHJlY3YgcXVldWUuICovXFxuK1xcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qIFJldHVybiBmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBkcm9wIHRoZSBwYWNrZXQsIGkuZS4gaW4gY2FzZSBvZiBlcnJvcixcXG4rICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLlxcbiAgKi9cXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbkBAIC0xMTU0LDcgKzExODAsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0XFx0X19tcHRjcF9kYXRhX2Fja2VkKHN1YmZsb3ctXFx1MDAzZWNvbm4pO1xcbiBcXHRcXHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVxcdTAwM2Vjb25uKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVxcdTAwM2Vjb25uLCBzaywgc2tiKTtcXG4gXFx0fVxcbiBcXG4gXFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcXHUwMDI2bXBfb3B0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjY4YzlkOTUyZDFkM2QgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbkBAIC0zNzMsNiArMzczLDQ5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2luaXRfc2tiKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXFxuIFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiB9XFxuIFxcbisvKiBcXFwiSW5zcGlyZWRcXFwiIGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcXG4rICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cXG4rICovXFxuK3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpXFxuK3tcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4rXFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2O1xcbitcXHRib29sIHBydW5lZCA9IGZhbHNlO1xcbitcXHR1NjQgbWVtO1xcbitcXG4rXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRub2RlID0gXFx1MDAyNm1zay1cXHUwMDNlb29vX2xhc3Rfc2tiLVxcdTAwM2VyYm5vZGU7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7XFxuK1xcbitcXHRcXHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xcbitcXHRcXHRpZiAoYWZ0ZXI2NChzZXEsIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRwcnVuZWQgPSB0cnVlO1xcbitcXHRcXHRwcmV2ID0gcmJfcHJldihub2RlKTtcXG4rXFx0XFx0cmJfZXJhc2Uobm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKTtcXG4rXFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG4rXFx0XFx0bXNrLVxcdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XFxuK1xcbitcXHRcXHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcXG4rXFx0XFx0aWYgKG1lbSBcXHUwMDNjPSBzay1cXHUwMDNlc2tfcmN2YnVmKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdG5vZGUgPSBwcmV2O1xcbitcXHR9IHdoaWxlIChub2RlKTtcXG4rXFxuK1xcdGlmIChwcnVuZWQpXFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xcbitcXG4rb3V0OlxcbitcXHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcXG4rXFx0cmV0dXJuIG1lbSBcXHUwMDNjPSBzay1cXHUwMDNlc2tfcmN2YnVmO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHR1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxO1xcbkBAIC0zODEsNiArNDI0LDE3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0bXB0Y3BfYm9ycm93X2Z3ZG1lbShzaywgc2tiKTtcXG4gXFxuK1xcdC8qIENhbid0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IHRoaXMgbGF0ZSwgb3IgdGhlIHN0cmVhbVxcbitcXHQgKiB3aWxsIGJyZWFrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIFJFQURfT05DRShzay1cXHUwMDNlc2tfcmN2YnVmKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFtcHRjcF9wcnVuZV9vZm9fcXVldWUoc2ssIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxKSkge1xcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcXG4rXFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEgPT0gbXNrLVxcdTAwM2VhY2tfc2VxKSB7XFxuIFxcdFxcdC8qIGluIHNlcXVlbmNlICovXFxuIFxcdFxcdG1zay1cXHUwMDNlYnl0ZXNfcmVjZWl2ZWQgKz0gY29weV9sZW47XFxuQEAgLTY3NSw2ICs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc3NrID0gc2tiLVxcdTAwM2VzaztcXG4gXFx0Ym9vbCBmcmFnc3RvbGVuO1xcbitcXHR1NjQgbGltaXQ7XFxuIFxcdGludCBkZWx0YTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xcbkBAIC02ODIsNiArNzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFNpbWlsYXIgYWRkaXRpb25hbCBhbGxvd2FuY2UgYXMgcGxhaW4gVENQLiAqL1xcbitcXHRsaW1pdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcmN2YnVmKTtcXG4rXFx0bGltaXQgKz0gKGxpbWl0IFxcdTAwM2VcXHUwMDNlIDEpICsgNjQgKiAxMDI0O1xcbitcXHRsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTtcXG4rXFx0aWYgKG1zay1cXHUwMDNlYmFja2xvZ19sZW4gXFx1MDAzZSBsaW1pdCBcXHUwMDI2XFx1MDAyNiAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XFxuK1xcdFxcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcXG4rXFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfQkFDS0xPRyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0LyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovXFxuIFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbiBcXHRcXHR0YWlsID0gbGlzdF9sYXN0X2VudHJ5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCwgc3RydWN0IHNrX2J1ZmYsIGxpc3QpO1xcbkBAIC03NTMsNyArODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcbiBcXHRcXHRcXHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xcbiBcXG4tXFx0XFx0XFx0aWYgKG93bl9tc2sgXFx1MDAyNlxcdTAwMjYgc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2Mgc2stXFx1MDAzZXNrX3JjdmJ1Zikge1xcbitcXHRcXHRcXHRpZiAob3duX21zaykge1xcbiBcXHRcXHRcXHRcXHRtcHRjcF9zdWJmbG93X2xlbmRfZndkbWVtKHN1YmZsb3csIHNrYik7XFxuIFxcdFxcdFxcdFxcdHJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbkBAIC0xMTM2LDEzICsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0bXB0Y3Bfd3JpdGVfc3BhY2Uoc2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcXG4te1xcbi1cXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbi1cXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbi1cXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG5AQCAtMjIwOSwxMiArMjI2Nyw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0XFxuIFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuIFxcdGJvb2wgbW92ZWQgPSBmYWxzZTtcXG4gXFxuLVxcdCpkZWx0YSA9IDA7XFxuIFxcdHdoaWxlICgxKSB7XFxuLVxcdFxcdC8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbid0IGRyb3AgKi9cXG4tXFx0XFx0aWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIHNrLVxcdTAwM2Vza19yY3ZidWYpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4gXFx0XFx0cHJlZmV0Y2goc2tiLVxcdTAwM2VuZXh0KTtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnNrYi1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdCpkZWx0YSArPSBza2ItXFx1MDAzZXRydWVzaXplO1xcbkBAIC0yMjQyLDkgKzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuIFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX3VuYWNjb3VudGVkIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zb2NrZXQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICAgIG1lbV9jZ3JvdXBfZnJvbV9zayhzaykpO1xcbiBcXG4tXFx0LyogRG9uJ3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqL1xcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpIHx8XFxuLVxcdCAgICBza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzZSBzay1cXHUwMDNlc2tfcmN2YnVmKVxcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChza2JzKTtcXG5AQCAtMjI1MiwyMCArMjMwMywxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4te1xcbi1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbi1cXG4tXFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXFx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xcbi1cXHRsaXN0X3NwbGljZShza2JzLCBcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2ticztcXG4gXFx0Ym9vbCBlbnF1ZXVlZCA9IGZhbHNlO1xcbi1cXHR1MzIgbW92ZWQ7XFxuK1xcdHUzMiBtb3ZlZCA9IDA7XFxuIFxcbiBcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbiBcXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFxcdTAwMjZza2JzKSkge1xcbkBAIC0yMjczLDggKzIzMTYsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRlbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgXFx1MDAyNnNrYnMsIFxcdTAwMjZtb3ZlZCk7XFxuIFxcbiBcXHRcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbi1cXHRcXHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcXHUwMDI2c2ticyk7XFxuIFxcdH1cXG4rXFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXFx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xcbiBcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuIFxcbiBcXHRpZiAoZW5xdWV1ZWQgXFx1MDAyNlxcdTAwMjYgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpXFxuQEAgLTI3ODUsNDQgKzI4MjgsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIFxcdHNrX2Vycm9yX3JlcG9ydChzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuKy8qXFxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXFxuKyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZVxcbisgKi9cXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbitcXHRcXHRcXHRcXHR1NjQgc2VudF9zZXEpXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbi1cXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4gXFx0c3RydWN0IHNvY2sgKnNzaztcXG4tXFx0aW50IHJldCwgZXJyO1xcbi1cXHR1MTYgbGVuID0gMDtcXG4tXFxuLVxcdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbi1cXG4tXFx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXFxcInN0YWxlXFxcIiBsb2dpYyAqL1xcbi1cXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xcbi1cXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4tXFx0aWYgKCFkZnJhZykge1xcbi1cXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4tXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4tXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbi1cXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4tXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4tXFxuLVxcdFxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcXG4tXFx0XFx0XFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XFxuLVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbitcXHRpbnQgcmV0LCBsZW4gPSAwO1xcbiBcXG4gXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG4gXFx0XFx0aWYgKFJFQURfT05DRShzdWJmbG93LVxcdTAwM2VzY2hlZHVsZWQpKSB7XFxuK1xcdFxcdFxcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVxcdTAwM2VkYXRhX3NlcTtcXG4gXFx0XFx0XFx0dTE2IGNvcGllZCA9IDA7XFxuIFxcbiBcXHRcXHRcXHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xcbkBAIC0yODMyLDcgKzI4NTMsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHRsb2NrX3NvY2soc3NrKTtcXG4gXFxuIFxcdFxcdFxcdC8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqL1xcbi1cXHRcXHRcXHRpbmZvLnNlbnQgPSAwO1xcbitcXHRcXHRcXHRpbmZvLnNlbnQgPSBvZmZzZXQ7XFxuIFxcdFxcdFxcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVxcdTAwM2Vjc3VtX2VuYWJsZWQpID8gZGZyYWctXFx1MDAzZWRhdGFfbGVuIDpcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQ7XFxuIFxcbkBAIC0yODQ3LDcgKzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHQgICAgIW1zay1cXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlZmFsbGJhY2tfbG9jayk7XFxuIFxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbkBAIC0yODcwLDEzICsyODkxLDEwOSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHRyZWxlYXNlX3NvY2soc3NrKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHJldHVybiBsZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG4rXFx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XFxuK1xcdGJvb2wgbmVlZF9yZXRyYW5zO1xcbitcXHR1NjQgcmV0cmFuc19zZXE7XFxuK1xcdGludCBlcnIsIGxlbjtcXG4gXFxuLVxcdG1zay1cXHUwMDNlYnl0ZXNfcmV0cmFucyArPSBsZW47XFxuLVxcdGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcXG4rXFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcXG4rXFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG4rXFx0cmV0cmFuc19zZXEgPSBtc2stXFx1MDAzZXNuZF91bmE7XFxuK1xcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xcbitcXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xcbitcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuK1xcdGlmICghZGZyYWcpXFxuK1xcdFxcdGdvdG8gY2hlY2tfZGF0YV9maW47XFxuIFxcbi1cXHQvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cXG4tXFx0aWYgKGFmdGVyNjQoZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSwgbXNrLVxcdTAwM2VzbmRfbnh0KSlcXG4tXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXNuZF9ueHQsIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cXHUwMDNlZGF0YV9zZXEpO1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdGJvb2wgYWxyZWFkeV9yZXRyYW5zO1xcbitcXHRcXHR1NjQgc2VudF9zZXE7XFxuK1xcbitcXHRcXHQvKiBUaGUgZGVmYXVsdCBzY2hlZHVsZXIgd2lsbCBraWNrIFxcXCJzdGFsZVxcXCIgbG9naWMsIHRoYXQgaW5cXG4rXFx0XFx0ICogdHVybiBjYW4gcHJvY2VzcyBpbmNvbWluZyBhY2tzIGFuZCBjbGVhbiB0aGUgUlRYIHF1ZXVlO1xcbitcXHRcXHQgKiBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkZnJhZyB3aWxsIHN0aWxsIGJlIGFyb3VuZFxcbitcXHRcXHQgKiBhZnRlcndhcmRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Z2V0X3BhZ2UoZGZyYWctXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHB1dF9wYWdlKGRmcmFnLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxcbitcXHRcXHQgKiB0aGUgY3VycmVudCBkZnJhZywgaWYgc28gdHJ5IHRvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbitcXHRcXHRhbHJlYWR5X3JldHJhbnMgPSAhYmVmb3JlNjQobXNrLVxcdTAwM2VzbmRfdW5hLCBkZnJhZy1cXHUwMDNlZGF0YV9zZXEgK1xcbitcXHRcXHRcXHRcXHRcXHQgICAgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCk7XFxuK1xcdFxcdHB1dF9wYWdlKGRmcmFnLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0aWYgKGFscmVhZHlfcmV0cmFucykge1xcbitcXHRcXHRcXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbitcXHRcXHRcXHRyZXRyYW5zX3NlcSA9IG1zay1cXHUwMDNlc25kX3VuYTtcXG4rXFx0XFx0XFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XFxuK1xcdFxcdFxcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYWZ0ZXI2NChtc2stXFx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xcbitcXHRcXHRcXHRyZXRyYW5zX3NlcSA9IG1zay1cXHUwMDNlc25kX3VuYTtcXG4rXFx0XFx0fVxcbitcXHRcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuK1xcbitcXHRcXHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxcbitcXHRcXHQgKiAgcXVldWUgZHVlIHRvIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghZGZyYWcgfHwgIWRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogQ2FuIGZhaWwgb25seSBpbiBjYXNlIG9mIGZhbGxiYWNrLiAqL1xcbitcXHRcXHRsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xcbitcXG4rXFx0XFx0cmV0cmFuc19zZXEgKz0gbGVuO1xcbitcXHRcXHRtc2stXFx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xcbitcXHRcXHRkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcmV0cmFuc19zZXEgLSBkZnJhZy1cXHUwMDNlZGF0YV9zZXEpO1xcbitcXG4rXFx0XFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXFxuK1xcdFxcdHNlbnRfc2VxID0gZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcTtcXG4rXFx0XFx0aWYgKGFmdGVyNjQoc2VudF9zZXEsIG1zay1cXHUwMDNlc25kX254dCkpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VzbmRfbnh0LCBzZW50X3NlcSk7XFxuK1xcbitcXHRcXHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXFxuK1xcdFxcdCAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXFx1MDAzZWRhdGFfc2VxICsgZGZyYWctXFx1MDAzZWRhdGFfbGVuKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcXHUwMDI2ZGZyYWctXFx1MDAzZWxpc3QsIFxcdTAwMjZtc2stXFx1MDAzZXJ0eF9xdWV1ZSkgP1xcbitcXHRcXHRcXHRcXHROVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTtcXG4rXFx0XFx0aWYgKCFkZnJhZylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXFxuK1xcdGlmICghbmVlZF9yZXRyYW5zKSB7XFxuK2NoZWNrX2RhdGFfZmluOlxcbitcXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4rXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4rXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbitcXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4rXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4rXFx0XFx0XFx0Z290byByZXNldF90aW1lcjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0fVxcbiBcXG4gcmVzZXRfdGltZXI6XFxuIFxcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XFxuQEAgLTM2NzAsMTIgKzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHR1MzIgbW92ZWQgPSAwO1xcbiBcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay1cXHUwMDNlY2JfZmxhZ3MgXFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XFxuIFxcdFxcdGJvb2wgc3Bvb2xfYmw7XFxuLVxcdFxcdHUzMiBtb3ZlZDtcXG4gXFxuIFxcdFxcdHNwb29sX2JsID0gbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFxcdTAwMjZza2JzKTtcXG4gXFx0XFx0aWYgKCFmbGFncyBcXHUwMDI2XFx1MDAyNiAhc3Bvb2xfYmwpXFxuQEAgLTM3MDgsOSArMzgyNSw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spO1xcbi1cXHRcXHRpZiAoc3Bvb2xfYmwpXFxuLVxcdFxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRpZiAobW92ZWQpXFxuK1xcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVxcdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcXG4gXFxuIFxcdGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9DTEVBTl9VTkEsIFxcdTAwMjZtc2stXFx1MDAzZWNiX2ZsYWdzKSlcXG4gXFx0XFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6MzAuODQ2MDYxNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzMzODAwNjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3dvcmtlclwiLFxuICAgIFwibXB0Y3BfcmVsZWFzZV9jYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzMjI2ZjZmYzFkNDA2ZDNjZjE0ZjZmN2Q2OWFjOGVkNzhiMTYxYzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIyOjQzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCBmMjNmZGEwYzU1YTcyLi4yNTY5Mzg1YmFiN2NhIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcbkBAIC04NSw2ICs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7XG4gXHRTTk1QX01JQl9JVEVNKFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXCIsIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLFxuIFx0U05NUF9NSUJfSVRFTShcIkZhbGxiYWNrRmFpbGVkXCIsIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwiV2luUHJvYmVcIiwgTVBUQ1BfTUlCX1dJTlBST0JFKSxcbitcdFNOTVBfTUlCX0lURU0oXCJCYWNrbG9nRHJvcFwiLCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApLFxuK1x0U05NUF9NSUJfSVRFTShcIlJjdlBydW5lZFwiLCBNUFRDUF9NSUJfUkNWUFJVTkVEKSxcbitcdFNOTVBfTUlCX0lURU0oXCJPRk9QcnVuZWRcIiwgTVBUQ1BfTUlCX09GT1BSVU5FRCksXG4gfTtcbiBcbiAvKiBtcHRjcF9taWJfYWxsb2MgLSBhbGxvY2F0ZSBwZXJjcHUgbWliIGNvdW50ZXJzXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXG5pbmRleCA4MTIyMThiNWVkMmJmLi4zYTM0MjVlMjU4YTc2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5oXG4rKysgYi9uZXQvbXB0Y3AvbWliLmhcbkBAIC04OCw2ICs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cbiBcdE1QVENQX01JQl9XSU5QUk9CRSxcdFx0LyogTVBUQ1AtbGV2ZWwgemVybyB3aW5kb3cgcHJvYmUgKi9cbitcdE1QVENQX01JQl9CQUNLTE9HRFJPUCxcdFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xuK1x0TVBUQ1BfTUlCX1JDVlBSVU5FRCxcdFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzICovXG4rXHRNUFRDUF9NSUJfT0ZPUFJVTkVELFx0XHQvKiBNUFRDUC1sZXZlbCBPb08gcXVldWUgcHJ1bmVkICovXG4gXHRfX01QVENQX01JQl9NQVhcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXG5pbmRleCBjNjY0MDIzZDM3YmE4Li41NjQyMjc3YzhiM2QwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xuKysrIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuQEAgLTExMjcsOCArMTEyNywzNCBAQCBzdGF0aWMgYm9vbCBhZGRfYWRkcl9obWFjX3ZhbGlkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRyZXR1cm4gaG1hYyA9PSBtcF9vcHQtXHUwMDNlYWhtYWM7XG4gfVxuIFxuLS8qIFJldHVybiBmYWxzZSBpbiBjYXNlIG9mIGVycm9yIChvciBzdWJmbG93IGhhcyBiZWVuIHJlc2V0KSxcbi0gKiBlbHNlIHJldHVybiB0cnVlLlxuK3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuK1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0dTY0IG1lbSA9IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcbitcdG1lbSArPSBSRUFEX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuKTtcbitcdGlmIChsaWtlbHkobWVtIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciBhbHJlYWR5LWFja2VkIHNlZ21lbnRzLiAqL1xuK1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbitcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfRklOIHx8XG4rXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCB0Y3Bfc2soc3NrKS1cdTAwM2VyY3Zfbnh0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXG4rXHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4rXHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbitcbitcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuK1x0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuKyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy5cbiAgKi9cbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC0xMTU0LDcgKzExODAsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cdTAwM2Vjb25uKTtcbiBcdFx0bXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy1cdTAwM2Vjb25uKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjY4YzlkOTUyZDFkM2QgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNzMsNiArMzczLDQ5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2luaXRfc2tiKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG4gXHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiB9XG4gXG4rLyogXCJJbnNwaXJlZFwiIGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcbisgKiBzb2NrZXQgaXMgdW5kZXIgbWVtb3J5IGxpbWl0LlxuKyAqL1xuK3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjtcbitcdGJvb2wgcHJ1bmVkID0gZmFsc2U7XG4rXHR1NjQgbWVtO1xuK1xuK1x0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bm9kZSA9IFx1MDAyNm1zay1cdTAwM2Vvb29fbGFzdF9za2ItXHUwMDNlcmJub2RlO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xuK1xuK1x0XHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xuK1x0XHRpZiAoYWZ0ZXI2NChzZXEsIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRwcnVuZWQgPSB0cnVlO1xuK1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbitcdFx0cmJfZXJhc2Uobm9kZSwgXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4rXG4rXHRcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuK1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRub2RlID0gcHJldjtcbitcdH0gd2hpbGUgKG5vZGUpO1xuK1xuK1x0aWYgKHBydW5lZClcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT1BSVU5FRCk7XG4rXG4rb3V0OlxuK1x0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XG4rXHRyZXR1cm4gbWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmO1xuK31cbitcbiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbkBAIC0zODEsNiArNDI0LDE3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0bXB0Y3BfYm9ycm93X2Z3ZG1lbShzaywgc2tiKTtcbiBcbitcdC8qIENhbid0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IHRoaXMgbGF0ZSwgb3IgdGhlIHN0cmVhbVxuK1x0ICogd2lsbCBicmVhay5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2UgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbiBcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxID09IG1zay1cdTAwM2VhY2tfc2VxKSB7XG4gXHRcdC8qIGluIHNlcXVlbmNlICovXG4gXHRcdG1zay1cdTAwM2VieXRlc19yZWNlaXZlZCArPSBjb3B5X2xlbjtcbkBAIC02NzUsNiArNzI5LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrID0gc2tiLVx1MDAzZXNrO1xuIFx0Ym9vbCBmcmFnc3RvbGVuO1xuK1x0dTY0IGxpbWl0O1xuIFx0aW50IGRlbHRhO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkpIHtcbkBAIC02ODIsNiArNzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHQvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi9cbitcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXHRsaW1pdCArPSAobGltaXQgXHUwMDNlXHUwMDNlIDEpICsgNjQgKiAxMDI0O1xuK1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4rXHRpZiAobXNrLVx1MDAzZWJhY2tsb2dfbGVuIFx1MDAzZSBsaW1pdCBcdTAwMjZcdTAwMjYgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSkge1xuK1x0XHRfX01QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9CQUNLTE9HRFJPUCk7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzUzLDcgKzgxOCw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0XHRcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XG4gXG4tXHRcdFx0aWYgKG93bl9tc2sgXHUwMDI2XHUwMDI2IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Mgc2stXHUwMDNlc2tfcmN2YnVmKSB7XG4rXHRcdFx0aWYgKG93bl9tc2spIHtcbiBcdFx0XHRcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcbiBcdFx0XHRcdHJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpO1xuIFx0XHRcdH0gZWxzZSB7XG5AQCAtMTEzNiwxMyArMTIwMSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIwOSwxMiArMjI2Nyw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xuIFxuLVx0KmRlbHRhID0gMDtcbiBcdHdoaWxlICgxKSB7XG4tXHRcdC8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbid0IGRyb3AgKi9cbi1cdFx0aWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuLVx0XHRcdGJyZWFrO1xuLVxuIFx0XHRwcmVmZXRjaChza2ItXHUwMDNlbmV4dCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnNrYi1cdTAwM2VsaXN0KTtcbiBcdFx0KmRlbHRhICs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQyLDkgKzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX3VuYWNjb3VudGVkIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zb2NrZXQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIG1lbV9jZ3JvdXBfZnJvbV9zayhzaykpO1xuIFxuLVx0LyogRG9uJ3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqL1xuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcbi1cdCAgICBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjUyLDIwICsyMzAzLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsXG4tXHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4te1xuLVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbi1cbi1cdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4tXHRsaXN0X3NwbGljZShza2JzLCBcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KTtcbi19XG4tXG4gc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xuIFx0Ym9vbCBlbnF1ZXVlZCA9IGZhbHNlO1xuLVx0dTMyIG1vdmVkO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3Myw4ICsyMzE2LDggQEAgc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKTtcbiBcbiBcdFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuIFxuIFx0aWYgKGVucXVldWVkIFx1MDAyNlx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcbkBAIC0yNzg1LDQ0ICsyODI4LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbisvKlxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXG4rICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4rICovXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuK1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwic3RhbGVcIiBsb2dpYyAqL1xuLVx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbi1cdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xuLVx0aWYgKCFkZnJhZykge1xuLVx0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4tXHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuLVxuLVx0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuLVx0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRpbnQgcmV0LCBsZW4gPSAwO1xuIFxuIFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiBcdFx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZXNjaGVkdWxlZCkpIHtcbitcdFx0XHR1MTYgb2Zmc2V0ID0gc2VudF9zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiBcdFx0XHR1MTYgY29waWVkID0gMDtcbiBcbiBcdFx0XHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xuQEAgLTI4MzIsNyArMjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbitcdFx0XHRpbmZvLnNlbnQgPSBvZmZzZXQ7XG4gXHRcdFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXHUwMDNlY3N1bV9lbmFibGVkKSA/IGRmcmFnLVx1MDAzZWRhdGFfbGVuIDpcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudDtcbiBcbkBAIC0yODQ3LDcgKzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdCAgICAhbXNrLVx1MDAzZWFsbG93X3N1YmZsb3dzKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlZmFsbGJhY2tfbG9jayk7XG4gXHRcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbi1cdFx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3MCwxMyArMjg5MSwxMDkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbitcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuK1x0Ym9vbCBuZWVkX3JldHJhbnM7XG4rXHR1NjQgcmV0cmFuc19zZXE7XG4rXHRpbnQgZXJyLCBsZW47XG4gXG4tXHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyArPSBsZW47XG4tXHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xuK1x0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbitcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4rXHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuK1x0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuK1x0aWYgKCFkZnJhZylcbitcdFx0Z290byBjaGVja19kYXRhX2ZpbjtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbi1cdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1x0Zm9yICg7Oykge1xuK1x0XHRib29sIGFscmVhZHlfcmV0cmFucztcbitcdFx0dTY0IHNlbnRfc2VxO1xuK1xuK1x0XHQvKiBUaGUgZGVmYXVsdCBzY2hlZHVsZXIgd2lsbCBraWNrIFwic3RhbGVcIiBsb2dpYywgdGhhdCBpblxuK1x0XHQgKiB0dXJuIGNhbiBwcm9jZXNzIGluY29taW5nIGFja3MgYW5kIGNsZWFuIHRoZSBSVFggcXVldWU7XG4rXHRcdCAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kXG4rXHRcdCAqIGFmdGVyd2FyZHMuXG4rXHRcdCAqL1xuK1x0XHRnZXRfcGFnZShkZnJhZy1cdTAwM2VwYWdlKTtcbitcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHB1dF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxuK1x0XHQgKiB0aGUgY3VycmVudCBkZnJhZywgaWYgc28gdHJ5IHRvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXG4rXHRcdCAqL1xuK1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0XHRhbHJlYWR5X3JldHJhbnMgPSAhYmVmb3JlNjQobXNrLVx1MDAzZXNuZF91bmEsIGRmcmFnLVx1MDAzZWRhdGFfc2VxICtcbitcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCk7XG4rXHRcdHB1dF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuK1x0XHRpZiAoYWxyZWFkeV9yZXRyYW5zKSB7XG4rXHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbitcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0XHRcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xuK1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4rXHRcdH0gZWxzZSBpZiAoYWZ0ZXI2NChtc2stXHUwMDNlc25kX3VuYSwgcmV0cmFuc19zZXEpKSB7XG4rXHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbitcdFx0fVxuK1x0XHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4rXG4rXHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4rXHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4rXHRcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1xuK1x0XHRyZXRyYW5zX3NlcSArPSBsZW47XG4rXHRcdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbitcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4rXHRcdFx0XHRcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbitcbitcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4rXHRcdHNlbnRfc2VxID0gZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4rXHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4rXHRcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgc2VudF9zZXEpO1xuK1xuK1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4rXHRcdCAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cdTAwM2VkYXRhX2xlbikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGRmcmFnID0gbGlzdF9pc19sYXN0KFx1MDAyNmRmcmFnLVx1MDAzZWxpc3QsIFx1MDAyNm1zay1cdTAwM2VydHhfcXVldWUpID9cbitcdFx0XHRcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xuK1x0XHRpZiAoIWRmcmFnKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0LyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi9cbitcdGlmICghbmVlZF9yZXRyYW5zKSB7XG4rY2hlY2tfZGF0YV9maW46XG4rXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbitcdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4rXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgKyAxKTtcbitcdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbitcdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuK1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0fVxuIFxuIHJlc2V0X3RpbWVyOlxuIFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcbkBAIC0zNjcwLDEyICszNzg3LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdGZvciAoOzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IChtc2stXHUwMDNlY2JfZmxhZ3MgXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcbiBcdFx0Ym9vbCBzcG9vbF9ibDtcbi1cdFx0dTMyIG1vdmVkO1xuIFxuIFx0XHRzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCBcdTAwMjZza2JzKTtcbiBcdFx0aWYgKCFmbGFncyBcdTAwMjZcdTAwMjYgIXNwb29sX2JsKVxuQEAgLTM3MDgsOSArMzgyNSw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spO1xuLVx0XHRpZiAoc3Bvb2xfYmwpXG4tXHRcdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRpZiAobW92ZWQpXG4rXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXG4gXHRpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCBcdTAwMjZtc2stXHUwMDNlY2JfZmxhZ3MpKVxuIFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6MzAuODQ2MDYyNzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTkyMTg3NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBSZXRyYW5zbWlzc2lvbiBJbXByb3ZlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBoaXR0aW5nIHRoZSBNUFRDUCBpbXBsZW1lbnRhdGlvbi4gSXQncyB0b3VjaGluZyBgbmV0L21wdGNwL21pYi5jYCwgYG1pYi5oYCwgYG9wdGlvbnMuY2AsIGFuZCBgcHJvdG9jb2wuY2AuIExvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBzb21lIFNOTVAgTUlCIGNvdW50ZXJzIGZvciBNUFRDUCAtIEJhY2tsb2dEcm9wLCBSY3ZQcnVuZWQsIGFuZCBPRk9QcnVuZWQsIHdoaWNoIGlzIGdvb2QgZm9yIG1vbml0b3JpbmcuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgbWFuYWdpbmcgbWVtb3J5IGxpbWl0cyBhbmQgaW1wcm92aW5nIHJldHJhbnNtaXNzaW9uLlxuXG5UaGV5J3ZlIG1hZGUgc29tZSBrZXkgbW9kaWZpY2F0aW9ucy4gVGhlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBmdW5jdGlvbiBpcyBtb2RpZmllZCB0byBjaGVjayBgbXB0Y3Bfb3Zlcl9saW1pdGAuIEFsc28gYWRkZWQgYXJlIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIGFuZCB0aGUgYF9fbXB0Y3BfbW92ZV9za2JgIGZ1bmN0aW9ucyB0byBoYW5kbGUgcHJ1bmluZyB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbWVtb3J5IGdvZXMgb3ZlciB0aGUgZGVmaW5lZCBsaW1pdC4gVGhlIGBfX21wdGNwX2FkZF9iYWNrbG9nYCBpcyB1cGRhdGVkIHRvIGRyb3AgcGFja2V0cyB3aGVuIHRoZSBiYWNrbG9nIGV4Y2VlZHMgdGhlIGxpbWl0LiBJbXBvcnRhbnRseSwgYF9fbXB0Y3BfcmV0cmFuc2AgaGFzIGJlZW4gY2hhbmdlZCB0byBwdXNoIHJldHJhbnNtaXNzaW9ucyBjb3JyZWN0bHkuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbi11cCBvZiBzb21lIGltcG9ydGFudCBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGluIE1QVENQLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0LiBJdCBoYW5kbGVzIHRoZSBtZW1vcnkgbGltaXRzLCBib3RoIHBydW5pbmcgYW5kIGRyb3BwaW5nLCBhbmQgbG9va3MgbGlrZSBpdCBmaXhlcyBzb21lIHJldHJhbnNtaXNzaW9uIGlzc3Vlcy4gR2l2ZW4gdGhlIGNoYW5nZXMgdG8gY3JpdGljYWwgbG9naWMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgc29saWQgZnV6emluZyBlZmZvcnQgdG8gaWRlbnRpZnkgdGhlIHNpZGUgZWZmZWN0cyBvZiBtZW1vcnkgbGltaXQgaGFuZGxpbmcuXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIFRoZSBjaGFuZ2VkL2FkZGVkIGZ1bmN0aW9ucyBhcmUgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJIHNlZSBgbXB0Y3Bfb3Zlcl9saW1pdGAgKHN0YXRpYyksIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCAobm9uLXN0YXRpYyksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIChzdGF0aWMpLCBgX19tcHRjcF9tb3ZlX3NrYmAgKHN0YXRpYyksIGBfX21wdGNwX2FkZF9iYWNrbG9nYCAoc3RhdGljKSwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgKHN0YXRpYyksIGBfX21wdGNwX2NsZWFuX3VuYV93YWtldXBgIChzdGF0aWMpLCBgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2dgIChzdGF0aWMpLCBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKSwgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCAoc3RhdGljKSwgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYykgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKS5cblxuV2FpdCwgaGFuZyBvbi4uLiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgbm9uLXN0YXRpYz8gT2theSwgdGhhdCdzIHBvdGVudGlhbGx5IGFuIGVudHJ5IHBvaW50LiBUaGUgc3RhdGljIG9uZXMgYXJlIHdoZXJlIHRoZSBjb3JlIGNoYW5nZXMgYXJlLCBidXQgdGhhdCBub24tc3RhdGljIG9uZSBpcyBjcnVjaWFsIHRvIHNlZSBob3cgaXQncyBpbnZva2VkLiBXZSBjYW4ndCBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGFjdC5cblxuTGV0J3MgY2hlY2sgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxpbmcgdGhlIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBsaW1pdCBjaGVja3MgYXJlIGJlaW5nIHRyaWdnZXJlZC4gSWYgdGhlcmUgaXMgYSBub24tc3RhdGljIGVudHJ5IHBvaW50LCB3ZSBoYXZlIGEgY2FuZGlkYXRlIGZvciBmb2N1c2VkIHRlc3RpbmcuIGBfX21wdGNwX3JldHJhbnNgLCBpcyBjYWxsZWQgYnkgYG1wdGNwX3dvcmtlcmAgb3Igc2ltaWxhcj8gTGV0J3MgdmVyaWZ5IHRoYXQuIFRoaXMgbmVlZHMgc29tZSBkZWRpY2F0ZWQgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6MzguODM4MjUyNzk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY1MjE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX3JldHJhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDYzPXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA4NC1cXHRcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZSA9IDE7XFxubmV0L21wdGNwL3BtLmM6MTA4NTpcXHRcXHRcXHRcXHRfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY2LVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjgzNT1zdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTc6c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDgtXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTQ5OlxcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NTAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTA2PXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTQzLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFxcdTAwMjZtc2stXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTQ0OlxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0NS1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3ODY9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE4LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODE5OlxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyMC1cXHRcXHRpZiAoc3Bvb2xfYmwgXFx1MDAyNlxcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MDg9dm9pZCBfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMi12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0MzozOC45NDk5MTI2NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE4NzU3OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNUFRDUCBSZXRyYW5zbWlzc2lvbiBhbmQgQmFja2xvZyBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvZGUgYWdhaW4sIHNwZWNpZmljYWxseSBhcm91bmQgcmV0cmFuc21pc3Npb25zIGFuZCBiYWNrbG9nIG1hbmFnZW1lbnQuIEkndmUgbm90aWNlZCB0aGF0IGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgYm90aCBjYWxsIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgX19tcHRjcF9yZXRyYW5zYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGNvcmUgcmV0cmFuc21pc3Npb24gbG9naWMgc2VlbXMgdG8gcmVzaWRlLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgd29ya2VyIHRocmVhZHMgZGVhbGluZyB3aXRoIHJldHJhbnNtaXNzaW9ucy5cblxuVGhlbiwgdGhlcmUncyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHdoaWNoIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIHRoZSBNUFRDUCBtb2R1bGUgaXRzZWxmLCBhbmQgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBwb2ludCBvZiBpbnRlcmVzdCwgY291bGQgYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgYmVpbmcgdXNlZCBsYXRlci5cblxuTXkgbWFpbiBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGJhY2tsb2csIGFuZCBob3cgaXQncyBoYW5kbGVkLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgZnJvbSB0aGVyZSBhbmQgZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueXRoaW5nIHVudXN1YWwgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaGFwcGVuaW5nLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBiYWNrbG9nIGFkZGl0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByZXRyYW5zbWlzc2lvbiBwcm9jZXNzIEkgd2FzIGxvb2tpbmcgYXQgZWFybGllci4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhlcmUgdGhhdCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0Mzo0Mi41Njg2NzM4NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2MTM5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9hZGRfYmFja2xvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTcxNj1zdGF0aWMgdm9pZCBtcHRjcF9kc3NfY29ycnVwdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzIzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcyNDpzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXFx0XFx0XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNC1cXHRcXHRcXHR9IGVsc2Uge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcXHRcXHRcXHRcXHRfX21wdGNwX2FkZF9iYWNrbG9nKHNrLCBzdWJmbG93LCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNi1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQzOjQyLjY0MzI5MjQ4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjQ5MDAzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGZsb3csIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIE1QVENQIFNLQiBNb3ZlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgY2FsbGluZyBgX19tcHRjcF9hZGRfYmFja2xvZ2AuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgaGVyZS4gSSB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIGludGVudCBvZiBtb3ZpbmcgU0tCcyAoU29ja2V0IEJ1ZmZlcikgYmV0d2VlbiBzdWJmbG93cywgYW5kIGFkZGluZyB0aGVtIHRvIGEgYmFja2xvZyBtYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoYXQgY29udGV4dC4gQnV0IG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQgdHJpZ2dlcnMgdGhpcyB3aG9sZSBzZXF1ZW5jZT8qIFdobydzIGFjdHVhbGx5ICpjYWxsaW5nKiBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbSwgYSBmYWlsb3ZlciBwcm9jZWR1cmUsIGEgcmUtZXN0YWJsaXNobWVudCBvZiBhIHN1YmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IHRoYXQgdXBzdHJlYW0gY29udGV4dCwgdGhpcyBpcyBqdXN0IGEgc2luZ2xlIGxpbmsgaW4gYSBtdWNoIGxhcmdlciBjaGFpbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF04oCZcyBhY3R1YWxseSBoYXBwZW5pbmcuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQzOjQ2LjMwODE5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MTk3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9NzI0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzc2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc3NzpzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBvd25fbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTQxPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0NS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NDY6XFx0bW92ZWQgPSBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIHRydWUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0Ny1cXHRfX21wdGNwX29mb19xdWV1ZShtc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTg3PXZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA1LVxcdH0gZWxzZSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNjpcXHRcXHRfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIGZhbHNlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA3LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NDYuMzgwOTIxMDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NjM3NzgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk1QVENQIENvZGUgUmV2aWV3IENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGZ1bmN0aW9uIHNjb3BlIGFuZCBob3cgaXQncyB1c2VkLiBUaGUgYG1wdGNwX2RhdGFfcmVhZHlgIGZ1bmN0aW9uIGlzbid0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCB3aGljaCBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBmb3IgcG90ZW50aWFsIHNjb3BlIGltcGxpY2F0aW9ucy4gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd29ydGggbm90aW5nLiBOb3csIHRoZSBgbXB0Y3Bfd29ya2VyYCBmdW5jdGlvbiAqaXMqIHN0YXRpYywgYnV0IGl0J3MgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHNvIHRoZSBzdGF0aWMga2V5d29yZCBpcyBwcm9iYWJseSBsZXNzIGNyaXRpY2FsIHRoZXJlLCBidXQgSSdsbCBtYWtlIHN1cmUgaXQncyB1c2VkIGNvcnJlY3RseSB3aXRoaW4gaXRzIGNvbnRleHQuIFNpbWlsYXJseSwgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHN0YXRpYywgYnV0IGl0J3MgYSBzb2NrZXQgcmVsZWFzZSBjYWxsYmFjay4gSXRzIHVzYWdlIGlzIGNvbnRhaW5lZC4gVGhlIHF1ZXN0aW9uIHRoYXQganVtcHMgb3V0IGlzLCB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgbXB0Y3BfbW92ZV9za2JzYD8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uIHRvIHNlZSBpZiBpdCdzIHN0YXRpYyBvciBub3QgYW5kIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgTVBUQ1Agc3RydWN0dXJlLiBUaGlzIGlzIHNvbWV0aGluZyBJJ2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTAuMTM3MzAzMDUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDg4NTcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9tb3ZlX3NrYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcXHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVxcdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXFx0fVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjIxMD1zdGF0aWMgdm9pZCBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBjb3BpZWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjYzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIyNjQ6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRhKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyNjUte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjI4OD1zdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMDY6c3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTUtXFx0XFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMTY6XFx0XFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTctXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMzUwPXN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM5NDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KSBcXHUwMDI2XFx1MDAyNiBtcHRjcF9tb3ZlX3NrYnMoc2spKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzg2PXN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgxOS1cXHRcXHRcXHRfX21wdGNwX3JldHJhbnMoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MjA6XFx0XFx0aWYgKHNwb29sX2JsIFxcdTAwMjZcXHUwMDI2IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKSkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjEtXFx0XFx0XFx0Lyogbm90aWZ5IGFjayBzZXEgdXBkYXRlICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDc4PXN0YXRpYyBpbnQgbXB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDg4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDA4OTpcXHRcXHRpZiAobXB0Y3BfbW92ZV9za2JzKHNrKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDkwLVxcdFxcdFxcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIDApO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDQ5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1wdGNwX3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyICpvZmYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAxLVxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ1MDI6XFx0XFx0bXB0Y3BfbW92ZV9za2JzKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0Mzo1MC4yMjgxOTgxNjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNTA2OTQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBUQ1AgRGF0YSBGbG93KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTVBUQ1AgY29kZSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93LCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIGNvcmUgcHJvY2Vzc2luZyBoYXBwZW5zLiBJdCdzIGNsZWFyIHRoYXQgYG1wdGNwX21vdmVfc2tic2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQncyBjYWxsZWQgZnJvbSBzZXZlcmFsIHBsYWNlczogYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3BfaW9jdGxgLCBhbmQgYG1wdGNwX3JlY3Zfc2tiYC4gVGhlcmVmb3JlLCB0aG9zZSB0aHJlZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3Iga2V5IGZvY3VzIHBvaW50cyBpbiBteSBhbmFseXNpcy5cblxuQmV5b25kIHRob3NlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgb3RoZXIgbWFpbiBlbnRyeSBwb2ludHMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGFzIGxpa2VseSBjYW5kaWRhdGVzLCBidXQgSSBoYXZlIGEgZmV3IG90aGVyIHBvdGVudGlhbCBwb2ludHMgdG8gbG9vayBhdC5cblxuSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgYF9fbXB0Y3BfcmV0cmFuc2AuIEl0J3MgY2FsbGVkIGJ5IGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEFoLCBgbXB0Y3Bfd29ya2VyYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjayBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGEgc29ja2V0IHJlbGVhc2UgY2FsbGJhY2suIEkgaW5pdGlhbGx5IGRpc21pc3NlZCB0aGVtLCBidXQgbm93IEknbSByZWNvbnNpZGVyaW5nLlxuXG5JJ2xsIHN0YXJ0IHdpdGggZm9jdXNpbmcgb24gYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAgYW5kIGBtcHRjcF9yZWN2bXNnYC5cblxuV2FpdCwgd2FpdC4uLiBoYW5nIG9uLiBgbXB0Y3Bfd29ya2VyYCBpcyAqc3RhdGljKiwgYnV0IGl0J3MgdGhlIG1haW4gd29ya2VyIGZvciBNUFRDUCwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0ICp0cmlnZ2VycyogcmV0cmFuc21pc3Npb25zPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBTbywgYG1wdGNwX3dvcmtlcmAgaXMgcmVnaXN0ZXJlZCBhcyBhIHdvcmtxdWV1ZSBpdGVtLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHJlZ2lzdGVyZWQgYXMgdGhlIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXJlbGVhc2VfY2JgLiBSaWdodC4gT2theS4gVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNUFRDUCBhbmQgc2VlIGlmIHRob3NlIG9mZmVyIGFueSBpbnNpZ2h0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxOTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTUuNzUzMjcwMTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTUyNDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0Mzo1NS44MjQ4MDA5MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNTc2MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGVzdGFibGlzaCB0aGF0IGFzIHRoZSBwcmltYXJ5IGFyZWEgb2YgZm9jdXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgZGl2aW5nIGludG8gZGV0YWlscywgaXMgdG8gcXVpY2tseSBydWxlIG91dCBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgb3IgaWYgdGhlcmUgYXJlIG90aGVycyB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGgsIG9yIGluZmx1ZW5jZSwgdGhlIGBNUFRDUGAgc2V0dXAuIFRoZSBwcmlvcml0eSBpcyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgc28gbGV0J3Mgc3RhcnQgd2l0aCBhIHByZWxpbWluYXJ5IHN3ZWVwIHRvIGNoZWNrIGZvciBhbnkgYWRqYWNlbnQgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTkuNzYwNTY2OTQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDM6NTkuNzYyNzY1NzM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNDA2MjMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgQ2hhbmdlczogRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTVBUQ1AgcGF0Y2guIFRoZSBjb25maWdzIHRoYXQgYXJlIHJlbGV2YW50IGFyZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IGFyZSBub3cgaGFuZGxpbmcgbWVtb3J5IGxpbWl0cyBhbmQgcmV0cmFuc21pc3Npb24gaW1wcm92ZW1lbnRzLCB0byBlbnN1cmUgdGhleSdyZSByb2J1c3QgYW5kIGRvbid0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMuXG5cbkluaXRpYWxseSwgSSB3YXMgZ29pbmcgdG8gYXZvaWQgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBiZWNhdXNlIHRoZXkncmUgc3RhdGljLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhlIGd1aWRhbmNlIHRvIHByZWZlciBub24tc3RhdGljIGVudHJ5IHBvaW50cyAqdW5sZXNzKiB0aGV5IGFyZSBub3QgaW5saW5lZC4gSW4gdGhpcyBjYXNlLCBgbXB0Y3Bfd29ya2VyYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBJTklUX1dPUktgLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGFzc2lnbmVkIHRvIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXJlbGVhc2VfY2JgLCBzbyB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIHRoZW0uIFNvIEkgKndpbGwqIGluY2x1ZGUgdGhlbS5cblxuU28sIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gdGhlc2UgY3JpdGljYWwgYXJlYXM6XG5cbiogICBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2A6IFRoaXMgaGFuZGxlcyBpbmNvbWluZyBvcHRpb25zIGFuZCwgY3J1Y2lhbGx5LCBjaGVja3MgaWYgd2UncmUgb3ZlciB0aGUgbWVtb3J5IGxpbWl0LCB0aGVuIGNhbGxzIGBtcHRjcF9vdmVyX2xpbWl0YC4gVGhpcyBpcyBhIGNsZWFyIHBvaW50IHdoZXJlIG1lbW9yeSBsaW1pdHMgYXJlIGVuZm9yY2VkLlxuKiAgIGBtcHRjcF9kYXRhX3JlYWR5YDogRGVhbHMgd2l0aCBzdWJmbG93IGRhdGEgcmVhZHkgZXZlbnRzLiBXaXRoaW4gdGhpcyBmdW5jdGlvbiwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgaXMgY2FsbGVkIHdoaWNoIGluIHR1cm5zIGNhbGwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIHdoaWNoIGNhbiBkcm9wIHBhY2tldHMgaWYgdGhlIGJhY2tsb2cgaXMgZXhjZWVkZWQsIGFuZCBgX19tcHRjcF9tb3ZlX3NrYmBcbiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gbW92aW5nIFNLQnMuXG4qICAgYG1wdGNwX3dvcmtlcmA6IEl0IGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIGJ5IGNhbGxpbmcgYF9fbXB0Y3BfcmV0cmFuc2AsIHdoaWNoIGlzIG5vdyBwYXJ0IG9mIHRoZSBtZW1vcnkgbGltaXQgaGFuZGxpbmcgbG9naWMsIGFuZCBhIGNyaXRpY2FsIGFyZWEuXG4qICAgYG1wdGNwX3JlbGVhc2VfY2JgOiBBbHNvIGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIGJ5IGNhbGxpbmcgYF9fbXB0Y3BfcmV0cmFuc2AgYW5kIHBvdGVudGlhbGx5IGBfX21wdGNwX21vdmVfc2tic2AuXG5cblRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcywgZGVhbGluZyB3aXRoIG1lbW9yeSBsaW1pdHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBjb3VsZCBpbnRyb2R1Y2UgYWxsIHNvcnRzIG9mIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhvc2Ugc2VjdGlvbnMsIGJlY2F1c2UgbWVtb3J5IHByZXNzdXJlIGNhbiBleHBvc2Ugc3VidGxlIGJ1Z3MgbGlrZSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbG9naWMgZXJyb3JzIGluIHRoZSBjb2RlLiBJIHdpbGwgaW5jbHVkZSB0aGVzZSBpbiB0aGUgZnV6emluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDowOS4xMDMzOTMyMzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzcwNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz05NjE9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4Ni1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5ODc6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODgte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTU2PXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05NjAtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6OTYxOnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2Mi1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDY9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUzMC1cXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MzE6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MzItXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4NzQ9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xODg1LVxcdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODY6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODctXFx0ZWxzZSBpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2VycikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjA5LjE4Nzc2OTE0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYzMTU3NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIEF1ZGl0IG9mIE1QVENQIERhdGEgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgZGF0YSBmbG93IGhlcmUuIFRoZSBrZXkgaXMgdGhhdCBgbXB0Y3BfZGF0YV9yZWFkeWAgKmlzbid0KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQsIGdpdmVuIGhvdyBpdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIG11bHRpLXBhdGggVENQIGNvbnRleHQuIEkndmUgbm90ZWQgdGhhdCBpdCdzIGJlaW5nIGludm9rZWQgZnJvbSBib3RoIGBzdWJmbG93X2RhdGFfcmVhZHlgIGFuZCBgc3ViZmxvd19zdGF0ZV9jaGFuZ2VgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGNhbiBub3cgYmUgc3VyZSBhYm91dCB0aGlzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNpcmN1bXN0YW5jZXMgb2YgdGhlc2UgY2FsbHMuXG5cbldpdGggdGhhdCBjb25maXJtZWQsIEknbSBzaGlmdGluZyBteSBmb2N1cyB0byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIGNhdXNpbmcgdGhpcywgYW5kIGhvdyB0aGUgbXVsdGktcGF0aCBUQ1AgaGVhZGVyIGlzIHBhcnNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDoxMi4yNTA5Mjk0MzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjI5OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jPTEwNTM9c3RhdGljIHZvaWQgYWNrX3VwZGF0ZV9tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA3OC1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEwNzk6XFx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA4MC1cXHRpZiAoYWZ0ZXI2NChtc2stXFx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMTMwPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTU4LSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE2MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjEyLjMzNDU2NTI3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUwNzA5MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVyIG9mIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBcIldobydzIGFjdHVhbGx5IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXMgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGZ1bmN0aW9uP1wiIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1cHN0cmVhbSBjb2RlIHBhdGgsIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgZGF0YSBpdCdzIHN1cHBvc2VkIHRvIGhhbmRsZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLCBkYXRhIHRyYW5zbWlzc2lvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGxlciBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjE0Ljg4NTI3ODU4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNjQwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz00ODg0PXZvaWQgdGNwX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTAtXFx0LyogbXB0Y3AgY2FuJ3QgdGVsbCB1cyB0byBpZ25vcmUgcmVzZXQgcGt0cyxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODkxOlxcdCAqIHNvIGp1c3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTItXFx0ICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5My1cXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTQ6XFx0XFx0bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODk1LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTYwNz1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE2LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU2MTc6XFx0aWYgKHNrX2lzX21wdGNwKHNrKSBcXHUwMDI2XFx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTgtXFx0XFx0X19rZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTI9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczNzktXFx0XFx0XFx0ICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzM4MDpcXHRcXHRcXHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFxcdTAwMjZcXHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczODEtXFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMDUzPXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwNzgtXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMDc5OlxcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEwODAtXFx0aWYgKGFmdGVyNjQobXNrLVxcdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTEzMD1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1OC0gKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDoxNS4wNDU5MjQxNzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjU0MzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqTVBUQ1AgQ29kZSBFeHBsb3JhdGlvbjogSW5pdGlhbCBGb2N1cyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgY2FsbGVkIHdpdGhpbiBgdGNwX2lucHV0LmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBBbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgcGxheWVycyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE11bHRpcGF0aCBUQ1Agb3B0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIGluY29taW5nLiBUaGUgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYXJlOlxuXG4qICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChvYnZpb3VzbHksIHRoYXQncyB3aGVyZSB3ZSBzdGFydGVkKVxuKiAgIGBtcHRjcF9kYXRhX3JlYWR5YCAoY3JpdGljYWwsIGhvdydzIGRhdGEgc2lnbmFsbGVkPylcbiogICBgbXB0Y3BfcmVjdm1zZ2AgKGhvdyBhcmUgbWVzc2FnZXMgcHJvY2Vzc2VkIG9uIHRoZSByZWNlaXZpbmcgZW5kPylcbiogICBgbXB0Y3Bfd29ya2VyYCAoc2VlbXMgbGlrZSBhIHdvcmtlciBmdW5jdGlvbiBvciB0aHJlYWQpXG4qICAgYG1wdGNwX3JlbGVhc2VfY2JgIChjYWxsYmFjayBmb3IgcmVsZWFzaW5nIHJlc291cmNlcywgbWF5YmU/KS5cblxuSG1tLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBgbXB0Y3Bfd29ya2VyYC4gSSB3b25kZXIgaWYgdGhhdCdzIHRoZSBjYW5vbmljYWwgbmFtZSB1c2VkIGluIHRoZSBjb2RlIG9yIHBlcmhhcHMgaXQgdXNlcyBhbm90aGVyIG5hbWUgZm9yIGl0cyB3b3JrIGZ1bmN0aW9uLiBUaW1lIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgzOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIyOjQ0OjE4Ljc3MjQ3MTAwM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwNzM1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfd29ya2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MTA3Mz1ib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDc4OlxcdC8qIEdldCBhIHJlZmVyZW5jZSBvbiB0aGlzIHNvY2tldCwgbXB0Y3Bfd29ya2VyKCkgd2lsbCByZWxlYXNlIGl0Llxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzk6XFx0ICogQXMgbXB0Y3Bfd29ya2VyKCkgbWlnaHQgY29tcGxldGUgYmVmb3JlIHVzLCB3ZSBjYW4gbm90IGF2b2lkXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4MC1cXHQgKiBhIHNvY2tfaG9sZCgpL3NvY2tfcHV0KCkgaWYgc2NoZWR1bGVfd29yaygpIHJldHVybnMgZmFsc2UuXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTAtXFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgc29ja19mbGFnKHNzaywgU09DS19ERUFEKSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjUxOlxcdFxcdC8qIGVuc3VyZSBsYXRlciBjaGVjayBpbiBtcHRjcF93b3JrZXIoKSB3aWxsIGRpc3Bvc2UgdGhlIG1zayAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTItXFx0XFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3ODI9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4MjM6XFx0LyogdGhlIGNhbGxpbmcgbXB0Y3Bfd29ya2VyIHdpbGwgcHJvcGVybHkgZGVzdHJveSB0aGUgc29ja2V0ICovXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyNC1cXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA3MD1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTA2OnN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNy17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTU1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjItXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTYzOlxcdElOSVRfV09SSyhcXHUwMDI2bXNrLVxcdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjQtXFx0bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMjo0NDoxOC44NTA1NTEzMDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3ODI1NDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBNZW1vcnkgUHJlc3N1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbm5lZCBkb3duIGBtcHRjcF93b3JrZXJgIGFzIHRoZSBrZXkgd29ya3F1ZXVlIGZ1bmN0aW9uIGhlcmUuIEV4Y2VsbGVudC4gTm93LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGNvcmUgc3ltYm9sczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYG1wdGNwX3dvcmtlcmAsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoaW4gTVBUQ1AuXG5cblRoZSBzeXN0ZW0gY29uZmlncyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggYXJlIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4gTWFrZXMgc2Vuc2UsIHBhcnRpY3VsYXJseSB0aGUgbGF0dGVyLCBhcyBJUHY2IGNhbiBpbnRyb2R1Y2UgaXRzIG93biB1bmlxdWUgbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gaXMgaGFuZGxpbmcgbWVtb3J5IGxpbWl0czsgc3BlY2lmaWNhbGx5LCBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIGJhY2tsb2cgcGFja2V0cyB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBBbmQgdGhlcmUgaXMgYSBmaXggZm9yIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCB3aWxsIG5vdyBwcm9wZXJseSBwdXNoIHJldHJhbnNtaXNzaW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHJlcXVpcmVzIHJpZ29yb3VzIHRlc3RpbmcuIFRoZSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbG9naWMgZXJyb3JzIHRoYXQgY291bGQgbWFuaWZlc3QgdW5kZXIgaGlnaCBtZW1vcnkgcHJlc3N1cmUuIEkgbmVlZCB0byBkZXNpZ24gZnV6emluZyB0ZXN0cyB0aGF0IGFnZ3Jlc3NpdmVseSBleHBsb3JlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLlxuXG5SaWdodCwgdGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg2MCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjI6NDQ6MjQuMDI4ODA4MjA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjU1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3dvcmtlclwiLFxuICAgIFwibXB0Y3BfcmVsZWFzZV9jYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cyBieSBwcnVuaW5nIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgZnJvbSB0aGUgYmFja2xvZyB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQuIEl0IGFsc28gZml4ZXMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIHByb3Blcmx5IHB1c2ggcmV0cmFuc21pc3Npb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgYnVncyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gICAgXCJtcHRjcF9yZWN2bXNnXCIsXG4gICAgXCJtcHRjcF93b3JrZXJcIixcbiAgICBcIm1wdGNwX3JlbGVhc2VfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMgYnkgcHJ1bmluZyB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGFuZCBkcm9wcGluZyBwYWNrZXRzIGZyb20gdGhlIGJhY2tsb2cgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLiBJdCBhbHNvIGZpeGVzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBwcm9wZXJseSBwdXNoIHJldHJhbnNtaXNzaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGJ1Z3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[1] Phase: Succeeded StartedAt: 2026-08-01 22:44:36 +0000 UTC FinishedAt: 2026-08-01 22:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 22:44:36 +0000 UTC FinishedAt: 2026-08-01 22:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2] Phase: Succeeded StartedAt: 2026-08-01 22:44:36 +0000 UTC FinishedAt: 2026-08-02 02:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 22:44:36 +0000 UTC FinishedAt: 2026-08-02 02:33:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 22:44:36 +0000 UTC FinishedAt: 2026-08-01 22:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 22:44:36 +0000 UTC FinishedAt: 2026-08-01 22:44:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowlllpv/series-workflowlllpv-convert-artifact-711592963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 22:44:48 +0000 UTC FinishedAt: 2026-08-01 23:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 22:44:48 +0000 UTC FinishedAt: 2026-08-01 23:08:48 +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:*4a03a12b-b159-49c0-8268-a3897d293aa2,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-workflowlllpv/series-workflowlllpv-convert-artifact-711592963/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": "5293a395-68a7-4c0d-b149-501e20b8a9ad", "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-workflowlllpv/series-workflowlllpv-build-action-3097279601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 22:44:48 +0000 UTC FinishedAt: 2026-08-01 23:08:38 +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:*4a03a12b-b159-49c0-8268-a3897d293aa2,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-workflowlllpv/series-workflowlllpv-convert-artifact-711592963/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": "5293a395-68a7-4c0d-b149-501e20b8a9ad", "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-workflowlllpv/series-workflowlllpv-build-action-3097279601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 23:08:48 +0000 UTC FinishedAt: 2026-08-01 23:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 23:08:48 +0000 UTC FinishedAt: 2026-08-01 23:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 23:08:48 +0000 UTC FinishedAt: 2026-08-01 23:08:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 23:08:48 +0000 UTC FinishedAt: 2026-08-01 23:08:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowlllpv/series-workflowlllpv-convert-artifact-3097579194/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 23:08:58 +0000 UTC FinishedAt: 2026-08-01 23:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 23:08:58 +0000 UTC FinishedAt: 2026-08-01 23:10:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5293a395-68a7-4c0d-b149-501e20b8a9ad,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-workflowlllpv/series-workflowlllpv-build-action-3097279601/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-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 23:11:02 +0000 UTC FinishedAt: 2026-08-01 23:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 23:11:02 +0000 UTC FinishedAt: 2026-08-01 23:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 23:11:02 +0000 UTC FinishedAt: 2026-08-01 23:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 23:11:02 +0000 UTC FinishedAt: 2026-08-01 23:28:32 +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:*4a03a12b-b159-49c0-8268-a3897d293aa2,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-workflowlllpv/series-workflowlllpv-convert-artifact-3097579194/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": "7e8f3a6c-e86f-4f02-9c7f-891bcb91192a", "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-workflowlllpv/series-workflowlllpv-build-action-1271921950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 23:11:02 +0000 UTC FinishedAt: 2026-08-01 23:28:22 +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:*4a03a12b-b159-49c0-8268-a3897d293aa2,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-workflowlllpv/series-workflowlllpv-convert-artifact-3097579194/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": "7e8f3a6c-e86f-4f02-9c7f-891bcb91192a", "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-workflowlllpv/series-workflowlllpv-build-action-1271921950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 23:28:32 +0000 UTC FinishedAt: 2026-08-01 23:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 23:28:32 +0000 UTC FinishedAt: 2026-08-01 23:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 23:28:32 +0000 UTC FinishedAt: 2026-08-01 23:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 23:28:32 +0000 UTC FinishedAt: 2026-08-01 23:30:25 +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:*7e8f3a6c-e86f-4f02-9c7f-891bcb91192a,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-workflowlllpv/series-workflowlllpv-build-action-1271921950/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-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 23:30:34 +0000 UTC FinishedAt: 2026-08-02 02:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 23:30:34 +0000 UTC FinishedAt: 2026-08-02 02:33:57 +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":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"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:*5293a395-68a7-4c0d-b149-501e20b8a9ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7e8f3a6c-e86f-4f02-9c7f-891bcb91192a,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-workflowlllpv/series-workflowlllpv-build-action-3097279601/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-workflowlllpv/series-workflowlllpv-build-action-1271921950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 23:30:34 +0000 UTC FinishedAt: 2026-08-01 23:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 23:30:34 +0000 UTC FinishedAt: 2026-08-01 23:30:39 +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":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"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-workflowlllpv/series-workflowlllpv-convert-artifact-3802160367/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 23:30:34 +0000 UTC FinishedAt: 2026-08-01 23:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 23:30:34 +0000 UTC FinishedAt: 2026-08-01 23:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 23:30:34 +0000 UTC FinishedAt: 2026-08-01 23:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 23:30:44 +0000 UTC FinishedAt: 2026-08-02 02:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlllpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_data_ready","mptcp_recvmsg","mptcp_worker","mptcp_release_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"2eb7db41-7dd9-4429-a6d4-688094e67f7a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 23:30:44 +0000 UTC FinishedAt: 2026-08-02 02:33:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5293a395-68a7-4c0d-b149-501e20b8a9ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7e8f3a6c-e86f-4f02-9c7f-891bcb91192a,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-workflowlllpv/series-workflowlllpv-build-action-3097279601/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-workflowlllpv/series-workflowlllpv-build-action-1271921950/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-workflowlllpv/series-workflowlllpv-convert-artifact-3802160367/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,}