Name: series-workflowpvnvz Phase: Succeeded StartedAt: 2026-07-07 12:58:55 +0000 UTC FinishedAt: 2026-07-07 17:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[0] Phase: Succeeded StartedAt: 2026-07-07 12:58:55 +0000 UTC FinishedAt: 2026-07-07 13:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 12:58:55 +0000 UTC FinishedAt: 2026-07-07 13:20:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "12091470c6b4c1c14b2de12dcbae2ada6cb6d20b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "12091470c6b4c1c14b2de12dcbae2ada6cb6d20b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "4f1e6afd-19a1-45b0-860d-375aa90d3bf9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__check_buffer_access", "check_tp_buffer_access", "check_buffer_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwMDQxZjAxZDRiZjFiMDRhMjZjZjkwOGVhZDU1NjNiZWU3NTQxZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDEzOjEyOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC01MzI2LDE0ICYjNDM7NTMyNiwxOCBAQCBzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi1cdFx0XHRcdCBhcmdub190IGFyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSlcbiYjNDM7XHRcdFx0XHQgYXJnbm9fdCBhcmdubywgaW50IG9mZiwgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0IHUzMiAqYWNjZXNzX2VuZClcbiB7XG4mIzQzO1x0czY0IHN0YXJ0LCB2YXJfb2ZmO1xuJiM0MztcbiBcdGlmIChvZmYgXHUwMDNjIDApIHtcbiBcdFx0dmVyYm9zZShlbnYsXG4gXHRcdFx0XCYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcXG5cJiMzNDssXG4gXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCBzaXplKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4mIzQzO1xuIFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuIFx0XHRjaGFyIHRuX2J1Zls0OF07XG4gXG5AQCAtNTM0NCw2ICYjNDM7NTM0OCwyOSBAQCBzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbiYjNDM7XHR2YXJfb2ZmID0gKHM2NClyZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHZhcl9vZmYsIChzNjQpb2ZmLCBcdTAwMjZzdGFydCkpIHtcbiYjNDM7XHRcdHZlcmJvc2UoZW52LFxuJiM0MztcdFx0XHRcJiMzNDslcyBpbnZhbGlkICVzIGJ1ZmZlciBhY2Nlc3M6IG9mZj0lZCwgdmFyX29mZj0lbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHZlcmJvc2UoZW52LFxuJiM0MztcdFx0XHRcJiMzNDslcyBpbnZhbGlkIG5lZ2F0aXZlICVzIGJ1ZmZlciBvZmZzZXQ6IG9mZj0lZCwgdmFyX29mZj0lbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNlIFUzMl9NQVggfHwgc2l6ZSBcdTAwM2MgMCB8fFxuJiM0MztcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coKHUzMilzdGFydCwgKHUzMilzaXplLCBhY2Nlc3NfZW5kKSkge1xuJiM0MztcdFx0dmVyYm9zZShlbnYsXG4mIzQzO1x0XHRcdFwmIzM0OyVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVsbGQsIHNpemU9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIHN0YXJ0LCBzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTM1MSwxNCAmIzQzOzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4gXHRcdFx0XHQgIGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKVxuIHtcbiYjNDM7XHR1MzIgYWNjZXNzX2VuZDtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBcJiMzNDt0cmFjZXBvaW50XCYjMzQ7LCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xuJiM0MztcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgocmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgJiM0Mzsgb2ZmICYjNDM7IHNpemUsXG4tXHRcdFx0XHRcdCAgICBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3RwX2FjY2Vzcyk7XG4mIzQzO1x0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgoYWNjZXNzX2VuZCwgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUzNzAsMTMgJiM0Mzs1Mzk3LDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICB1MzIgKm1heF9hY2Nlc3MpXG4ge1xuIFx0Y29uc3QgY2hhciAqYnVmX2luZm8gPSB0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVx1MDAzZXR5cGUpID8gXCYjMzQ7cmRvbmx5XCYjMzQ7IDogXCYjMzQ7cmR3clwmIzM0OztcbiYjNDM7XHR1MzIgYWNjZXNzX2VuZDtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcbiYjNDM7XHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcdTAwMjZhY2Nlc3NfZW5kKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQqbWF4X2FjY2VzcyA9IG1heChyZWctXHUwMDNldmFyX29mZi52YWx1ZSAmIzQzOyBvZmYgJiM0Mzsgc2l6ZSwgKm1heF9hY2Nlc3MpO1xuJiM0MztcdCptYXhfYWNjZXNzID0gbWF4KGFjY2Vzc19lbmQsICptYXhfYWNjZXNzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcbmluZGV4IDIxNmIwZGZhYzBmZTYxLi5lZmU0Y2FkNDdiMjgwYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZC5jXG5AQCAtNCwxMiAmIzQzOzQsMzEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uYmQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2JwZl91dGlsLmhcJiMzNDtcbiBcbi12b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBjaGVja19uYmRfYXR0YWNoX3JlamVjdChjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnByb2dyYW0sIHNpemVfdCBwcm9nX2xlbilcbiB7XG4tXHRfX3UzMiBkdXJhdGlvbiA9IDA7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzKTtcbiBcdGNoYXIgZXJyb3JbNDA5Nl07XG4tXHRpbnQgYnBmX2ZkID0gLTEsIHRwX2ZkID0gLTE7XG4mIzQzO1x0aW50IGJwZl9mZCwgdHBfZmQ7XG4mIzQzO1xuJiM0MztcdG9wdHMubG9nX2xldmVsID0gMjtcbiYjNDM7XHRvcHRzLmxvZ19idWYgPSBlcnJvcjtcbiYjNDM7XHRvcHRzLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKTtcbiYjNDM7XG4mIzQzO1x0YnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCBcJiMzNDtHUEwgdjJcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBwcm9ncmFtLCBwcm9nX2xlbiwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYnBmX2ZkLCAwLCBcJiMzNDtwcm9nX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0cF9mZCA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKFwmIzM0O25iZF9zZW5kX3JlcXVlc3RcJiMzNDssIGJwZl9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTFQodHBfZmQsIDAsIG5hbWUpKVxuJiM0MztcdFx0Y2xvc2UodHBfZmQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShicGZfZmQpO1xuJiM0Mzt9XG4gXG4mIzQzO3ZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpXG4mIzQzO3tcbiBcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiBwcm9ncmFtW10gPSB7XG4gXHRcdC8qIHI2IGlzIG91ciB0cCBidWZmZXIgKi9cbiBcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksXG5AQCAtMTksMjUgJiM0MzszOCwxOCBAQCB2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxuIFx0XHRCUEZfRVhJVF9JTlNOKCksXG4gXHR9O1xuIFxuLVx0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzLFxuLVx0XHQubG9nX2xldmVsID0gMixcbi1cdFx0LmxvZ19idWYgPSBlcnJvcixcbi1cdFx0LmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKSxcbi1cdCk7XG4tXG4tXHRicGZfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUsIE5VTEwsIFwmIzM0O0dQTCB2MlwmIzM0Oyxcbi1cdFx0XHQgICAgICAgcHJvZ3JhbSwgQVJSQVlfU0laRShwcm9ncmFtKSxcbi1cdFx0XHQgICAgICAgXHUwMDI2b3B0cyk7XG4tXHRpZiAoQ0hFQ0soYnBmX2ZkIFx1MDAzYyAwLCBcJiMzNDticGZfcmF3X3RyYWNlcG9pbnRfd3JpdGFibGUgbG9hZFwmIzM0Oyxcbi1cdFx0ICBcJiMzNDtmYWlsZWQ6ICVkIGVycm5vICVkXFxuXCYjMzQ7LCBicGZfZmQsIGVycm5vKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcJiMzNDtuYmRfc2VuZF9yZXF1ZXN0XCYjMzQ7LCBicGZfZmQpO1xuLVx0aWYgKENIRUNLKHRwX2ZkIFx1MDAzZT0gMCwgXCYjMzQ7YnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIG9wZW5cJiMzNDssXG4tXHRcdCAgXCYjMzQ7ZXJyb25lb3VzbHkgc3VjY2VlZGVkXFxuXCYjMzQ7KSlcbi1cdFx0Z290byBvdXRfYnBmZmQ7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9pbnNuIG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbVtdID0ge1xuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHQvKiBtYWtlIHZhcl9vZmYgbmVnYXRpdmUsIGJ1dCBrZWVwIHRoZSBlZmZlY3RpdmUgYWNjZXNzIG9mZnNldCBub24tbmVnYXRpdmUgKi9cbiYjNDM7XHRcdEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR182LCAtOCksXG4mIzQzO1x0XHQvKiBvbmUgYnl0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbmJkX3JlcXVlc3Qgc3RydWN0ICovXG4mIzQzO1x0XHRCUEZfTERYX01FTShCUEZfQiwgQlBGX1JFR18wLCBCUEZfUkVHXzYsXG4mIzQzO1x0XHRcdCAgICBzaXplb2Yoc3RydWN0IG5iZF9yZXF1ZXN0KSAmIzQzOyA4KSxcbiYjNDM7XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHR9O1xuIFxuLVx0Y2xvc2UodHBfZmQpO1xuLW91dF9icGZmZDpcbi1cdGNsb3NlKGJwZl9mZCk7XG4mIzQzO1x0Y2hlY2tfbmJkX2F0dGFjaF9yZWplY3QoXCYjMzQ7bmJkX2ludmFsaWRcJiMzNDssIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSkpO1xuJiM0MztcdGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KFwmIzM0O25iZF9pbnZhbGlkX25lZ2F0aXZlX3Zhcl9vZmZcJiMzNDssXG4mIzQzO1x0XHRcdFx0bmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtLFxuJiM0MztcdFx0XHRcdEFSUkFZX1NJWkUobmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtKSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuY1xuaW5kZXggMTRhMDE3MmUyMTQxZTguLjQwNTVhNjQ0M2JjMjBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmNcbkBAIC00Nyw0ICYjNDM7NDcsMjAgQEAgbDBfJT06XHQvKiBzaGlmdCB0aGUgYnVmZmVyIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBsb2NhdGlvbiAqL1xcXG4gXHQ6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3Jhd190cmFjZXBvaW50LndcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cmF3X3RyYWNlcG9pbnRfd3JpdGFibGU6IHJlamVjdCBuZWdhdGl2ZSBjb25zdCBvZmZzZXRcJiMzNDspXG4mIzQzO19fZmFpbHVyZVxuJiM0MztfX21zZyhcJiMzNDtpbnZhbGlkIG5lZ2F0aXZlIHRyYWNlcG9pbnQgYnVmZmVyIG9mZnNldFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHRyYWNlcG9pbnRfd3JpdGFibGVfcmVqZWN0X25lZ2F0aXZlX2NvbnN0X29mZnNldCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiA9ICoodTY0ICopKHIxICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiAmIzQzOz0gLTg7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHU2NCAqKShyNiAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjAwNDFmMDFkNGJmMWIwNGEyNmNmOTA4ZWFkNTU2M2JlZTc1NDFmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTM6MTI6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01MzI2LDE0ICYjNDM7NTMyNiwxOCBAQCBzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogc3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgY29uc3QgY2hhciAqYnVmX2luZm8sCiAJCQkJIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsCi0JCQkJIGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKQomIzQzOwkJCQkgYXJnbm9fdCBhcmdubywgaW50IG9mZiwgaW50IHNpemUsCiYjNDM7CQkJCSB1MzIgKmFjY2Vzc19lbmQpCiB7CiYjNDM7CXM2NCBzdGFydCwgdmFyX29mZjsKJiM0MzsKIAlpZiAob2ZmICZsdDsgMCkgewogCQl2ZXJib3NlKGVudiwKIAkJCSYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcbiYjMzQ7LAogCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCBzaXplKTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQomIzQzOwogCWlmICghdG51bV9pc19jb25zdChyZWctJmd0O3Zhcl9vZmYpKSB7CiAJCWNoYXIgdG5fYnVmWzQ4XTsKIApAQCAtNTM0NCw2ICYjNDM7NTM0OCwyOSBAQCBzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKJiM0MzsJdmFyX29mZiA9IChzNjQpcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KHZhcl9vZmYsIChzNjQpb2ZmLCAmYW1wO3N0YXJ0KSkgewomIzQzOwkJdmVyYm9zZShlbnYsCiYjNDM7CQkJJiMzNDslcyBpbnZhbGlkICVzIGJ1ZmZlciBhY2Nlc3M6IG9mZj0lZCwgdmFyX29mZj0lbGxkXG4mIzM0OywKJiM0MzsJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZsdDsgMCkgewomIzQzOwkJdmVyYm9zZShlbnYsCiYjNDM7CQkJJiMzNDslcyBpbnZhbGlkIG5lZ2F0aXZlICVzIGJ1ZmZlciBvZmZzZXQ6IG9mZj0lZCwgdmFyX29mZj0lbGxkXG4mIzM0OywKJiM0MzsJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZndDsgVTMyX01BWCB8fCBzaXplICZsdDsgMCB8fAomIzQzOwkgICAgY2hlY2tfYWRkX292ZXJmbG93KCh1MzIpc3RhcnQsICh1MzIpc2l6ZSwgYWNjZXNzX2VuZCkpIHsKJiM0MzsJCXZlcmJvc2UoZW52LAomIzQzOwkJCSYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWxsZCwgc2l6ZT0lZFxuJiMzNDssCiYjNDM7CQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgc3RhcnQsIHNpemUpOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM1MSwxNCAmIzQzOzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAogCQkJCSAgYXJnbm9fdCBhcmdubywgaW50IG9mZiwgaW50IHNpemUpCiB7CiYjNDM7CXUzMiBhY2Nlc3NfZW5kOwogCWludCBlcnI7CiAKLQllcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCAmIzM0O3RyYWNlcG9pbnQmIzM0OywgcmVnLCBhcmdubywgb2ZmLCBzaXplKTsKJiM0MzsJZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgJiMzNDt0cmFjZXBvaW50JiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgJmFtcDthY2Nlc3NfZW5kKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZW52LSZndDtwcm9nLSZndDthdXgtJmd0O21heF90cF9hY2Nlc3MgPSBtYXgocmVnLSZndDt2YXJfb2ZmLnZhbHVlICYjNDM7IG9mZiAmIzQzOyBzaXplLAotCQkJCQkgICAgZW52LSZndDtwcm9nLSZndDthdXgtJmd0O21heF90cF9hY2Nlc3MpOwomIzQzOwllbnYtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7bWF4X3RwX2FjY2VzcyA9IG1heChhY2Nlc3NfZW5kLCBlbnYtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7bWF4X3RwX2FjY2Vzcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzNzAsMTMgJiM0Mzs1Mzk3LDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJICAgICAgIHUzMiAqbWF4X2FjY2VzcykKIHsKIAljb25zdCBjaGFyICpidWZfaW5mbyA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctJmd0O3R5cGUpID8gJiMzNDtyZG9ubHkmIzM0OyA6ICYjMzQ7cmR3ciYjMzQ7OwomIzQzOwl1MzIgYWNjZXNzX2VuZDsKIAlpbnQgZXJyOwogCi0JZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgYnVmX2luZm8sIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSk7CiYjNDM7CWVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsICZhbXA7YWNjZXNzX2VuZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCSptYXhfYWNjZXNzID0gbWF4KHJlZy0mZ3Q7dmFyX29mZi52YWx1ZSAmIzQzOyBvZmYgJiM0Mzsgc2l6ZSwgKm1heF9hY2Nlc3MpOwomIzQzOwkqbWF4X2FjY2VzcyA9IG1heChhY2Nlc3NfZW5kLCAqbWF4X2FjY2Vzcyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYwppbmRleCAyMTZiMGRmYWMwZmU2MS4uZWZlNGNhZDQ3YjI4MGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmMKQEAgLTQsMTIgJiM0Mzs0LDMxIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmJkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl91dGlsLmgmIzM0OwogCi12b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnByb2dyYW0sIHNpemVfdCBwcm9nX2xlbikKIHsKLQlfX3UzMiBkdXJhdGlvbiA9IDA7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgb3B0cyk7CiAJY2hhciBlcnJvcls0MDk2XTsKLQlpbnQgYnBmX2ZkID0gLTEsIHRwX2ZkID0gLTE7CiYjNDM7CWludCBicGZfZmQsIHRwX2ZkOwomIzQzOwomIzQzOwlvcHRzLmxvZ19sZXZlbCA9IDI7CiYjNDM7CW9wdHMubG9nX2J1ZiA9IGVycm9yOwomIzQzOwlvcHRzLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKTsKJiM0MzsKJiM0MzsJYnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCAmIzM0O0dQTCB2MiYjMzQ7LAomIzQzOwkJCSAgICAgICBwcm9ncmFtLCBwcm9nX2xlbiwgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoYnBmX2ZkLCAwLCAmIzM0O3Byb2dfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbigmIzM0O25iZF9zZW5kX3JlcXVlc3QmIzM0OywgYnBmX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQodHBfZmQsIDAsIG5hbWUpKQomIzQzOwkJY2xvc2UodHBfZmQpOwomIzQzOwomIzQzOwljbG9zZShicGZfZmQpOwomIzQzO30KIAomIzQzO3ZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpCiYjNDM7ewogCWNvbnN0IHN0cnVjdCBicGZfaW5zbiBwcm9ncmFtW10gPSB7CiAJCS8qIHI2IGlzIG91ciB0cCBidWZmZXIgKi8KIAkJQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksCkBAIC0xOSwyNSAmIzQzOzM4LDE4IEBAIHZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpCiAJCUJQRl9FWElUX0lOU04oKSwKIAl9OwogCi0JTElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzLAotCQkubG9nX2xldmVsID0gMiwKLQkJLmxvZ19idWYgPSBlcnJvciwKLQkJLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKSwKLQkpOwotCi0JYnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCAmIzM0O0dQTCB2MiYjMzQ7LAotCQkJICAgICAgIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSksCi0JCQkgICAgICAgJmFtcDtvcHRzKTsKLQlpZiAoQ0hFQ0soYnBmX2ZkICZsdDsgMCwgJiMzNDticGZfcmF3X3RyYWNlcG9pbnRfd3JpdGFibGUgbG9hZCYjMzQ7LAotCQkgICYjMzQ7ZmFpbGVkOiAlZCBlcnJubyAlZFxuJiMzNDssIGJwZl9mZCwgZXJybm8pKQotCQlyZXR1cm47Ci0KLQl0cF9mZCA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKCYjMzQ7bmJkX3NlbmRfcmVxdWVzdCYjMzQ7LCBicGZfZmQpOwotCWlmIChDSEVDSyh0cF9mZCAmZ3Q7PSAwLCAmIzM0O2JwZl9yYXdfdHJhY2Vwb2ludF93cml0YWJsZSBvcGVuJiMzNDssCi0JCSAgJiMzNDtlcnJvbmVvdXNseSBzdWNjZWVkZWRcbiYjMzQ7KSkKLQkJZ290byBvdXRfYnBmZmQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfaW5zbiBuZWdhdGl2ZV92YXJfb2ZmX3Byb2dyYW1bXSA9IHsKJiM0MzsJCUJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR182LCBCUEZfUkVHXzEsIDApLAomIzQzOwkJLyogbWFrZSB2YXJfb2ZmIG5lZ2F0aXZlLCBidXQga2VlcCB0aGUgZWZmZWN0aXZlIGFjY2VzcyBvZmZzZXQgbm9uLW5lZ2F0aXZlICovCiYjNDM7CQlCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfNiwgLTgpLAomIzQzOwkJLyogb25lIGJ5dGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG5iZF9yZXF1ZXN0IHN0cnVjdCAqLwomIzQzOwkJQlBGX0xEWF9NRU0oQlBGX0IsIEJQRl9SRUdfMCwgQlBGX1JFR182LAomIzQzOwkJCSAgICBzaXplb2Yoc3RydWN0IG5iZF9yZXF1ZXN0KSAmIzQzOyA4KSwKJiM0MzsJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfTsKIAotCWNsb3NlKHRwX2ZkKTsKLW91dF9icGZmZDoKLQljbG9zZShicGZfZmQpOwomIzQzOwljaGVja19uYmRfYXR0YWNoX3JlamVjdCgmIzM0O25iZF9pbnZhbGlkJiMzNDssIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSkpOwomIzQzOwljaGVja19uYmRfYXR0YWNoX3JlamVjdCgmIzM0O25iZF9pbnZhbGlkX25lZ2F0aXZlX3Zhcl9vZmYmIzM0OywKJiM0MzsJCQkJbmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtLAomIzQzOwkJCQlBUlJBWV9TSVpFKG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbSkpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jCmluZGV4IDE0YTAxNzJlMjE0MWU4Li40MDU1YTY0NDNiYzIwYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuYwpAQCAtNDcsNCAmIzQzOzQ3LDIwIEBAIGwwXyU9OgkvKiBzaGlmdCB0aGUgYnVmZmVyIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBsb2NhdGlvbiAqL1wKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RyYWNlcG9pbnQudyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtyYXdfdHJhY2Vwb2ludF93cml0YWJsZTogcmVqZWN0IG5lZ2F0aXZlIGNvbnN0IG9mZnNldCYjMzQ7KQomIzQzO19fZmFpbHVyZQomIzQzO19fbXNnKCYjMzQ7aW52YWxpZCBuZWdhdGl2ZSB0cmFjZXBvaW50IGJ1ZmZlciBvZmZzZXQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgdHJhY2Vwb2ludF93cml0YWJsZV9yZWplY3RfbmVnYXRpdmVfY29uc3Rfb2Zmc2V0KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXI2ID0gKih1NjQgKikocjEgJiM0MzsgMCk7CQkJCVwKJiM0MzsJcjYgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwlyMCA9ICoodTY0ICopKHI2ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOgomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZm9jdXNlZCBvbiBlbmhhbmNpbmcgYnVmZmVyIGFjY2VzcyBjaGVja3Mgd2l0aGluIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZyBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gSSBzZWUgdGhlIGNoYW5nZXMgdG91Y2ggdGhyZWUga2V5IGZ1bmN0aW9uczogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gVGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyYjMzQ7IHRvIG1lLCByaWdodCBvZmYgdGhlIGJhdC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgdGhlIG1haW4gZm9jdXMgc2VlbXMgdG8gYmUgb24gcHJldmVudGluZyBuZWdhdGl2ZSBvZmZzZXRzIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBidWZmZXIgYWNjZXNzIGJvdW5kYXJpZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLiBUaGV5JiMzOTt2ZSBhZGRlZCBjaGVja3MgZm9yIG5lZ2F0aXZlIG9mZnNldHMsIGFuZCwgY2xldmVybHksIGFyZSBjaGVja2luZyBmb3Igb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB0aGUgc3RhcnRpbmcgb2Zmc2V0IHdpdGhpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIGVuZCBwb2ludC4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIHJvYnVzdG5lc3MuCgpNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9ucyBhbmQgc2VlIGhvdyB0aGV5IGFyZSB0cmlnZ2VyZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3Mgc2FmZSB0byBzYXkgQlBGIG5lZWRzIHRvIGJlIGVuYWJsZWQgdG8gc3RhcnQsIGFuZCB0aGF0IGxpa2VseSBtZWFucyBgQ09ORklHX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIG5lZWQgdG8gYmUgc2V0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudmlyb25tZW50IHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zIHJlbGlhYmx5LgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOb3csIGxldCYjMzk7cyBmaXJlIHVwIHNvbWUgdG9vbHMgYW5kIHN0YXJ0IHZlcmlmeWluZyB0aGlzLCB3aGljaCBpcyBhIGdvb2QgdXNlIG9mIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jaGVja19idWZmZXJfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzOTM9c3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTQwMzpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFx1MDAyNmFjY2Vzc19lbmQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEJ1ZmZlciBBY2Nlc3MgQ2hlY2tzIGluIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGJ1ZmZlciBhY2Nlc3MgZnVuY3Rpb25zOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgc2ltcGx5IGBjaGVja19idWZmZXJfYWNjZXNzYC4gQ2xlYXJseSwgdGhlc2UgYXJlIGFsbCBrZXkgY29tcG9uZW50cyBvZiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgbWFpbiBjb25maWd1cmF0aW9uIGdvdmVybmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgYEJQRl9TWVNDQUxMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgYnVmZmVyIGFjY2VzcyBpcyBvZnRlbiByZWxhdGVkIHRvIHN5c3RlbSBjYWxscyBhbmQgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBCUEYgY29udGV4dC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgKnNwZWNpZmljKiBjb25maWdzIHRoYXQgZmluZS10dW5lIGBjaGVja190cF9idWZmZXJfYWNjZXNzYD8gVGhpcyBmdW5jdGlvbiYjMzk7cyBuYW1lIGltcGxpZXMgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIHRyYWNlcG9pbnRzLCBzbyBteSBpbml0aWFsIGludHVpdGlvbiBpcyB0byBjaGVjayB3aGV0aGVyIGl0JiMzOTtzIGxpbmtlZCB0byBgQlBGX0VWRU5UU2Agb3IgYFRSQUNJTkdgIHNpbmNlIHRob3NlIHNlZW0gbGlrZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHRyYWNlcG9pbnQtcmVsYXRlZCBCUEYgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTMyNj1zdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzNzc6c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3OC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzA2LVx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMwNzpcdFx0ZXJyID0gY2hlY2tfdHBfYnVmZmVyX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMwOC1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEZWR1Y3RpdmUgUmVhc29uaW5nIG9uIE1lbW9yeSBBY2Nlc3MgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY2FsbHMgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIHZlcmlmaWNhdGlvbiwgYW5kIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGNyeXN0YWxsaXplIGEgYml0LiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUsIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgaXMgYWxzbyBnZXR0aW5nIGludm9rZWQgKmRvd25zdHJlYW0qIHRocm91Z2ggYGNoZWNrX21lbV9hY2Nlc3NgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgbGF5ZXJpbmcgb2YgY2hlY2tzLCBwZXJoYXBzIGEgbW9yZSBnZW5lcmljIG1lbW9yeSBhY2Nlc3MgY2hlY2sgKGBjaGVja19tZW1fYWNjZXNzYCkgdGhhdCAqdGhlbiogZnVubmVscyBpbnRvIGEgYnVmZmVyLXNwZWNpZmljIGNoZWNrIChgY2hlY2tfYnVmZmVyX2FjY2Vzc2ApIGZvciBtb3JlIGdyYW51bGFyIHZhbGlkYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGhpZXJhcmNoeSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBpbiB0aGlzIGFyZWEsIGJlY2F1c2UgdGhlIG9yaWdpbiBhbmQgaW50ZW50IG9mIHRoZSBjaGVja3MgbWF5IGJlIGxheWVyZWQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGNvbnRpbnVlIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM5MzpzdGF0aWMgaW50IGNoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzk0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU0MDM6XHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcdTAwMjZhY2Nlc3NfZW5kKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDA0LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzMyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMzM6XHRcdGVyciA9IGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIGZhbHNlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzQtXHRcdFx0XHRcdCAgbWF4X2FjY2Vzcyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA5LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMDpcdFx0cmV0dXJuIGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTEtXHRcdFx0XHRcdCAgIGFjY2Vzc19zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzU2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCdWZmZXIgQWNjZXNzIENoZWNrcyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhyZWUga2V5IGZ1bmN0aW9ucyBoZXJlOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGVzZSBhcmUgYWxsIGNsZWFybHkgcmVsYXRlZCB0byB2YWxpZGF0aW5nIGFjY2VzcyB0byBidWZmZXJzLCB3aGljaCBpcyBhIGNvbW1vbiBzZWN1cml0eSBjb25zaWRlcmF0aW9uIGluIHRoaXMgdHlwZSBvZiBlbnZpcm9ubWVudC4KClRoZSBtZW50aW9uIG9mIGBCUEZfU1lTQ0FMTGAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYgcHJvZ3JhbXMgYW5kIGxpa2VseSBzeXN0ZW0gY2FsbCBpbnRlcmFjdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBTbywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxheSBoZXJlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgpBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhlIHNlbGZ0ZXN0IGByYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNgLiBBaCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQmIzM5O3MgYWxsIGNvbWluZyB0b2dldGhlciEgVGhpcyB0ZXN0IGlzIGZvY3VzZWQgb24gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBBbmQgdGhhdCBicmluZ3MgYENPTkZJR19CUEZfRVZFTlRTYCBpbnRvIHRoZSBlcXVhdGlvbi4gU28sIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJhdyB0cmFjZXBvaW50cywgd3JpdGFibGUgcHJvZ3JhbXMsIGFuZCB0aGUgZXZlbnRzIGluZnJhc3RydWN0dXJlLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCB0aGUgYnVmZmVyIGFjY2VzcyBjaGVja3MgYXJlIGNyaXRpY2FsIHRvIHByZXZlbnQgbWFsaWNpb3VzIHVzZSBvZiB0aGVzZSB0cmFjZXBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9NjIxNj1zdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9wcm9nX2N0eF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzMtXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjYyNzQ6XHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzUtXHRcdC8qIGFsbG93IHU2NCogYXMgY3R4ICovXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3MT1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NzctXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODc4Olx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg3OS1cdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDSU5HOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Mzc4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM3OTpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzODAtXHRcdGlmIChzdHJuY3B5X2Zyb21fdXNlcihidWYsIHVzZXJfdHBfbmFtZSwgc2l6ZW9mKGJ1ZikgLSAxKSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3MjM9c3RhdGljIGJvb2wgaXNfdHJhY2luZ19wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzI5LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzMwOlx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzMxLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxOAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHBpbiBkb3duIGV4YWN0bHkgd2hlcmUgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlcy4gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IG5ldyBwcm9ncmFtIHR5cGUsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBsYXRlc3QgaW5mb3JtYXRpb24gYW5kIGRvbiYjMzk7dCBtaXNpbnRlcnByZXQgYW55IHByaW9yLCBvbGRlciBkZWZpbml0aW9ucy4gTmV4dCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWNlc3NhcnkgdG8gaGF2ZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBlbmFibGVkLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIHRocm91Z2ggdGhlIHJlbGV2YW50IGluY2x1ZGUgZmlsZXMsIGxvb2tpbmcgZm9yIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyB0byBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYnJpbmcgdGhpcyBwcm9ncmFtIHR5cGUgaW50byBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgcmVnYXJkaW5nIHNlY3VyaXR5IGFuZCByZXNvdXJjZSBsaW1pdHMgd2l0aCByYXcgdHJhY2Vwb2ludHMgYmVpbmcgd3JpdGFibGUuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bGwgZGVwZW5kZW5jeSB0cmVlLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBwcm9ncmFtIHR5cGUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEJQRiBlY29zeXN0ZW0uIEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIGZ1bGwgbWVudGFsIG1hcCBvZiB3aGVyZSB0aGlzIHRoaW5nIGxpdmVzLCBhbmQgd2hhdCBjb250cm9scyBpdHMgYmVoYXZpb3IuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCBhbmQgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTMyPXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM4Ni0gKlx0XHQqKkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQqKixcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozODc6ICpcdFx0KipCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFKipcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zODgtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDg2LVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU1lTQ1RMLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODc6XHRCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODgtXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBCUEYgVHJhY2Vwb2ludCBJbnRlcm5hbHMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBsaWtlbHkgcmVsYXRlZCB0byB3cml0YWJsZSByYXcgdHJhY2Vwb2ludHMgYW5kLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2QgZG8gaXMgemVybyBpbiBvbiB0aGUgc291cmNlIGNvZGUsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O2QgZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBtZW50aW9uIG9mIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFYCBpcyBhIHByZXR0eSBzdHJvbmcgaGludCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBjb2RlIHJlc2lkZXMuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBsb29raW5nIGVsc2V3aGVyZSBpbml0aWFsbHk7IHRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBCUEYgcHJvZ3JhbSB0eXBlIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhc3NvY2lhdGVkIGxvZ2ljIHRoYXQgZGVmaW5lIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIHRoYXQgYGtlcm5lbC9icGYvYCBkaXJlY3Rvcnk6CgoqKkV4YW1pbmluZyBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gTXkgZm9jdXMgaXMgc3BlY2lmaWNhbGx5IG9uIGFueXRoaW5nIHJlbGF0ZWQgdG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIG9yIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVjZW50IGNoYW5nZXMgdGhlcmUgdGhhdCBhcmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbnNpZGVyIGFsbCBhbmdsZXMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciBCUEYgcHJvZ3JhbSB0eXBlIGlzIGhhbmRsZWQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTYyMTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy02MjczLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9idGYuYzo2Mjc0Olx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxua2VybmVsL2JwZi9idGYuYy02Mjc1LVx0XHQvKiBhbGxvdyB1NjQqIGFzIGN0eCAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI4NzE9c3RhdGljIGJvb2wgaXNfcGVyZm1vbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg3ODpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NzktXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0lORzpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzgwLVx0XHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzIzPXN0YXRpYyBib29sIGlzX3RyYWNpbmdfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzcyOS1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzczMDpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMS1cdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgQlBGIFByb2dyYW0gVHlwZSBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIGtub3cgaXQmIzM5O3MgaGFuZGxlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBhbHNvIGdldHMgdmVyaWZpY2F0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbiBwbGF5IGhlcmU/IEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZXMgdGhlIHZlcmlmaWVyLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgb25lLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2suIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2xhcmlmeSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xuICAxMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuICAxMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuICAxMzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbiAgMTU6XHRvYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiAgMTY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiAgMTg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuICAxOTpcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4gIDIwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG4gIDIzOlx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxuICAyNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbiAgMjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbiAgMjc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbiAgMjg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuICAyOTpcdGVuZGlmXG4gIDMwOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICAzNzpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDM4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgMzk6XHRlbmRpZlxuICA0MDpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuICA0MTpcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG4gIDQyOlx0ZW5kaWZcbiAgNDM6XHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuICA0NDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbiAgNDU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAgNDY6XHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbiAgNDc6XHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxuICA0ODpcdCMgYnRmX2VuY29kZXJfX2FkZF9zYXZlZF9mdW5jKCkgYnkga2VlcGluZyB0aGUgZmlyc3QgaW5zdGFuY2Ugc2Vlbi4gV2VcbiAgNDk6XHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXG4gIDUwOlx0IyBvdmVyIHRob3NlIHdpdGhpbiBicGZfbHNtLm8uIEhhdmluZyBicGZfbHNtX3Byb3RvLm8gcHJlY2VkZVxuICA1MTpcdCMgYnBmX2xzbS5vIGVuc3VyZXMgaXRzIERXQVJGIENVIGlzIHByb2Nlc3NlZCBlYXJseSwgZm9yY2luZyB0aGVcbiAgNTI6XHQjIGdlbmVyYXRlZCBCVEYgdG8gY29udGFpbiB0aGUgb3ZlcnJpZGVzLlxuICA1MzpcdCNcbiAgNTQ6XHQjIE5vdGFibHksIHRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGlsc3QgdGhlIGRlZHVwbGljYXRpb25cbiAgNTU6XHQjIHNlbWFudGljcyB3aXRoaW4gcGFob2xlIGFyZSByZXZpc2l0ZWQgYWNjb3JkaW5nbHkuXG4gIDU2Olx0b2JqLSR7Q09ORklHX0JQRl9MU019ICYjNDM7PSBicGZfbHNtX3Byb3RvLm8gYnBmX2xzbS5vXG4gIDU3Olx0ZW5kaWZcbiAgNTg6XHRpZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG4gIDU5Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbiAgNjA6XHRlbmRpZlxuICA2MTpcdG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG4gIDYyOlx0XG4gIDYzOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbiAgNjQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG4gIDY1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX3JlbG9jYXRlLm9cbiAgNjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBrbWVtX2NhY2hlX2l0ZXIub1xuICA2NzpcdGlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxuICA2ODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRtYWJ1Zl9pdGVyLm9cbiAgNjk6XHRlbmRpZlxuICA3MDpcdFxuICA3MTpcdENGTEFHU19SRU1PVkVfcGVyY3B1X2ZyZWVsaXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzI6XHRDRkxBR1NfUkVNT1ZFX2JwZl9scnVfbGlzdC5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gIDczOlx0Q0ZMQUdTX1JFTU9WRV9xdWV1ZV9zdGFja19tYXBzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzQ6XHRDRkxBR1NfUkVNT1ZFX2xwbV90cmllLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzU6XHRDRkxBR1NfUkVNT1ZFX3JpbmdidWYubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3NjpcdENGTEFHU19SRU1PVkVfcnFzcGlubG9jay5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDEzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGVuYWJsaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIHBpZWNlIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtLiBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGUga2V5IGZ1bmN0aW9ucyBpZGVudGlmaWVkOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIG15IGFuYWx5c2lzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBUaGF0JiMzOTtzIGdvb2QgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlIGZyb20gc3lzY2FsbHM/IFRoZSBhbnN3ZXIgaXMgeWVzLCB0aGV5IGFyZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBicGZgIHN5c2NhbGwuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LgoKVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFsbG93cyBuZWdhdGl2ZSBvZmZzZXRzIG9yIG92ZXJmbG93cyB0byBieXBhc3MgY3J1Y2lhbCBjaGVja3MuIFRoaXMgaXMgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHksIGFuZCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGhlcmUgaXMgc2lnbmlmaWNhbnQuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgYmV5b25kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGUgc2VsZi10ZXN0cyB1c2UgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwcm9ncmFtIHR5cGUgaXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQgd2hlbiBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agb3Igc2ltaWxhciBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSByZXBsaWNhdGUgdGhlIGVudmlyb25tZW50IGZvciBlZmZlY3RpdmUgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjI3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkgcmVtZW1iZXIgcnVubmluZyBhIGBncmVwYCBmb3IgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIHdpdGhpbiB0aGUgYGtlcm5lbC9gIGRpcmVjdG9yeSBhbHJlYWR5LiBUaGF0IHNob3VsZCBoYXZlIGNvdmVyZWQgbW9zdCBvZiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEkgb25seSBzYXcgaXQgbWVudGlvbmVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCwgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCB3aGljaCBtYWtlcyB0aGluZ3MgYSBiaXQgZWFzaWVyIHRvIHRyYWNrIGRvd24uIEdpdmVuIGl0JiMzOTtzIGEgcHJvZ3JhbSB0eXBlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXRzIHVzZSBpbnZvbHZlcyBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYmVjYXVzZSB0aGlzIHR5cGljYWxseSBhZmZlY3RzIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBpZiBpdCB3aWxsIHdvcmsuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTI4NzE9c3RhdGljIGJvb2wgaXNfcGVyZm1vbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg3ODpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NzktXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0lORzpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzgwLVx0XHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkJQRiBSYXcgVHJhY2Vwb2ludCBMaW5rIEF0dGFjaG1lbnQgRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGJwZl9yYXdfdHBfbGlua19hdHRhY2hgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXcgdHJhY2Vwb2ludCBsaW5raW5nIHByb2Nlc3MuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhcmUgdGhlIGtleSBhc3BlY3RzIEkgbmVlZCB0byBjb25zaWRlcj8gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyB0cmFjZXBvaW50IGluZnJhc3RydWN0dXJlLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQga3Byb2JlL3Vwcm9iZSBtYWNoaW5lcnksIG9yIGlzIGl0IGRvaW5nIHNvbWV0aGluZyBtb3JlIGRpcmVjdGx5IGF0IHRoZSBrZXJuZWwgcHJvYmUgZW50cnkgcG9pbnRzPyBJIGtub3cgcmF3IHRyYWNlcG9pbnRzIGhhdmUgdGhlaXIgb3duIHNwZWNpZmljIHNldCBvZiBjb25zdHJhaW50cywgc28gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBCUEYgdmVyaWZpZXIgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3ZlcmxhcHMgd2l0aCBvdGhlciB0cmFjZXBvaW50IGhhbmRsZXJzLiBXaGF0IGtpbmQgb2YgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIEJQRiBwcm9ncmFtIGJlaW5nIGF0dGFjaGVkPyBBcmUgdGhlcmUgc3BlY2lmaWMgY2hlY2tzIGZvciByYXcgdHJhY2Vwb2ludHMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgcmVndWxhciBgdHJhY2Vwb2ludF9wcm9iZV9hdHRhY2hgIGxvZ2ljPyBUaGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGFub3RoZXIgaW1wb3J0YW50IGFzcGVjdC4gSG93IGlzIGl0IGVuc3VyaW5nIHRoYXQgdGhlIEJQRiBwcm9ncmFtIGRvZXNuJiMzOTt0IGludGVyZmVyZSB3aXRoIG90aGVyIGtlcm5lbCBhY3Rpdml0aWVzLCBvciBjcmVhdGUgYW55IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYXR0YWNoL2RldGFjaD8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkga25vd24gb3ZlcmhlYWRzLCBjb21wYXJlZCB0byBvdGhlciBCUEYgYXR0YWNoIG1ldGhvZHM/IElzIHRoZXJlIGEgZGlmZmVyZW5jZSBpbiBtZW1vcnkgdXNhZ2U/IEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggQ1BVIGNhY2hlIGNvaGVyZW5jeSBiZWNhdXNlIG9mIHRoZSByYXcgdHJhY2Vwb2ludCBpbnRlcmFjdGlvbnM/IEkgYWxzbyBuZWVkIHRvIGJlIHZpZ2lsYW50IGZvciBhbnkgZWRnZSBjYXNlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBmYWlsdXJlIG1vZGVzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGF0dGFjaCBmYWlscz8gSG93IGFyZSByZXNvdXJjZXMgY2xlYW5lZCB1cD8gSSB3aWxsIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVycyB0aGUgZnVuY3Rpb24gYWNjZXB0cyBhbmQgdGhlIHJldHVybiB2YWx1ZXMgaXQgY2FuIHByb2R1Y2UuIEJhc2ljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgd2F5IHRvIGludGVyYWN0IHdpdGggcmF3IHRyYWNlcG9pbnRzLiBMZXQmIzM5O3Mgc2VlIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmF3X3RwX2xpbmtfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MzM3NT1zdGF0aWMgYm9vbCBicGZfbGlua19pc190cmFjZXBvaW50KHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzgwLVx0ICogYnBmX3Jhd190cF9saW5rX2xvcHMgYW5kIHRodXMgZGVhbGxvY19kZWZlcnJlZCgpLCBzZWVcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMzODE6XHQgKiBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKCkuXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzgyLVx0ICovXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM0Nj1zdGF0aWMgaW50IGJwZl9wZXJmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM1MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNTI6c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNTMtXHRcdFx0XHQgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX3RwX25hbWUsIHU2NCBjb29raWUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDQzMD1zdGF0aWMgaW50IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0NDUtXHRjb29raWUgPSBhdHRyLVx1MDAzZXJhd190cmFjZXBvaW50LmNvb2tpZTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0NDY6XHRmZCA9IGJwZl9yYXdfdHBfbGlua19hdHRhY2gocHJvZywgdHBfbmFtZSwgY29va2llLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0NDctXHRpZiAoZmQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODg3LVx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfUkFXX1RQKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg4ODpcdFx0XHRyZXQgPSBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHByb2csIE5VTEwsIGF0dHItXHUwMDNlbGlua19jcmVhdGUudHJhY2luZy5jb29raWUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODg5LVx0XHRcdFx0XHRcdCAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCBhZG9wdGluZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqQlBGIEV2ZW50IFF1ZXN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgc3R1ZmYgYWdhaW4sIGFuZCBJJiMzOTt2ZSBoaXQgYSBzbWFsbCBzbmFnLiBJJiMzOTttIHNldHRpbmcgdXAgYSByYXcgdHJhY2Vwb2ludCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAuIE15IG1pbmQga2VlcHMgY2lyY2xpbmcgYmFjayB0byB0aGlzIGZ1bmRhbWVudGFsIHF1ZXN0aW9uOiBpcyBpdCAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IHRvIGhhdmUgYEJQRl9FVkVOVFNgIGVuYWJsZWQgb3IgY29uZmlndXJlZCBpbiBvcmRlciBmb3IgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IE9yLCBwdXQgYW5vdGhlciB3YXksIGlzIHRoYXQgY29uZmlndXJhdGlvbiBhIHByZXJlcXVpc2l0ZSwgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBtZWNoYW5pc20gYXQgcGxheT8gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhbiBpbXBsaWVkIGRlcGVuZGVuY3ksIGEgYmVzdCBwcmFjdGljZSwgb3IgaWYgSSBjYW4gd29yayBhcm91bmQgaXQgc29tZWhvdy4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBiZWZvcmUgSSBpbnZlc3QgdG9vIG11Y2ggdGltZSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9yYXdfdHJhY2Vwb2ludF9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MjktXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NDMwOnN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDMxLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU5LVx0Y2FzZSBCUEZfUkFXX1RSQUNFUE9JTlRfT1BFTjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NjA6XHRcdGVyciA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ2MS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiwgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBpdHMgcG9ydGFiaWxpdHkgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFRoZSBpbml0aWFsLCBhbmQgbW9zdCBsaWtlbHksIGNydWNpYWwgcXVlc3Rpb246IGlzIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXM/IEkgbmVlZCB0byBjaGVjayBmb3IgYCNpZmRlZmAgYmxvY2tzIHN1cnJvdW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gb3IgaW1wbGVtZW50YXRpb24uIFRoYXQgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGl0cyBhdmFpbGFiaWxpdHkgdmFyaWVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGJ1aWxkIGZsYWdzLiBLbm93aW5nIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW1wb3J0YW50IGZvciBteSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmF3X3RyYWNlcG9pbnRfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDI5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQzMDpzdGF0aWMgaW50IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQzMS17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM1ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1OS1cdGNhc2UgQlBGX1JBV19UUkFDRVBPSU5UX09QRU46XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDYwOlx0XHRlcnIgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcdTAwMjZhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NjEtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkLCBhbmQgd2hhdCYjMzk7cyB0aGUgcHVycG9zZT8mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGtub3dpbmcgdGhhdCBpdCYjMzk7cyBhIGNyaXRpY2FsIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgZnVuY3Rpb24sIGxpa2VseSByZWxhdGVkIHRvIHRyYWNpbmcgcmF3IHRyYWNlcG9pbnRzIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYXJndW1lbnRzIGFyZSBzZXQgYW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBtYW5hZ2VkLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyBpdHMgaW1wbGljYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyAtIGNvdWxkIHRoZXJlIGJlIGFueSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmZpbHRlcmVkIHRyYWNlcG9pbnRzPyBBbHNvLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlbGF0ZWQgdG8gc29tZSBpbnN0cnVtZW50YXRpb24gc2V0dXAuIEkgd2lsbCBiZSBsb29raW5nIGZvcjoKCiogICAqKkFyZ3VtZW50IFZhbGlkYXRpb24qKjogV2hhdCBpbnB1dCB2YWxpZGF0aW9uIGlzIGRvbmUgb24gdGhlIHRyYWNlcG9pbnQgbmFtZSwgdGhlIGhhbmRsZXIgZnVuY3Rpb24sIGFuZCB0aGUgcHJvYmUgZGF0YSBzdHJ1Y3R1cmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcz8KKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbioqOiBIb3cgYXJlIHJlc291cmNlcyBtYW5hZ2VkIGFyb3VuZCBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gPyBJcyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJhY2UgY29uZGl0aW9ucz8KKiAgICoqRXJyb3IgSGFuZGxpbmcqKjogSXMgZXJyb3IgaGFuZGxpbmcgcm9idXN0PyBXaGF0IGhhcHBlbnMgaWYgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYCBmYWlscz8gSXMgdGhlcmUgZ3JhY2VmdWwgZGVncmFkYXRpb24gb3IgcGFuaWM/IEkgbmVlZCB0byBhbmFseXplIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgYW5kIHByb3BhZ2F0ZSB1cCB0aGUgY2FsbCBzdGFjaywgc28gdGhlIHByb2dyYW0gZG9lcyBub3QgY3Jhc2guCiogICAqKktlcm5lbCBDb250ZXh0Kio6IEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCBjb250ZXh0IHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20uIElzIGl0IHVzZXIgc3BhY2U/IEtlcm5lbCBzcGFjZT8gV2hhdCBhcmUgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBjYWxsZXI/IFRoaXMgbWF0dGVycyB0byB0cmFjZXBvaW50IGFjY2VzcyBhbmQgcG90ZW50aWFsIGV4cGxvaXRzLgoqICAgKipDb25jdXJyZW5jeSoqOiBJZiB0aGVyZSYjMzk7cyBhbnkgbXVsdGl0aHJlYWRpbmcgaW4gdGhlIHZpY2luaXR5LCBob3cgaXMgdGhlIHRyYWNlcG9pbnQgYWNjZXNzIGhhbmRsZWQ/IEFyZSB0aGVyZSBhcHByb3ByaWF0ZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gd2hlbiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBpbnZvbHZlZCBpbiB0cmFjaW5nPwoqICAgKipUcmFjZXBvaW50IFVzYWdlKio6IEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O20gYWxzbyBwbGFubmluZyB0byBpbnNwZWN0IHRoZSB0cmFjZXBvaW50IGhhbmRsZXIgZnVuY3Rpb24gYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gSXMgdGhlIGhhbmRsZXIgcGVyZm9ybWluZyBhbnkgcmlza3kgb3BlcmF0aW9ucz8KCk15IGFuYWx5c2lzIG5lZWRzIHRvIGJlIGNvbXByZWhlbnNpdmUsIGVuc3VyaW5nIG5vIHN0b25lIGlzIHVudHVybmVkLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRlbGwgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MjA6XHRcbjQ0MjE6XHRcdHJldHVybiBicGZfbGlua19zZXR0bGUoXHUwMDI2bGlua19wcmltZXIpO1xuNDQyMjpcdFxuNDQyMzpcdG91dF9wdXRfYnRwOlxuNDQyNDpcdFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xuNDQyNTpcdFx0cmV0dXJuIGVycjtcbjQ0MjY6XHR9XG40NDI3Olx0XG40NDI4Olx0I2RlZmluZSBCUEZfUkFXX1RSQUNFUE9JTlRfT1BFTl9MQVNUX0ZJRUxEIHJhd190cmFjZXBvaW50LmNvb2tpZVxuNDQyOTpcdFxuNDQzMDpcdHN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG40NDMxOlx0e1xuNDQzMjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuNDQzMzpcdFx0dm9pZCBfX3VzZXIgKnRwX25hbWU7XG40NDM0Olx0XHRfX3U2NCBjb29raWU7XG40NDM1Olx0XHRpbnQgZmQ7XG40NDM2Olx0XG40NDM3Olx0XHRpZiAoQ0hFQ0tfQVRUUihCUEZfUkFXX1RSQUNFUE9JTlRfT1BFTikpXG40NDM4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgVHJhY2Vwb2ludCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgcmF3IHRyYWNlcG9pbnRzIGFyZSBzZXQgdXAuIEl0IGxvb2tzIGxpa2UgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYCBpcyBwcm9iYWJseSBhbHdheXMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZmxpcHBlZC4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIGNvbnNpc3RlbnQgZnJvbSBhIHN5c3RlbSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuCgpCdXQgaGFuZyBvbi4uLiBJIHNlZSBhIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YCBjYWxsIGluIHRoZSBjb2RlLiBJIHJlbWVtYmVyIHRoZSBgb3BlbmAgYnV0IHdoZXJlIGV4YWN0bHkgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYHB1dGAgZGVmaW5lZD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlY2xhcmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCB1bmRlcnN0YW5kIGhvdyBpdCBjbGVhbnMgdXAgcmVzb3VyY2VzIGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIG9uIHRoZSBiYWNrZW5kLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgcHJvcGVyIHRyYWNlcG9pbnQgbWFuYWdlbWVudCBhbmQgcHJldmVudCBhbnkgbGluZ2VyaW5nIGlzc3Vlcy4gSSBuZWVkIHRvIGJlIHN1cmUgaXQmIzM5O3MgZG9pbmcgd2hhdCBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3B1dF9yYXdfdHJhY2Vwb2ludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MzkwOD1zdGF0aWMgdm9pZCBicGZfcmF3X3RwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzkxMy1cdGJwZl9wcm9iZV91bnJlZ2lzdGVyKHJhd190cC1cdTAwM2VidHAsIHJhd190cCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozOTE0Olx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChyYXdfdHAtXHUwMDNlYnRwKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM5MTUtfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzkzLVx0aWYgKHByb2ctXHUwMDNlc2xlZXBhYmxlIFx1MDAyNlx1MDAyNiAhdHJhY2Vwb2ludF9pc19mYXVsdGFibGUoYnRwLVx1MDAzZXRwKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM5NDpcdFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM5NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQyMy1vdXRfcHV0X2J0cDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0MjQ6XHRicGZfcHV0X3Jhd190cmFjZXBvaW50KGJ0cCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDI1LVx0cmV0dXJuIGVycjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4OTI9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDY5LVx0XHRcdFx0dG5hbWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDcwOlx0XHRcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoYnRwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA3MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNzQtXHRcdFx0XHRcdHRyYWNlX3N5bWJvbCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwNzU6XHRcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoYnRwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA3Ni1cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjA4Mj1zdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjA5My1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMDk0OnZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMDk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgVHJhY2Vwb2ludCBBY3RpdmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgaXRzIGZ1bmN0aW9uIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgdG8gYWN0dWFsbHkgKmVuYWJsZSogdGhpcyBjb2RlPyBJIGtub3cgdGhpcyBhcmVhIGRlYWxzIHdpdGggQlBGLWJhc2VkIHRyYWNlcG9pbnRzLCBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBlbmFibGluZyBmbGFnIGluIHRoZSBrZXJuZWwgY29uZmlnLiBJcyBpdCBhIHNwZWNpZmljIEJQRi1yZWxhdGVkIG9wdGlvbj8gSXMgaXQgdGllZCB0byBhIGJyb2FkZXIgdHJhY2luZyBmcmFtZXdvcmsgc2V0dGluZz8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBzbyBJIGNhbiB0aGVuIHNlZSBob3cgdGhpcyB0cmFjZXBvaW50IGZ1bmN0aW9uYWxpdHkgZml0cyBpbiB0aGUgZ3JlYXRlciBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbmZpZyBkZXBlbmRlbmN5IGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlIGFuZCB0cm91Ymxlc2hvb3RpbmcgYW55IGlzc3VlcyB0aGF0IGNvbWUgdXAuIExldCBtZSBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY3Jvc3MtcmVmZXJlbmNlcyB0byBmaW5kIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGZsYWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2V2ZW50c191c2VyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICYjNDM7PSBicGZfdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2twcm9iZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDoKCioqT24gQlBGIFRyYWNlcG9pbnQgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbXBpbGF0aW9uIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkgbmVlZCB0byBlbmFibGUgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGdldHRpbmcgYGJwZl90cmFjZS5vYCBsaW5rZWQgcHJvcGVybHkuIE5vdywgaWYgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyAqZGlzYWJsZWQqLCB0aGVuIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YC4uLiB5ZWFoLCBJJiMzOTtkIGJldCBhIHByZXR0eSBnb29kIHN1bSB0aGF0IGZ1bmN0aW9uIGlzIGp1c3QgZGVmaW5lZCBhcyBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24sIG9yIG1heWJlIGV2ZW4gY29tcGxldGVseSBzdHJpcHBlZCBvdXQgYnkgdGhlIGNvbXBpbGVyLiBObyByZWFsIHJ1bnRpbWUgb3ZlcmhlYWQsIGJ1dCBhbHNvIGNvbXBsZXRlbHkgdXNlbGVzcyBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeS4gTWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCBzbyB0aGF0IEkgY2FuIGxpbmsgdGhlIG5lY2Vzc2FyeSBCUEYgZXZlbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wdXRfcmF3X3RyYWNlcG9pbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBCUEYgVHJhY2Vwb2ludHMqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRyYWNlcG9pbnRzIGFyZSBiZWluZyBoYW5kbGVkIGF0IHRoZSBCUEYgbGV2ZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBrZXJuZWwtbGV2ZWwgdHJhY2luZyBtZWNoYW5pc20sIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCB3aXRoIHRoZSBjb3JlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gQlBGIGFuZCB0cmFjaW5nLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aG9zZSBidWlsZGluZyBibG9ja3Mgd291bGQgYmUgYGluY2x1ZGUvbGludXgvYnBmX3RyYWNlLmhgLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGluY2x1ZGUgZGlyZWN0b3J5IHN0cnVjdHVyZSwgaWYgSSYjMzk7bSBzbGlnaHRseSBvZmYgb24gdGhlIGV4YWN0IGZpbGUgbmFtZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIGhvdyB0aGVzZSB0cmFjZXBvaW50cyBhcmUgZGVmaW5lZCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGVtLCBhbmQgd2hhdCByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGludGVyZXN0IGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBoZWFkZXIgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3B1dF9yYXdfdHJhY2Vwb2ludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NzgyPXN0cnVjdCBicGZfcmF3X2V2ZW50X21hcCAqYnBmX2dldF9yYXdfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKTtcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzgzOnZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCk7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc4NC1pbnQgYnBmX2dldF9wZXJmX2V2ZW50X2luZm8oY29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1MzIgKnByb2dfaWQsXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04MjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTgyNy19XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjgyODpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cClcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgRXZlbnRzIGFuZCBCdWZmZXIgQWNjZXNzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgcmF3IHRyYWNlcG9pbnRzIGFyZSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oYC4gUmlnaHQsIG1ha2VzIHNlbnNlLiBBbmQsIGFzIGV4cGVjdGVkLCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgdXNpbmcgdGhlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgZW5hYmxpbmcgdGhhdCBhbHNvIGFmZmVjdHMgaG93IHRoZSB2ZXJpZmllciBkZWFscyB3aXRoIGJ1ZmZlciBhY2Nlc3MuIExldCYjMzk7cyB0cmFjZSBpdCBiYWNrLgoKVGhlIGZ1bmN0aW9uIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgIHNvdW5kcyByZWxldmFudCwgc28gSSYjMzk7bGwgc2VlIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGlyZWN0bHkgY2FsbGVkIGJ5IGBjaGVja190cF9idWZmZXJfYWNjZXNzYCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiAgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGBjaGVja19tZW1fYWNjZXNzYCB3aGljaCBoYW5kbGVzIGEgdmFyaWV0eSBvZiBwb2ludGVyIHR5cGVzLCBpbmNsdWRpbmcgYFBUUl9UT19NQVBfVkFMVUVgLCBgUFRSX1RPX01BUF9LRVlgLCBhbmQgYSBidW5jaCBvZiBvdGhlcnMuIFdhaXQsIEkgc2VlIGBQVFJfVE9fQlVGYCBpbiB0aGF0IGxpc3QsIHNvIGBjaGVja19idWZmZXJfYWNjZXNzYCBpcyBhbHNvIGNhbGxlZCB3aGVuIGRlYWxpbmcgd2l0aCByZWd1bGFyIGJ1ZmZlcnMsIG5vdCBqdXN0IHRyYWNlcG9pbnQgZGF0YT8gVGhpcyBpcyBnb29kIHRvIGtub3csIGFuZCBwb3RlbnRpYWxseSB3aGVyZSB0aGUgY29ubmVjdGlvbiBpcy4KClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIGNhbGxzIHRvIGBjaGVja19idWZmZXJfYWNjZXNzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGggZGlmZmVyZW50IGNvbnRleHRzLCBpbmNsdWRpbmcgYnVmZmVycy4gVGhhdCYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCB0aGUgaW5zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM5MzpzdGF0aWMgaW50IGNoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzk0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU0MDM6XHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcdTAwMjZhY2Nlc3NfZW5kKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDA0LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzMyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMzM6XHRcdGVyciA9IGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIGZhbHNlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzQtXHRcdFx0XHRcdCAgbWF4X2FjY2Vzcyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA5LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMDpcdFx0cmV0dXJuIGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTEtXHRcdFx0XHRcdCAgIGFjY2Vzc19zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBgY2hlY2tfYnVmZmVyX2FjY2Vzc2Agd2l0aGluIGBjaGVja19tZW1fYWNjZXNzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AuIEl0IGxvb2tzIGxpa2UgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSwgb3IgbWF5YmUgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMsIHVuZGVyIHdoaWNoIGBjaGVja19idWZmZXJfYWNjZXNzYCBpcyBiZWluZyBpbnZva2VkICp3aXRoaW4qIHRoZSBicm9hZGVyIG1lbW9yeSBhY2Nlc3MgdmFsaWRhdGlvbiBwZXJmb3JtZWQgYnkgYGNoZWNrX21lbV9hY2Nlc3NgLiBJJiMzOTttIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlJiMzOTtzIGFueSBjb250ZXh0IEkgY2FuIGdsZWFuIGZyb20gKmhvdyogYW5kICp3aGVuKiBpdCYjMzk7cyBjYWxsZWQuIEFyZSB0aGVyZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBiZWluZyBwcm90ZWN0ZWQsIHBhcnRpY3VsYXIgYWNjZXNzIHR5cGVzIGJlaW5nIHNjcnV0aW5pemVkIChyZWFkcywgd3JpdGVzLCBldGMuKSwgb3IgcGVyaGFwcyBlcnJvciBjb25kaXRpb25zIGJlaW5nIHRyaWdnZXJlZD8gS25vd2luZyB0aGF0IGxpbmthZ2Ugd2lsbCBoZWxwIGNsYXJpZnkgaG93IG1lbW9yeSBhY2Nlc3NlcywgZ2VuZXJhbGx5LCBhcmUgYmVpbmcgdmFsaWRhdGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBzZWN1cml0eSBjaGVjaz8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjMyMDpcdFx0XHR1MzIgKm1heF9hY2Nlc3M7XG42MzIxOlx0XG42MzIyOlx0XHRcdGlmIChyZG9ubHlfbWVtKSB7XG42MzIzOlx0XHRcdFx0aWYgKHQgPT0gQlBGX1dSSVRFKSB7XG42MzI0Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42MzI1Olx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjYzMjY6XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNjMyNzpcdFx0XHRcdH1cbjYzMjg6XHRcdFx0XHRtYXhfYWNjZXNzID0gXHUwMDI2ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9yZG9ubHlfYWNjZXNzO1xuNjMyOTpcdFx0XHR9IGVsc2Uge1xuNjMzMDpcdFx0XHRcdG1heF9hY2Nlc3MgPSBcdTAwMjZlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3Jkd3JfYWNjZXNzO1xuNjMzMTpcdFx0XHR9XG42MzMyOlx0XG42MzMzOlx0XHRcdGVyciA9IGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIGZhbHNlLFxuNjMzNDpcdFx0XHRcdFx0XHQgIG1heF9hY2Nlc3MpO1xuNjMzNTpcdFxuNjMzNjpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAocmRvbmx5X21lbSB8fCB0ID09IEJQRl9SRUFEKSlcbjYzMzc6XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuNjMzODpcdFx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQVJFTkEpIHtcbjYzMzk6XHRcdFx0aWYgKHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgYHJkb25seV9tZW1gKioKCkFscmlnaHQsIHNvIHRoZSBwaHJhc2UgYHJkb25seV9tZW1gIGp1c3QgcG9wcGVkIHVwLCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaXQgc2lnbmlmaWVzIGluIHRoaXMgY29udGV4dC4gUmF0aGVyIHRoYW4ganVtcGluZyB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGdldCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLCBzbyBJJiMzOTtsbCByZXdpbmQgYSBiaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uY2VwdCBpbiBkZXRhaWwsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSeKAmWxsIG1ha2Ugc3VyZSB0byBnZXQgdGhlIGZ1bGwgc2NvcGUgYnkgcmUtcmVhZGluZyB0aGUgcmVsZXZhbnQgcGFydHMsIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCBhbGwgbWFrZXMgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MjkwOlx0XHRcdFx0XHR2YWx1ZV9yZWdubyk7XG42MjkxOlx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG42MjkyOlx0XHRcdH1cbjYyOTM6XHRcbjYyOTQ6XHRcdFx0ZXJyID0gY2hlY2tfZmxvd19rZXlzX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSk7XG42Mjk1Olx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG42Mjk2Olx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbjYyOTc6XHRcdH0gZWxzZSBpZiAodHlwZV9pc19za19wb2ludGVyKHJlZy1cdTAwM2V0eXBlKSkge1xuNjI5ODpcdFx0XHRpZiAodCA9PSBCUEZfV1JJVEUpIHtcbjYyOTk6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42MzAwOlx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZ190eXBlX3N0cihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG42MzAxOlx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG42MzAyOlx0XHRcdH1cbjYzMDM6XHRcdFx0ZXJyID0gY2hlY2tfc29ja19hY2Nlc3MoZW52LCBpbnNuX2lkeCwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0KTtcbjYzMDQ6XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbjYzMDU6XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuNjMwNjpcdFx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XG42MzA3Olx0XHRcdGVyciA9IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xuNjMwODpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKVxuNjMwOTpcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG42MzEwOlx0XHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbjYzMTE6XHRcdFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSB7XG42MzEyOlx0XHRcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxuNjMxMzpcdFx0XHRcdFx0XHQgICAgICB2YWx1ZV9yZWdubyk7XG42MzE0Olx0XHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IENPTlNUX1BUUl9UT19NQVApIHtcbjYzMTU6XHRcdFx0ZXJyID0gY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXG42MzE2Olx0XHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbjYzMTc6XHRcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlVGIFx1MDAyNlx1MDAyNlxuNjMxODpcdFx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbjYzMTk6XHRcdFx0Ym9vbCByZG9ubHlfbWVtID0gdHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cdTAwM2V0eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gQnVmZmVyIEFjY2VzcyBDaGVja3MqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHdlJiMzOTtyZSBpbiB0aGUgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBQVFJfVE9fQlVGYC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmU/IElzIHRoaXMgdXNhZ2Ugc3BlY2lmaWMgdG8gYGJwZl9keW5wdHJgIG9yIHBlcmhhcHMgc29tZXRoaW5nIGFuYWxvZ291cyB0byBpdD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUuIE9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB3aGF0IGBQVFJfVE9fQlVGYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gTGV0IG1lIHRyYWNlIHRoYXQgZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvdHRhIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBidWZmZXIgaXMgYmVpbmcgYWNjZXNzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWNjZXNzIGNoZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFRSX1RPX0JVRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9Njg0OD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjk3MC1cdFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGUpO1xua2VybmVsL2JwZi9idGYuYzo2OTcxOlx0XHRpZiAoY3R4X2FyZ19pbmZvLVx1MDAzZW9mZnNldCA9PSBvZmYgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvYnRmLmMtNjk3Mi1cdFx0ICAgIChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpIHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTM5OT1jb25zdCBjaGFyICpyZWdfdHlwZV9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTQyMC1cdFx0W1BUUl9UT19BUkVOQV1cdFx0PSBcJiMzNDthcmVuYVwmIzM0Oyxcbmtlcm5lbC9icGYvbG9nLmM6NDIxOlx0XHRbUFRSX1RPX0JVRl1cdFx0PSBcJiMzNDtidWZcJiMzNDssXG5rZXJuZWwvYnBmL2xvZy5jLTQyMi1cdFx0W1BUUl9UT19GVU5DXVx0XHQ9IFwmIzM0O2Z1bmNcJiMzNDssXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbWFwX2VsZW1fcmVnX2luZm8gPSB7XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTE4MC1cdFx0eyBvZmZzZXRvZihzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSwga2V5KSxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxODE6XHRcdCAgUFRSX1RPX0JVRiB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSB9LFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTE4Mi1cdFx0eyBvZmZzZXRvZihzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSwgdmFsdWUpLFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjE4MzpcdFx0ICBQVFJfVE9fQlVGIHwgUFRSX01BWUJFX05VTEwgfSxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xODQtXHR9LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NTA3PXN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy02MTItXHRjYXNlIFBUUl9UT19NRU06XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjYxMzpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjE0LVx0Y2FzZSBQVFJfVE9fVFBfQlVGRkVSOlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzA3PXN0YXRpYyBib29sIGlzX3NwaWxsYWJsZV9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjItXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMzpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzI0LVx0Y2FzZSBQVFJfVE9fTUVNOlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDk4PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMTYtXHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzE3Olx0fSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMxOC1cdFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Nzk3LVx0XHRcdFx0XHQgICAgICAgemVyb19zaXplX2FsbG93ZWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTg6XHRjYXNlIFBUUl9UT19CVUY6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc5OS1cdFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgbWVtX3R5cGVzID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Nzc1LVx0XHRQVFJfVE9fTUVNIHwgTUVNX1JJTkdCVUYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzc3NjpcdFx0UFRSX1RPX0JVRixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Nzc3LVx0XHRQVFJfVE9fQlRGX0lEIHwgUFRSX1RSVVNURUQsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwMjc9c3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNjktXHRjYXNlIFBUUl9UT19NRU0gfCBNRU1fUklOR0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDcwOlx0Y2FzZSBQVFJfVE9fQlVGOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjgwNzE6XHRjYXNlIFBUUl9UT19CVUYgfCBNRU1fUkRPTkxZOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNzItXHRjYXNlIFBUUl9UT19BUkVOQTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM2NzM9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzczNS1cdGNhc2UgUFRSX1RPX01FTTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzczNjpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzczNy1cdGNhc2UgUFRSX1RPX0ZVTkM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgUG9pbnRlciBUeXBlcyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGUgdXNhZ2Ugb2YgcG9pbnRlciB0eXBlcyBpbiBCUEYsIHNwZWNpZmljYWxseSBgUFRSX1RPX0JVRmAgYW5kIGBQVFJfVE9fVFBfQlVGRkVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFBUUl9UT19CVUZgIGlzIHJlbGV2YW50IHRvIGBicGZfaXRlcmAsIGxpa2UgdGhlIHJlZ2lzdHJhdGlvbiBpbmZvIGluIGBicGZfbWFwX2VsZW1fcmVnX2luZm9gLiBUaGlzIG1lYW5zIHRoZSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgaW4gdGhlIHBhdGggZm9yIGBicGZfaXRlcmAgcHJvZ3JhbXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AgaXMgdHJpZ2dlcmVkIGJ5IGBQVFJfVE9fVFBfQlVGRkVSYCwgYW5kIHRoYXQgcG9pbnRlciB0eXBlIGlzIGRpcmVjdGx5IHRpZWQgdG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIGFuZCBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVGAuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIGlmIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UYCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gYENPTkZJR19CUEZfRVZFTlRTYC4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYGJwZl90cmFjZS5jYCBkZWFscyB3aXRoIHJhdyB0cmFjZXBvaW50cywgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZ28gdGhlcmUgZm9yIGNvbmZpcm1hdGlvbi4gWWVzLCBjb25maXJtZWQuIFdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0JQRl9FVkVOVFNgIHRvIHByb3Blcmx5IHRlc3QgdGhlIGBQVFJfVE9fVFBfQlVGRkVSYCBwYXRoLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjaXJjbGUgYmFjayB0byBgUFRSX1RPX0JVRmAgYW5kIGBicGZfaXRlcmAuIERvZXMgYGJwZl9pdGVyYCBoYXZlIGl0cyBvd24gY29uZmlnIHJlcXVpcmVtZW50cz8gVGhpcyBpcyBpbXBvcnRhbnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGluIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgRnVuY3Rpb25hbGl0eSBhbmQgVGVzdCBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQlBGIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQgbmVlZHMgdGVzdGluZy4gIGBicGZfaXRlci5vYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCBtZWFuaW5nIHRoZSBgUFRSX1RPX0JVRmAgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUganVzdCB3aXRoIHRoYXQgY29uZmlndXJhdGlvbi4gQnV0LCB0byB0ZXN0IGBQVFJfVE9fVFBfQlVGRkVSYCwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9FVkVOVFNgIGVuYWJsZWQuICBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBJJiMzOTtsbCBhZGQgYEJQRl9FVkVOVFNgIHRvIGBFbmFibGVDb25maWdzYCB0byBtYWtlIHN1cmUgSSBjYW4gdGVzdCB0aGUgZnVsbCBmdW5jdGlvbmFsaXR5LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBidWZmZXIgYWNjZXNzIGNoZWNrcywgc3BlY2lmaWNhbGx5IHRoZSBgX19jaGVja19idWZmZXJfYWNjZXNzYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBieXBhc3MgZm9yIG5lZ2F0aXZlIGB2YXJfb2ZmYCB2YWx1ZXMgaW4gdGhlIG9mZnNldCBjYWxjdWxhdGlvbi4gVGhlIHZlcmlmaWVyIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYSBuZWdhdGl2ZSBgc3RhcnRgIGFmdGVyIHRoZSBhZGRpdGlvbiwgd2hpY2ggaXMgZ29vZC4KYGBgYwoJdmFyX29mZiA9IChzNjQpcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwoJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyh2YXJfb2ZmLCAoczY0KW9mZiwgJmFtcDtzdGFydCkpIHsKCQl2ZXJib3NlKGVudiwKCQkJJiMzNDslcyBpbnZhbGlkICVzIGJ1ZmZlciBhY2Nlc3M6IG9mZj0lZCwgdmFyX29mZj0lbGxkXG4mIzM0OywKCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCB2YXJfb2ZmKTsKCQlyZXR1cm4gLUVBQ0NFUzsKCX0KCglpZiAoc3RhcnQgJmx0OyAwKSB7CgkJdmVyYm9zZShlbnYsCgkJCSYjMzQ7JXMgaW52YWxpZCBuZWdhdGl2ZSAlcyBidWZmZXIgb2Zmc2V0OiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxuJiMzNDssCgkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7CgkJcmV0dXJuIC1FQUNDRVM7Cgl9CgoJaWYgKHN0YXJ0ICZndDsgVTMyX01BWCB8fCBzaXplICZsdDsgMCB8fAoJICAgIGNoZWNrX2FkZF9vdmVyZmxvdygodTMyKXN0YXJ0LCAodTMyKXNpemUsIGFjY2Vzc19lbmQpKSB7CgkJdmVyYm9zZShlbnYsCgkJCSYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWxsZCwgc2l6ZT0lZFxuJiMzNDssCgkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIHN0YXJ0LCBzaXplKTsKCQlyZXR1cm4gLUVBQ0NFUzsKCX0KYGBgClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXIuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBmb3IgdGVzdGluZyBhcmUgYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZXNlIGFyZSBpbmxpbmVkLiBUaGV5IGFyZSBhbGwgc3RhdGljIHdoaWNoIG1lYW5zIHRoZXkgY291bGQgYmUgaW5saW5lZCwgYnV0IGlmIHRoZXkgYXJlIG5vdCBmdWxseSBpbmxpbmVkLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogdGhlbS4gQW5kIGlmIG5vdCwgaXQgd2lsbCBqdXN0IGZ1enogdGhlIGNhbGxlciBgY2hlY2tfbWVtX2FjY2Vzc2AsIHNvIGl0IHdpbGwgc3RpbGwgYmUgdXNlZnVsLiBJJiMzOTtsbCBzdGljayB3aXRoIHRob3NlIHRocmVlIGZvciBub3cuCgpMZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXNpZGUgZnJvbSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCwgYW55dGhpbmcgZWxzZSBpbnZvbHZlZD8KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIHdoZXJlIHRoZXNlIGBjaGVja19idWZmZXJfYWNjZXNzYCB2YXJpYW50cyBhcmUgdXNlZC4gQWgsIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AgYWxzbyB1c2VzIGBjaGVja19idWZmZXJfYWNjZXNzYC4gR29vZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19oZWxwZXJfbWVtX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjYxNT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JhbmdlX2luaXRpYWxpemVkKFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzYwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3NjE6c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NjItXHRcdFx0XHQgICBpbnQgYWNjZXNzX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGFjY2Vzc190eXBlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02ODUxPXN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4OTQtXHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg5NTpcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjg5Ni1cdFx0XHRcdCAgICAgIGFjY2Vzc190eXBlLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY5MDg9c3RhdGljIGludCBjaGVja19tZW1fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MzQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjkzNTpcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY5MzY6XHRlcnIgPSBlcnIgPzogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfV1JJVEUsIHRydWUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MzctXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgyMjQ9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzM3LVx0XHRrZXlfc2l6ZSA9IG1ldGEtXHUwMDNlbWFwLnB0ci1cdTAwM2VrZXlfc2l6ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MzM4Olx0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBrZXlfc2l6ZSwgQlBGX1JFQUQsIGZhbHNlLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzM5LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzY0LVx0XHRtZXRhLVx1MDAzZXJhd19tb2RlID0gYXJnX3R5cGUgXHUwMDI2IE1FTV9VTklOSVQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODM2NTpcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vX2Zyb21fcmVnKHJlZ25vKSwgbWV0YS1cdTAwM2VtYXAucHRyLVx1MDAzZXZhbHVlX3NpemUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODM2Ni1cdFx0XHRcdFx0ICAgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDA4LVx0XHRpZiAoYXJnX3R5cGUgXHUwMDI2IE1FTV9GSVhFRF9TSVpFKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODQwOTpcdFx0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg0MTAtXHRcdFx0XHRcdFx0ICAgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3MD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1OC1cdC8qIFRoaXMgaXMgdGhlIGNhdGNoIGFsbCBhcmd1bWVudCB0eXBlIG9mIHJlZ2lzdGVyIHR5cGVzIHN1cHBvcnRlZCBieVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzU5Olx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MuIEhvd2V2ZXIsIHdlIG9ubHkgYWxsb3cgd2hlbiBhcmd1bWVudCB0eXBlIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjAtXHQgKiBwb2ludGVyIHRvIHNjYWxhciwgb3Igc3RydWN0IGNvbXBvc2VkIChyZWN1cnNpdmVseSkgb2Ygc2NhbGFycy4gV2hlblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSGVscGVyIEFyZ3VtZW50IFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyB3ZSB2YWxpZGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBoZWxwZXJzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCB3aGljaCBtZWFucyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgcHJvYmFibHkgZ2V0cyBhIGxvdCBvZiB1c2UsIGFuZCBub3QganVzdCBmb3IgdGhlIG9idmlvdXMgY2FzZXMgbGlrZSBgUFRSX1RPX0JVRmAgYW5kIGBQVFJfVE9fVFBfQlVGRkVSYC4gSG1tLCBpdCBqdXN0IHN0cnVjayBtZTogYGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzYCAqaXRzZWxmKiBjYWxscyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2Agd2hlbiBkZWFsaW5nIHdpdGggYFBUUl9UT19CVUZgLiBSaWdodC4gU2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3NgIGRpcmVjdGx5IGFuZCBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NzYwOlx0XG42NzYxOlx0c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuNjc2MjpcdFx0XHRcdFx0ICAgaW50IGFjY2Vzc19zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhY2Nlc3NfdHlwZSxcbjY3NjM6XHRcdFx0XHRcdCAgIGJvb2wgemVyb19zaXplX2FsbG93ZWQsXG42NzY0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG42NzY1Olx0e1xuNjc2NjpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuNjc2NzpcdFx0dTMyICptYXhfYWNjZXNzO1xuNjc2ODpcdFxuNjc2OTpcdFx0c3dpdGNoIChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpKSB7XG42NzcwOlx0XHRjYXNlIFBUUl9UT19QQUNLRVQ6XG42NzcxOlx0XHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcbjY3NzI6XHRcdFx0cmV0dXJuIGNoZWNrX3BhY2tldF9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcbjY3NzM6XHRcdFx0XHRcdFx0ICAgemVyb19zaXplX2FsbG93ZWQpO1xuNjc3NDpcdFx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcbjY3NzU6XHRcdFx0aWYgKGFjY2Vzc190eXBlID09IEJQRl9XUklURSkge1xuNjc3NjpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBjYW5ub3Qgd3JpdGUgaW50byAlc1xcblwmIzM0OyxcbjY3Nzc6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjY3Nzg6XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjY3Nzk6XHRcdFx0fVxuNjc4MDpcdFx0XHRyZXR1cm4gY2hlY2tfbWVtX3JlZ2lvbl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcbjY3ODE6XHRcdFx0XHRcdFx0ICAgICAgIHJlZy1cdTAwM2VtYXBfcHRyLVx1MDAzZWtleV9zaXplLCBmYWxzZSk7XG42NzgyOlx0XHRjYXNlIFBUUl9UT19NQVBfVkFMVUU6XG42NzgzOlx0XHRcdGlmIChjaGVja19tYXBfYWNjZXNzX3R5cGUoZW52LCByZWcsIDAsIGFjY2Vzc19zaXplLCBhY2Nlc3NfdHlwZSkpXG42Nzg0Olx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG42Nzg1Olx0XHRcdHJldHVybiBjaGVja19tYXBfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgMCwgYWNjZXNzX3NpemUsXG42Nzg2Olx0XHRcdFx0XHRcdHplcm9fc2l6ZV9hbGxvd2VkLCBBQ0NFU1NfSEVMUEVSKTtcbjY3ODc6XHRcdGNhc2UgUFRSX1RPX01FTTpcbjY3ODg6XHRcdFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkpIHtcbjY3ODk6XHRcdFx0XHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XG42NzkwOlx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42NzkxOlx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjY3OTI6XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNjc5MzpcdFx0XHRcdH1cbjY3OTQ6XHRcdFx0fVxuNjc5NTpcdFx0XHRyZXR1cm4gY2hlY2tfbWVtX3JlZ2lvbl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLFxuNjc5NjpcdFx0XHRcdFx0XHQgICAgICAgYWNjZXNzX3NpemUsIHJlZy1cdTAwM2VtZW1fc2l6ZSxcbjY3OTc6XHRcdFx0XHRcdFx0ICAgICAgIHplcm9fc2l6ZV9hbGxvd2VkKTtcbjY3OTg6XHRcdGNhc2UgUFRSX1RPX0JVRjpcbjY3OTk6XHRcdFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkpIHtcbjY4MDA6XHRcdFx0XHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XG42ODAxOlx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42ODAyOlx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjY4MDM6XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNjgwNDpcdFx0XHRcdH1cbjY4MDU6XHRcbjY4MDY6XHRcdFx0XHRtYXhfYWNjZXNzID0gXHUwMDI2ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9yZG9ubHlfYWNjZXNzO1xuNjgwNzpcdFx0XHR9IGVsc2Uge1xuNjgwODpcdFx0XHRcdG1heF9hY2Nlc3MgPSBcdTAwMjZlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3Jkd3JfYWNjZXNzO1xuNjgwOTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBCdWZmZXIgQWNjZXNzIENoZWNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2Agc3BlY2lmaWNhbGx5IHVzZXMgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIHdoZW4gZGVhbGluZyB3aXRoIGBQVFJfVE9fQlVGYC4gU28sIGBjaGVja19idWZmZXJfYWNjZXNzYCBpcywgYXQgaXRzIGNvcmUsIGRlc2lnbmVkIGZvciBoYW5kbGluZyBgUFRSX1RPX0JVRmAgYWNjZXNzZXMuIFNpbWlsYXJseSwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgIGlzIGNsZWFybHkgdGFyZ2V0ZWQgZm9yIGBQVFJfVE9fVFBfQlVGRkVSYC4gSW50ZXJlc3RpbmdseSwgYm90aCB0aGVzZSBmdW5jdGlvbnMgdWx0aW1hdGVseSByZWx5IG9uIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AsIGFuZCBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGJ1ZmZlciBhY2Nlc3MgY2hlY2tzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYENPTkZJR19UUkFDSU5HYCBpcyBhbHNvIG5lY2Vzc2FyeS4gYENPTkZJR19CUEZfRVZFTlRTYCB1c3VhbGx5IGRlcGVuZHMgb24gYENPTkZJR19UUkFDSU5HYCwgYnV0IEkgY2FuIGp1c3QgbGlzdCBgQlBGX0VWRU5UU2AgZm9yIG5vdy4gTGV0IG1lIGNvbnN1bHQgYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgYEJQRl9FVkVOVFNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYxOAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgQlBGIFZlcmlmaWVyIEJvdW5kcyBDaGVjayBCeXBhc3MqKgoKT2theSwgc28gYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGl0JiMzOTtzIGNsZWFyIHRoYXQgZm9jdXNpbmcgb24gYEJQRl9FVkVOVFNgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGZvciB0aGUgY29uZmlndXJhdGlvbi4gTGV0IG1lIHN1bW1hcml6ZSBteSB0aGlua2luZyBoZXJlLiBXZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBmaXggaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IG5lZWRzIHRob3JvdWdoIHRlc3RpbmcuCgpUaGUgaGlnaC1sZXZlbCBzdW1tYXJ5IGlzOgoqICAgV2UmIzM5O3JlIGRlZmluaXRlbHkgZnV6emluZyB0aGlzLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCiogICBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgd2UgbmVlZCB0byB0YXJnZXQgd2l0aCBvdXIgZnV6emluZyBlZmZvcnRzLCBhbmQgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFyZToKICAgICogICBgX19jaGVja19idWZmZXJfYWNjZXNzYAogICAgKiAgIGBjaGVja190cF9idWZmZXJfYWNjZXNzYAogICAgKiAgIGBjaGVja19idWZmZXJfYWNjZXNzYAoqICAgVGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgZHVyaW5nIGZ1enppbmcgYXJlOgogICAgKiAgIGBCUEZfU1lTQ0FMTGAKICAgICogICBgQlBGX0VWRU5UU2AKClRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBhIGJvdW5kcyBjaGVja2luZyBieXBhc3Mgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSB2dWxuZXJhYmlsaXR5IGFsbG93cyBuZWdhdGl2ZSB2YXJpYWJsZSBvZmZzZXRzIHRvIGJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIHRoZSBpbnRlbmRlZCBidWZmZXIgYm91bmRhcmllcywgYWZmZWN0aW5nIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgcGF0Y2ggaXRzZWxmIGltcGxlbWVudHMgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3Mgd2l0aGluIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCB3aGljaCBpcyBhIGNvcmUgdmVyaWZpZXIgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGZ1enppbmcgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIG9yIHNpbWlsYXIgYnlwYXNzZXMuCgpJIGRvdWJsZS1jaGVja2VkIHRvIGNvbmZpcm0gdGhhdCB0aGUgbGlzdGVkIGZ1bmN0aW9ucyB3ZXJlIHRoZSBvbmx5IG9uZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLCBhbmQgdGhhdCYjMzk7cyBjb3JyZWN0OiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIHdlcmUgYWxsIGltcGFjdGVkLgoKVGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBhbmQgZG9jdW1lbnQgb3VyIHBsYW5uZWQgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2hlY2tfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja190cF9idWZmZXJfYWNjZXNzJiMzNDssCiAgICAmIzM0O2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBib3VuZHMgY2hlY2tpbmcgYnlwYXNzIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgbmVnYXRpdmUgdmFyaWFibGUgb2Zmc2V0cyBjb3VsZCBiZSB1c2VkIHRvIGFjY2VzcyBtZW1vcnkgb3V0IG9mIGJvdW5kcyBmb3IgdHJhY2Vwb2ludCBidWZmZXJzIGFuZCBvdGhlciBidWZmZXIgdHlwZXMuIFRoZSBjaGFuZ2VzIGFkZCBvdmVyZmxvdyBhbmQgbmVnYXRpdmUgb2Zmc2V0IGNoZWNrcyBpbiBgX19jaGVja19idWZmZXJfYWNjZXNzYC4gVGhpcyBpcyBhIGNvcmUgdmVyaWZpZXIgc2VjdXJpdHkgZml4IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzaW1pbGFyIGJ5cGFzc2VzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTI6MjUuNzkxODE3MTE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDE2MDMyNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19jaGVja19idWZmZXJfYWNjZXNzXCIsXG4gICAgXCJjaGVja190cF9idWZmZXJfYWNjZXNzXCIsXG4gICAgXCJjaGVja19idWZmZXJfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBib3VuZHMgY2hlY2tpbmcgYnlwYXNzIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgbmVnYXRpdmUgdmFyaWFibGUgb2Zmc2V0cyBjb3VsZCBiZSB1c2VkIHRvIGFjY2VzcyBtZW1vcnkgb3V0IG9mIGJvdW5kcyBmb3IgdHJhY2Vwb2ludCBidWZmZXJzIGFuZCBvdGhlciBidWZmZXIgdHlwZXMuIFRoZSBjaGFuZ2VzIGFkZCBvdmVyZmxvdyBhbmQgbmVnYXRpdmUgb2Zmc2V0IGNoZWNrcyBpbiBgX19jaGVja19idWZmZXJfYWNjZXNzYC4gVGhpcyBpcyBhIGNvcmUgdmVyaWZpZXIgc2VjdXJpdHkgZml4IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzaW1pbGFyIGJ5cGFzc2VzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjoyNS43OTE4MjYyMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjc1MzA1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMDA0MWYwMWQ0YmYxYjA0YTI2Y2Y5MDhlYWQ1NTYzYmVlNzU0MWY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTM6MTI6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC01MzI2LDE0ICs1MzI2LDE4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpidWZfaW5mbyxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLVxcdFxcdFxcdFxcdCBhcmdub190IGFyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0IGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplLFxcbitcXHRcXHRcXHRcXHQgdTMyICphY2Nlc3NfZW5kKVxcbiB7XFxuK1xcdHM2NCBzdGFydCwgdmFyX29mZjtcXG4rXFxuIFxcdGlmIChvZmYgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LFxcbiBcXHRcXHRcXHRcXFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgc2l6ZSk7XFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuK1xcbiBcXHRpZiAoIXRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbiBcXHRcXHRjaGFyIHRuX2J1Zls0OF07XFxuIFxcbkBAIC01MzQ0LDYgKzUzNDgsMjkgQEAgc3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdH1cXG4gXFxuK1xcdHZhcl9vZmYgPSAoczY0KXJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyh2YXJfb2ZmLCAoczY0KW9mZiwgXFx1MDAyNnN0YXJ0KSkge1xcbitcXHRcXHR2ZXJib3NlKGVudixcXG4rXFx0XFx0XFx0XFxcIiVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVkLCB2YXJfb2ZmPSVsbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7XFxuK1xcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXFwiJXMgaW52YWxpZCBuZWdhdGl2ZSAlcyBidWZmZXIgb2Zmc2V0OiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCB2YXJfb2ZmKTtcXG4rXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGFydCBcXHUwMDNlIFUzMl9NQVggfHwgc2l6ZSBcXHUwMDNjIDAgfHxcXG4rXFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdygodTMyKXN0YXJ0LCAodTMyKXNpemUsIGFjY2Vzc19lbmQpKSB7XFxuK1xcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWxsZCwgc2l6ZT0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgc3RhcnQsIHNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTUzNTEsMTQgKzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4gXFx0XFx0XFx0XFx0ICBhcmdub190IGFyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSlcXG4ge1xcbitcXHR1MzIgYWNjZXNzX2VuZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFxcXCJ0cmFjZXBvaW50XFxcIiwgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcXG4rXFx0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgXFxcInRyYWNlcG9pbnRcXFwiLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFxcdTAwMjZhY2Nlc3NfZW5kKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfdHBfYWNjZXNzID0gbWF4KHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZSArIG9mZiArIHNpemUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X3RwX2FjY2Vzcyk7XFxuK1xcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfdHBfYWNjZXNzID0gbWF4KGFjY2Vzc19lbmQsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfdHBfYWNjZXNzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUzNzAsMTMgKzUzOTcsMTQgQEAgc3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdCAgICAgICB1MzIgKm1heF9hY2Nlc3MpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqYnVmX2luZm8gPSB0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVxcdTAwM2V0eXBlKSA/IFxcXCJyZG9ubHlcXFwiIDogXFxcInJkd3JcXFwiO1xcbitcXHR1MzIgYWNjZXNzX2VuZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xcbitcXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcXHUwMDI2YWNjZXNzX2VuZCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHQqbWF4X2FjY2VzcyA9IG1heChyZWctXFx1MDAzZXZhcl9vZmYudmFsdWUgKyBvZmYgKyBzaXplLCAqbWF4X2FjY2Vzcyk7XFxuK1xcdCptYXhfYWNjZXNzID0gbWF4KGFjY2Vzc19lbmQsICptYXhfYWNjZXNzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuY1xcbmluZGV4IDIxNmIwZGZhYzBmZTYxLi5lZmU0Y2FkNDdiMjgwYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcXG5AQCAtNCwxMiArNCwzMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmJkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJicGZfdXRpbC5oXFxcIlxcbiBcXG4tdm9pZCB0ZXN0X3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQodm9pZClcXG4rc3RhdGljIHZvaWQgY2hlY2tfbmJkX2F0dGFjaF9yZWplY3QoY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcHJvZ3JhbSwgc2l6ZV90IHByb2dfbGVuKVxcbiB7XFxuLVxcdF9fdTMyIGR1cmF0aW9uID0gMDtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzKTtcXG4gXFx0Y2hhciBlcnJvcls0MDk2XTtcXG4tXFx0aW50IGJwZl9mZCA9IC0xLCB0cF9mZCA9IC0xO1xcbitcXHRpbnQgYnBmX2ZkLCB0cF9mZDtcXG4rXFxuK1xcdG9wdHMubG9nX2xldmVsID0gMjtcXG4rXFx0b3B0cy5sb2dfYnVmID0gZXJyb3I7XFxuK1xcdG9wdHMubG9nX3NpemUgPSBzaXplb2YoZXJyb3IpO1xcbitcXG4rXFx0YnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCBcXFwiR1BMIHYyXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHByb2dyYW0sIHByb2dfbGVuLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJwZl9mZCwgMCwgXFxcInByb2dfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0cF9mZCA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKFxcXCJuYmRfc2VuZF9yZXF1ZXN0XFxcIiwgYnBmX2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfTFQodHBfZmQsIDAsIG5hbWUpKVxcbitcXHRcXHRjbG9zZSh0cF9mZCk7XFxuK1xcbitcXHRjbG9zZShicGZfZmQpO1xcbit9XFxuIFxcbit2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxcbit7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiBwcm9ncmFtW10gPSB7XFxuIFxcdFxcdC8qIHI2IGlzIG91ciB0cCBidWZmZXIgKi9cXG4gXFx0XFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksXFxuQEAgLTE5LDI1ICszOCwxOCBAQCB2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxcbiBcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuIFxcdH07XFxuIFxcbi1cXHRMSUJCUEZfT1BUUyhicGZfcHJvZ19sb2FkX29wdHMsIG9wdHMsXFxuLVxcdFxcdC5sb2dfbGV2ZWwgPSAyLFxcbi1cXHRcXHQubG9nX2J1ZiA9IGVycm9yLFxcbi1cXHRcXHQubG9nX3NpemUgPSBzaXplb2YoZXJyb3IpLFxcbi1cXHQpO1xcbi1cXG4tXFx0YnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCBcXFwiR1BMIHYyXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSksXFxuLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2b3B0cyk7XFxuLVxcdGlmIChDSEVDSyhicGZfZmQgXFx1MDAzYyAwLCBcXFwiYnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIGxvYWRcXFwiLFxcbi1cXHRcXHQgIFxcXCJmYWlsZWQ6ICVkIGVycm5vICVkXFxcXG5cXFwiLCBicGZfZmQsIGVycm5vKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcXFwibmJkX3NlbmRfcmVxdWVzdFxcXCIsIGJwZl9mZCk7XFxuLVxcdGlmIChDSEVDSyh0cF9mZCBcXHUwMDNlPSAwLCBcXFwiYnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIG9wZW5cXFwiLFxcbi1cXHRcXHQgIFxcXCJlcnJvbmVvdXNseSBzdWNjZWVkZWRcXFxcblxcXCIpKVxcbi1cXHRcXHRnb3RvIG91dF9icGZmZDtcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuIG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbVtdID0ge1xcbitcXHRcXHRCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfNiwgQlBGX1JFR18xLCAwKSxcXG4rXFx0XFx0LyogbWFrZSB2YXJfb2ZmIG5lZ2F0aXZlLCBidXQga2VlcCB0aGUgZWZmZWN0aXZlIGFjY2VzcyBvZmZzZXQgbm9uLW5lZ2F0aXZlICovXFxuK1xcdFxcdEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR182LCAtOCksXFxuK1xcdFxcdC8qIG9uZSBieXRlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBuYmRfcmVxdWVzdCBzdHJ1Y3QgKi9cXG4rXFx0XFx0QlBGX0xEWF9NRU0oQlBGX0IsIEJQRl9SRUdfMCwgQlBGX1JFR182LFxcbitcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBuYmRfcmVxdWVzdCkgKyA4KSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbiBcXG4tXFx0Y2xvc2UodHBfZmQpO1xcbi1vdXRfYnBmZmQ6XFxuLVxcdGNsb3NlKGJwZl9mZCk7XFxuK1xcdGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KFxcXCJuYmRfaW52YWxpZFxcXCIsIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSkpO1xcbitcXHRjaGVja19uYmRfYXR0YWNoX3JlamVjdChcXFwibmJkX2ludmFsaWRfbmVnYXRpdmVfdmFyX29mZlxcXCIsXFxuK1xcdFxcdFxcdFxcdG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbSxcXG4rXFx0XFx0XFx0XFx0QVJSQVlfU0laRShuZWdhdGl2ZV92YXJfb2ZmX3Byb2dyYW0pKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmNcXG5pbmRleCAxNGEwMTcyZTIxNDFlOC4uNDA1NWE2NDQzYmMyMGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXFxuQEAgLTQ3LDQgKzQ3LDIwIEBAIGwwXyU9OlxcdC8qIHNoaWZ0IHRoZSBidWZmZXIgcG9pbnRlciB0byBhIHZhcmlhYmxlIGxvY2F0aW9uICovXFxcXFxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitTRUMoXFxcInJhd190cmFjZXBvaW50LndcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJyYXdfdHJhY2Vwb2ludF93cml0YWJsZTogcmVqZWN0IG5lZ2F0aXZlIGNvbnN0IG9mZnNldFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwiaW52YWxpZCBuZWdhdGl2ZSB0cmFjZXBvaW50IGJ1ZmZlciBvZmZzZXRcXFwiKVxcbitfX25ha2VkIHZvaWQgdHJhY2Vwb2ludF93cml0YWJsZV9yZWplY3RfbmVnYXRpdmVfY29uc3Rfb2Zmc2V0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9ICoodTY0ICopKHIxICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gKih1NjQgKikocjYgKyAwKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6XFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjoyNy4xNjAwMTQwODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTY0NzgyNDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfYnVmZmVyX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDA0MWYwMWQ0YmYxYjA0YTI2Y2Y5MDhlYWQ1NTYzYmVlNzU0MWY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMzoxMjoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC01MzI2LDE0ICs1MzI2LDE4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gc3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCBjb25zdCBjaGFyICpidWZfaW5mbyxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLVx0XHRcdFx0IGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKVxuK1x0XHRcdFx0IGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplLFxuK1x0XHRcdFx0IHUzMiAqYWNjZXNzX2VuZClcbiB7XG4rXHRzNjQgc3RhcnQsIHZhcl9vZmY7XG4rXG4gXHRpZiAob2ZmIFx1MDAzYyAwKSB7XG4gXHRcdHZlcmJvc2UoZW52LFxuIFx0XHRcdFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcXG5cIixcbiBcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHNpemUpO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbitcbiBcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbiBcdFx0Y2hhciB0bl9idWZbNDhdO1xuIFxuQEAgLTUzNDQsNiArNTM0OCwyOSBAQCBzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbitcdHZhcl9vZmYgPSAoczY0KXJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyh2YXJfb2ZmLCAoczY0KW9mZiwgXHUwMDI2c3RhcnQpKSB7XG4rXHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcblwiLFxuK1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXJ0IFx1MDAzYyAwKSB7XG4rXHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFwiJXMgaW52YWxpZCBuZWdhdGl2ZSAlcyBidWZmZXIgb2Zmc2V0OiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcblwiLFxuK1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXJ0IFx1MDAzZSBVMzJfTUFYIHx8IHNpemUgXHUwMDNjIDAgfHxcbitcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coKHUzMilzdGFydCwgKHUzMilzaXplLCBhY2Nlc3NfZW5kKSkge1xuK1x0XHR2ZXJib3NlKGVudixcbitcdFx0XHRcIiVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVsbGQsIHNpemU9JWRcXG5cIixcbitcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBzdGFydCwgc2l6ZSk7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTUzNTEsMTQgKzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4gXHRcdFx0XHQgIGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKVxuIHtcbitcdHUzMiBhY2Nlc3NfZW5kO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwidHJhY2Vwb2ludFwiLCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xuK1x0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgXCJ0cmFjZXBvaW50XCIsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgocmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgKyBvZmYgKyBzaXplLFxuLVx0XHRcdFx0XHQgICAgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MpO1xuK1x0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgoYWNjZXNzX2VuZCwgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUzNzAsMTMgKzUzOTcsMTQgQEAgc3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgICAgIHUzMiAqbWF4X2FjY2VzcylcbiB7XG4gXHRjb25zdCBjaGFyICpidWZfaW5mbyA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkgPyBcInJkb25seVwiIDogXCJyZHdyXCI7XG4rXHR1MzIgYWNjZXNzX2VuZDtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcbitcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFx1MDAyNmFjY2Vzc19lbmQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdCptYXhfYWNjZXNzID0gbWF4KHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlICsgb2ZmICsgc2l6ZSwgKm1heF9hY2Nlc3MpO1xuK1x0Km1heF9hY2Nlc3MgPSBtYXgoYWNjZXNzX2VuZCwgKm1heF9hY2Nlc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuY1xuaW5kZXggMjE2YjBkZmFjMGZlNjEuLmVmZTRjYWQ0N2IyODBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcbkBAIC00LDEyICs0LDMxIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmJkLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl91dGlsLmhcIlxuIFxuLXZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpXG4rc3RhdGljIHZvaWQgY2hlY2tfbmJkX2F0dGFjaF9yZWplY3QoY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnByb2dyYW0sIHNpemVfdCBwcm9nX2xlbilcbiB7XG4tXHRfX3UzMiBkdXJhdGlvbiA9IDA7XG4rXHRMSUJCUEZfT1BUUyhicGZfcHJvZ19sb2FkX29wdHMsIG9wdHMpO1xuIFx0Y2hhciBlcnJvcls0MDk2XTtcbi1cdGludCBicGZfZmQgPSAtMSwgdHBfZmQgPSAtMTtcbitcdGludCBicGZfZmQsIHRwX2ZkO1xuK1xuK1x0b3B0cy5sb2dfbGV2ZWwgPSAyO1xuK1x0b3B0cy5sb2dfYnVmID0gZXJyb3I7XG4rXHRvcHRzLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKTtcbitcbitcdGJwZl9mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSwgTlVMTCwgXCJHUEwgdjJcIixcbitcdFx0XHQgICAgICAgcHJvZ3JhbSwgcHJvZ19sZW4sIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYnBmX2ZkLCAwLCBcInByb2dfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcIm5iZF9zZW5kX3JlcXVlc3RcIiwgYnBmX2ZkKTtcbitcdGlmICghQVNTRVJUX0xUKHRwX2ZkLCAwLCBuYW1lKSlcbitcdFx0Y2xvc2UodHBfZmQpO1xuK1xuK1x0Y2xvc2UoYnBmX2ZkKTtcbit9XG4gXG4rdm9pZCB0ZXN0X3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQodm9pZClcbit7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gcHJvZ3JhbVtdID0ge1xuIFx0XHQvKiByNiBpcyBvdXIgdHAgYnVmZmVyICovXG4gXHRcdEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR182LCBCUEZfUkVHXzEsIDApLFxuQEAgLTE5LDI1ICszOCwxOCBAQCB2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxuIFx0XHRCUEZfRVhJVF9JTlNOKCksXG4gXHR9O1xuIFxuLVx0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzLFxuLVx0XHQubG9nX2xldmVsID0gMixcbi1cdFx0LmxvZ19idWYgPSBlcnJvcixcbi1cdFx0LmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKSxcbi1cdCk7XG4tXG4tXHRicGZfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUsIE5VTEwsIFwiR1BMIHYyXCIsXG4tXHRcdFx0ICAgICAgIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSksXG4tXHRcdFx0ICAgICAgIFx1MDAyNm9wdHMpO1xuLVx0aWYgKENIRUNLKGJwZl9mZCBcdTAwM2MgMCwgXCJicGZfcmF3X3RyYWNlcG9pbnRfd3JpdGFibGUgbG9hZFwiLFxuLVx0XHQgIFwiZmFpbGVkOiAlZCBlcnJubyAlZFxcblwiLCBicGZfZmQsIGVycm5vKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcIm5iZF9zZW5kX3JlcXVlc3RcIiwgYnBmX2ZkKTtcbi1cdGlmIChDSEVDSyh0cF9mZCBcdTAwM2U9IDAsIFwiYnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIG9wZW5cIixcbi1cdFx0ICBcImVycm9uZW91c2x5IHN1Y2NlZWRlZFxcblwiKSlcbi1cdFx0Z290byBvdXRfYnBmZmQ7XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gbmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtW10gPSB7XG4rXHRcdEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR182LCBCUEZfUkVHXzEsIDApLFxuK1x0XHQvKiBtYWtlIHZhcl9vZmYgbmVnYXRpdmUsIGJ1dCBrZWVwIHRoZSBlZmZlY3RpdmUgYWNjZXNzIG9mZnNldCBub24tbmVnYXRpdmUgKi9cbitcdFx0QlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzYsIC04KSxcbitcdFx0Lyogb25lIGJ5dGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG5iZF9yZXF1ZXN0IHN0cnVjdCAqL1xuK1x0XHRCUEZfTERYX01FTShCUEZfQiwgQlBGX1JFR18wLCBCUEZfUkVHXzYsXG4rXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgbmJkX3JlcXVlc3QpICsgOCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdH07XG4gXG4tXHRjbG9zZSh0cF9mZCk7XG4tb3V0X2JwZmZkOlxuLVx0Y2xvc2UoYnBmX2ZkKTtcbitcdGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KFwibmJkX2ludmFsaWRcIiwgcHJvZ3JhbSwgQVJSQVlfU0laRShwcm9ncmFtKSk7XG4rXHRjaGVja19uYmRfYXR0YWNoX3JlamVjdChcIm5iZF9pbnZhbGlkX25lZ2F0aXZlX3Zhcl9vZmZcIixcbitcdFx0XHRcdG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbSxcbitcdFx0XHRcdEFSUkFZX1NJWkUobmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtKSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuY1xuaW5kZXggMTRhMDE3MmUyMTQxZTguLjQwNTVhNjQ0M2JjMjBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmNcbkBAIC00Nyw0ICs0NywyMCBAQCBsMF8lPTpcdC8qIHNoaWZ0IHRoZSBidWZmZXIgcG9pbnRlciB0byBhIHZhcmlhYmxlIGxvY2F0aW9uICovXFxcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuK1NFQyhcInJhd190cmFjZXBvaW50LndcIilcbitfX2Rlc2NyaXB0aW9uKFwicmF3X3RyYWNlcG9pbnRfd3JpdGFibGU6IHJlamVjdCBuZWdhdGl2ZSBjb25zdCBvZmZzZXRcIilcbitfX2ZhaWx1cmVcbitfX21zZyhcImludmFsaWQgbmVnYXRpdmUgdHJhY2Vwb2ludCBidWZmZXIgb2Zmc2V0XCIpXG4rX19uYWtlZCB2b2lkIHRyYWNlcG9pbnRfd3JpdGFibGVfcmVqZWN0X25lZ2F0aXZlX2NvbnN0X29mZnNldCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHI2ID0gKih1NjQgKikocjEgKyAwKTtcdFx0XHRcdFxcXG4rXHRyNiArPSAtODtcdFx0XHRcdFx0XFxcbitcdHIwID0gKih1NjQgKikocjYgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDpcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjEyOjI3LjE2MDAxNTQ2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTU0Nzc1NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIGVuaGFuY2luZyBidWZmZXIgYWNjZXNzIGNoZWNrcyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nIGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzXCIgdG8gbWUsIHJpZ2h0IG9mZiB0aGUgYmF0LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBtYWluIGZvY3VzIHNlZW1zIHRvIGJlIG9uIHByZXZlbnRpbmcgbmVnYXRpdmUgb2Zmc2V0cyBhbmQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gY2FsY3VsYXRpbmcgYnVmZmVyIGFjY2VzcyBib3VuZGFyaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHdyaXRlcy4gVGhleSd2ZSBhZGRlZCBjaGVja3MgZm9yIG5lZ2F0aXZlIG9mZnNldHMsIGFuZCwgY2xldmVybHksIGFyZSBjaGVja2luZyBmb3Igb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB0aGUgc3RhcnRpbmcgb2Zmc2V0IHdpdGhpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIGVuZCBwb2ludC4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgdGhlIHZlcmlmaWVyJ3Mgcm9idXN0bmVzcy5cblxuTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aG9zZSB0aHJlZSBmdW5jdGlvbnMgYW5kIHNlZSBob3cgdGhleSBhcmUgdHJpZ2dlcmVkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBzYWZlIHRvIHNheSBCUEYgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byBzdGFydCwgYW5kIHRoYXQgbGlrZWx5IG1lYW5zIGBDT05GSUdfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgbmVlZCB0byBiZSBzZXQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBlbnZpcm9ubWVudCB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucyByZWxpYWJseS5cblxuVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOb3csIGxldCdzIGZpcmUgdXAgc29tZSB0b29scyBhbmQgc3RhcnQgdmVyaWZ5aW5nIHRoaXMsIHdoaWNoIGlzIGEgZ29vZCB1c2Ugb2YgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjEyOjQ1LjMxNDc5NDI2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwNDc2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTUyNzI9c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzI1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MzI2OnN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKmJ1Zl9pbmZvLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBcXFwidHJhY2Vwb2ludFxcXCIsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXFx1MDAyNmFjY2Vzc19lbmQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzg1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTM5Mz1zdGF0aWMgaW50IGNoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NDAzOlxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFxcdTAwMjZhY2Nlc3NfZW5kKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTQwNC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjo0Ni45NTUyNzYyOTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDMyMTEyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEJ1ZmZlciBBY2Nlc3MgQ2hlY2tzIGluIHRoZSBCUEYgVmVyaWZpZXIqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBidWZmZXIgYWNjZXNzIGZ1bmN0aW9uczogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIHNpbXBseSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIENsZWFybHksIHRoZXNlIGFyZSBhbGwga2V5IGNvbXBvbmVudHMgb2YgdGhlIEJQRiB2ZXJpZmllci4gVGhlIG1haW4gY29uZmlndXJhdGlvbiBnb3Zlcm5pbmcgdGhpcyBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGBCUEZfU1lTQ0FMTGAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGJ1ZmZlciBhY2Nlc3MgaXMgb2Z0ZW4gcmVsYXRlZCB0byBzeXN0ZW0gY2FsbHMgYW5kIGRhdGEgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgKnNwZWNpZmljKiBjb25maWdzIHRoYXQgZmluZS10dW5lIGBjaGVja190cF9idWZmZXJfYWNjZXNzYD8gVGhpcyBmdW5jdGlvbidzIG5hbWUgaW1wbGllcyBpdCdzIGFzc29jaWF0ZWQgd2l0aCB0cmFjZXBvaW50cywgc28gbXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgdG8gY2hlY2sgd2hldGhlciBpdCdzIGxpbmtlZCB0byBgQlBGX0VWRU5UU2Agb3IgYFRSQUNJTkdgIHNpbmNlIHRob3NlIHNlZW0gbGlrZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHRyYWNlcG9pbnQtcmVsYXRlZCBCUEYgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjo1MS4zODczOTE2MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2NjI5NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01MzI2PXN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM3NzpzdGF0aWMgaW50IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3OC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMDYtXFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gUFRSX1RPX1RQX0JVRkZFUikge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzA3OlxcdFxcdGVyciA9IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzA4LVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTI6NTEuNzY0MDI2NjkxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE5ODI0NTgwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVkdWN0aXZlIFJlYXNvbmluZyBvbiBNZW1vcnkgQWNjZXNzIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBjYWxscyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgdmVyaWZpY2F0aW9uLCBhbmQgaXQncyBzdGFydGluZyB0byBjcnlzdGFsbGl6ZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2UgYSBub3RlLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGlzIGFsc28gZ2V0dGluZyBpbnZva2VkICpkb3duc3RyZWFtKiB0aHJvdWdoIGBjaGVja19tZW1fYWNjZXNzYC4gVGhhdCdzIGltcG9ydGFudC4gSXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgbGF5ZXJpbmcgb2YgY2hlY2tzLCBwZXJoYXBzIGEgbW9yZSBnZW5lcmljIG1lbW9yeSBhY2Nlc3MgY2hlY2sgKGBjaGVja19tZW1fYWNjZXNzYCkgdGhhdCAqdGhlbiogZnVubmVscyBpbnRvIGEgYnVmZmVyLXNwZWNpZmljIGNoZWNrIChgY2hlY2tfYnVmZmVyX2FjY2Vzc2ApIGZvciBtb3JlIGdyYW51bGFyIHZhbGlkYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGhpZXJhcmNoeSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBpbiB0aGlzIGFyZWEsIGJlY2F1c2UgdGhlIG9yaWdpbiBhbmQgaW50ZW50IG9mIHRoZSBjaGVja3MgbWF5IGJlIGxheWVyZWQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGNvbnRpbnVlIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjEzOjEzLjc0NjQ4NjU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTgwNDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19idWZmZXJfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTI3Mj1zdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzMjY6c3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTMyNy1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqYnVmX2luZm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTM3Nz1zdGF0aWMgaW50IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzgzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1Mzg0OlxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFxcXCJ0cmFjZXBvaW50XFxcIiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcXHUwMDI2YWNjZXNzX2VuZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzkyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MzkzOnN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzk0LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU0MDM6XFx0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgYnVmX2luZm8sIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXFx1MDAyNmFjY2Vzc19lbmQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDA0LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMzM6XFx0XFx0ZXJyID0gY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgZmFsc2UsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzQtXFx0XFx0XFx0XFx0XFx0ICBtYXhfYWNjZXNzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzYxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA5LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMDpcXHRcXHRyZXR1cm4gY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIDAsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTEtXFx0XFx0XFx0XFx0XFx0ICAgYWNjZXNzX3NpemUsIHplcm9fc2l6ZV9hbGxvd2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMzoxNC4wMzgyOTYwNTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk4MzE4NzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQnVmZmVyIEFjY2VzcyBDaGVja3MgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIGhlcmU6IGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AsIGFuZCBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSByZWxhdGVkIHRvIHZhbGlkYXRpbmcgYWNjZXNzIHRvIGJ1ZmZlcnMsIHdoaWNoIGlzIGEgY29tbW9uIHNlY3VyaXR5IGNvbnNpZGVyYXRpb24gaW4gdGhpcyB0eXBlIG9mIGVudmlyb25tZW50LlxuXG5UaGUgbWVudGlvbiBvZiBgQlBGX1NZU0NBTExgIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYgcHJvZ3JhbXMgYW5kIGxpa2VseSBzeXN0ZW0gY2FsbCBpbnRlcmFjdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIFNvLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IGhlcmU/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhlIHNlbGZ0ZXN0IGByYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNgLiBBaCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQncyBhbGwgY29taW5nIHRvZ2V0aGVyISBUaGlzIHRlc3QgaXMgZm9jdXNlZCBvbiBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAuIEFuZCB0aGF0IGJyaW5ncyBgQ09ORklHX0JQRl9FVkVOVFNgIGludG8gdGhlIGVxdWF0aW9uLiBTbywgd2UncmUgdGFsa2luZyBhYm91dCByYXcgdHJhY2Vwb2ludHMsIHdyaXRhYmxlIHByb2dyYW1zLCBhbmQgdGhlIGV2ZW50cyBpbmZyYXN0cnVjdHVyZS4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHRoYXQgdGhlIGJ1ZmZlciBhY2Nlc3MgY2hlY2tzIGFyZSBjcml0aWNhbCB0byBwcmV2ZW50IG1hbGljaW91cyB1c2Ugb2YgdGhlc2UgdHJhY2Vwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTM6NTcuMDIxNDk0ODY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU4NzY3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTYyMTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxcbmtlcm5lbC9icGYvYnRmLmM6NjI3NDpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9idGYuYy02Mjc1LVxcdFxcdC8qIGFsbG93IHU2NCogYXMgY3R4ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODcxPXN0YXRpYyBib29sIGlzX3BlcmZtb25fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODc4OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDSU5HOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM3OTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM4MC1cXHRcXHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzIzPXN0YXRpYyBib29sIGlzX3RyYWNpbmdfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzI5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MzA6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTM6NTcuMzY3Mzc3MzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDYxMzc5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gcGluIGRvd24gZXhhY3RseSB3aGVyZSBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLiBJdCdzIGEgcmVsYXRpdmVseSBuZXcgcHJvZ3JhbSB0eXBlLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbGF0ZXN0IGluZm9ybWF0aW9uIGFuZCBkb24ndCBtaXNpbnRlcnByZXQgYW55IHByaW9yLCBvbGRlciBkZWZpbml0aW9ucy4gTmV4dCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBoYXZlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCB0aHJvdWdoIHRoZSByZWxldmFudCBpbmNsdWRlIGZpbGVzLCBsb29raW5nIGZvciB0aGUgYWN0dWFsIGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyB0byBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYnJpbmcgdGhpcyBwcm9ncmFtIHR5cGUgaW50byBwbGF5LiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgc2VjdXJpdHkgYW5kIHJlc291cmNlIGxpbWl0cyB3aXRoIHJhdyB0cmFjZXBvaW50cyBiZWluZyB3cml0YWJsZS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVsbCBkZXBlbmRlbmN5IHRyZWUsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHByb2dyYW0gdHlwZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIGVjb3N5c3RlbS4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBmdWxsIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyB0aGluZyBsaXZlcywgYW5kIHdoYXQgY29udHJvbHMgaXRzIGJlaGF2aW9yLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCBhbmQgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMxOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE0OjE3LjgyODgwMTY2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1NjU3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM4Ni0gKlxcdFxcdCoqQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVCoqLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozODc6ICpcXHRcXHQqKkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUqKlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zODgtICpcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4Ni1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TWVNDVEwsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODc6XFx0QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4OC1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNDoxNy45MDAzNzM4OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4OTMyMzkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBUcmFjZXBvaW50IEludGVybmFscyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGFibGUgcmF3IHRyYWNlcG9pbnRzIGFuZCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJ2QgZG8gaXMgemVybyBpbiBvbiB0aGUgc291cmNlIGNvZGUsIGFuZCBzcGVjaWZpY2FsbHksIEknZCBnbyBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjYW5vbmljYWwgbG9jYXRpb24gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLCBhbmQgdGhlIG1lbnRpb24gb2YgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIGlzIGEgcHJldHR5IHN0cm9uZyBoaW50IHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSByZXNpZGVzLiBObyBuZWVkIHRvIHdhc3RlIHRpbWUgbG9va2luZyBlbHNld2hlcmUgaW5pdGlhbGx5OyB0aGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgQlBGIHByb2dyYW0gdHlwZSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhc3NvY2lhdGVkIGxvZ2ljIHRoYXQgZGVmaW5lIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE0OjI0LjA4OTcwMDAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ4MTg5MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNDoyNC4yOTQ1MzAwMTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5OTgyMDUzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIHRoYXQgYGtlcm5lbC9icGYvYCBkaXJlY3Rvcnk6XG5cbioqRXhhbWluaW5nIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gTXkgZm9jdXMgaXMgc3BlY2lmaWNhbGx5IG9uIGFueXRoaW5nIHJlbGF0ZWQgdG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgb3IgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHJlY2VudCBjaGFuZ2VzIHRoZXJlIHRoYXQgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBjb25zaWRlciBhbGwgYW5nbGVzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgQlBGIHByb2dyYW0gdHlwZSBpcyBoYW5kbGVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE0OjQ1LjI5MjczNjk4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDA3OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTYyMTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxcbmtlcm5lbC9icGYvYnRmLmM6NjI3NDpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9idGYuYy02Mjc1LVxcdFxcdC8qIGFsbG93IHU2NCogYXMgY3R4ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODcxPXN0YXRpYyBib29sIGlzX3BlcmZtb25fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODc4OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDSU5HOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM3OTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM4MC1cXHRcXHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzIzPXN0YXRpYyBib29sIGlzX3RyYWNpbmdfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzI5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MzA6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTQ6NDUuNDQxNzQ4Njc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Mjk2OTU2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBQcm9ncmFtIFR5cGUgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAuIEkga25vdyBpdCdzIGhhbmRsZWQgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgYWxzbyBnZXRzIHZlcmlmaWNhdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW4gcGxheSBoZXJlPyBJIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVzIHRoZSB2ZXJpZmllciwgSSdtIHByZXR0eSBzdXJlIHRoYXQncyB0aGUgb25seSBvbmUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjaGVjay4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNDo1Mi45NzE0NDYwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai15IDo9IGNvcmUub1xcbiAgIDM6XFx0aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbiAgIDQ6XFx0IyBfX19icGZfcHJvZ19ydW4oKSBuZWVkcyBHQ1NFIGRpc2FibGVkIG9uIHg4Njsgc2VlIDMxOTNjMDgzNmYyMDMgZm9yIGRldGFpbHNcXG4gICA1OlxcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXFxuICAgNjpcXHRlbmRpZlxcbiAgIDc6XFx0Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbiAgMTA6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG4gIDExOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG4gIDEyOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcbiAgMTU6XFx0b2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxuICAxNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG4gIDE4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG4gIDE5OlxcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxuICAyMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGRpc3BhdGNoZXIub1xcbiAgMjM6XFx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxuICAyODpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuICAyOTpcXHRlbmRpZlxcbiAgMzA6XFx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxuICAzMTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHRpZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbiAgMzU6XFx0ZW5kaWZcXG4gIDM2OlxcdG9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbiAgMzc6XFx0aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG4gIDM4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG4gIDM5OlxcdGVuZGlmXFxuICA0MDpcXHRpZmVxICgkKENPTkZJR19TWVNGUykseSlcXG4gIDQxOlxcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0gc3lzZnNfYnRmLm9cXG4gIDQyOlxcdGVuZGlmXFxuICA0MzpcXHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc3RydWN0X29wcy5vXFxuICA0NTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xcbiAgNDY6XFx0IyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXFxuICA0NzpcXHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxcbiAgNDg6XFx0IyBidGZfZW5jb2Rlcl9fYWRkX3NhdmVkX2Z1bmMoKSBieSBrZWVwaW5nIHRoZSBmaXJzdCBpbnN0YW5jZSBzZWVuLiBXZVxcbiAgNDk6XFx0IyBuZWVkIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUocykgaW4gYnBmX2xzbV9wcm90by5vIHRvIHRha2UgcHJlY2VkZW5jZVxcbiAgNTA6XFx0IyBvdmVyIHRob3NlIHdpdGhpbiBicGZfbHNtLm8uIEhhdmluZyBicGZfbHNtX3Byb3RvLm8gcHJlY2VkZVxcbiAgNTE6XFx0IyBicGZfbHNtLm8gZW5zdXJlcyBpdHMgRFdBUkYgQ1UgaXMgcHJvY2Vzc2VkIGVhcmx5LCBmb3JjaW5nIHRoZVxcbiAgNTI6XFx0IyBnZW5lcmF0ZWQgQlRGIHRvIGNvbnRhaW4gdGhlIG92ZXJyaWRlcy5cXG4gIDUzOlxcdCNcXG4gIDU0OlxcdCMgTm90YWJseSwgdGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWxzdCB0aGUgZGVkdXBsaWNhdGlvblxcbiAgNTU6XFx0IyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5LlxcbiAgNTY6XFx0b2JqLSR7Q09ORklHX0JQRl9MU019ICs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cXG4gIDU3OlxcdGVuZGlmXFxuICA1ODpcXHRpZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXFxuICA1OTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxuICA2MDpcXHRlbmRpZlxcbiAgNjE6XFx0b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSArPSBwcmVsb2FkL1xcbiAgNjI6XFx0XFxuICA2MzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxuICA2NDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9pdGVyLm9cXG4gIDY1OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX3JlbG9jYXRlLm9cXG4gIDY2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga21lbV9jYWNoZV9pdGVyLm9cXG4gIDY3OlxcdGlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxcbiAgNjg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkbWFidWZfaXRlci5vXFxuICA2OTpcXHRlbmRpZlxcbiAgNzA6XFx0XFxuICA3MTpcXHRDRkxBR1NfUkVNT1ZFX3BlcmNwdV9mcmVlbGlzdC5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3MjpcXHRDRkxBR1NfUkVNT1ZFX2JwZl9scnVfbGlzdC5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3MzpcXHRDRkxBR1NfUkVNT1ZFX3F1ZXVlX3N0YWNrX21hcHMubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgNzQ6XFx0Q0ZMQUdTX1JFTU9WRV9scG1fdHJpZS5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3NTpcXHRDRkxBR1NfUkVNT1ZFX3JpbmdidWYubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgNzY6XFx0Q0ZMQUdTX1JFTU9WRV9ycXNwaW5sb2NrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTQ6NTIuOTcxNTI3OTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTczMDYwNjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGVuYWJsaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIHBpZWNlIGhlcmUuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIEkgdGhpbmsgSSd2ZSBnb3QgdGhlIGtleSBmdW5jdGlvbnMgaWRlbnRpZmllZDogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyBteSBhbmFseXNpcy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBUaGF0J3MgZ29vZCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSB3aXRoaW4gdGhlIGtlcm5lbC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHN5c2NhbGxzPyBUaGUgYW5zd2VyIGlzIHllcywgdGhleSBhcmUsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFsbG93cyBuZWdhdGl2ZSBvZmZzZXRzIG9yIG92ZXJmbG93cyB0byBieXBhc3MgY3J1Y2lhbCBjaGVja3MuIFRoaXMgaXMgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHksIGFuZCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGhlcmUgaXMgc2lnbmlmaWNhbnQuXG5cbk5vdywgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBiZXlvbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoZSBzZWxmLXRlc3RzIHVzZSBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHByb2dyYW0gdHlwZSBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdCB3aGVuIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBvciBzaW1pbGFyIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHJlcGxpY2F0ZSB0aGUgZW52aXJvbm1lbnQgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjAyLjcwMjEzNzA4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4ODc2OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6MDIuNzY5MDM1NDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MTc0OTgxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSByZW1lbWJlciBydW5uaW5nIGEgYGdyZXBgIGZvciBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAgd2l0aGluIHRoZSBga2VybmVsL2AgZGlyZWN0b3J5IGFscmVhZHkuIFRoYXQgc2hvdWxkIGhhdmUgY292ZXJlZCBtb3N0IG9mIHRoZSByZWxldmFudCBjb2RlYmFzZS4gSSBvbmx5IHNhdyBpdCBtZW50aW9uZWQgaW4gYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBUaGF0J3MgYSBwcmV0dHkgbGltaXRlZCBzY29wZSwgd2hpY2ggbWFrZXMgdGhpbmdzIGEgYml0IGVhc2llciB0byB0cmFjayBkb3duLiBHaXZlbiBpdCdzIGEgcHJvZ3JhbSB0eXBlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXRzIHVzZSBpbnZvbHZlcyBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYmVjYXVzZSB0aGlzIHR5cGljYWxseSBhZmZlY3RzIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBpZiBpdCB3aWxsIHdvcmsuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjI3Ljk0NDAxOTQ4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0MjYyMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3MT1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg3Ny1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg3ODpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg3OS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0lORzpcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNzgtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzk6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzODAtXFx0XFx0aWYgKHN0cm5jcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl90cF9uYW1lLCBzaXplb2YoYnVmKSAtIDEpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6MjguMzE4Mjg4MzA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNDY1Mzc4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipCUEYgUmF3IFRyYWNlcG9pbnQgTGluayBBdHRhY2htZW50IERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGJwZl9yYXdfdHBfbGlua19hdHRhY2hgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXcgdHJhY2Vwb2ludCBsaW5raW5nIHByb2Nlc3MuIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUga2V5IGFzcGVjdHMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgdHJhY2Vwb2ludCBpbmZyYXN0cnVjdHVyZS4gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIGtwcm9iZS91cHJvYmUgbWFjaGluZXJ5LCBvciBpcyBpdCBkb2luZyBzb21ldGhpbmcgbW9yZSBkaXJlY3RseSBhdCB0aGUga2VybmVsIHByb2JlIGVudHJ5IHBvaW50cz8gSSBrbm93IHJhdyB0cmFjZXBvaW50cyBoYXZlIHRoZWlyIG93biBzcGVjaWZpYyBzZXQgb2YgY29uc3RyYWludHMsIHNvIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbkknbGwgYmUgbG9va2luZyBhdCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGV4aXN0aW5nIEJQRiB2ZXJpZmllciBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvdmVybGFwcyB3aXRoIG90aGVyIHRyYWNlcG9pbnQgaGFuZGxlcnMuIFdoYXQga2luZCBvZiB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgQlBGIHByb2dyYW0gYmVpbmcgYXR0YWNoZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3MgZm9yIHJhdyB0cmFjZXBvaW50cyB0aGF0IGRpZmZlciBmcm9tIHRoZSByZWd1bGFyIGB0cmFjZXBvaW50X3Byb2JlX2F0dGFjaGAgbG9naWM/IFRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhcmUgYW5vdGhlciBpbXBvcnRhbnQgYXNwZWN0LiBIb3cgaXMgaXQgZW5zdXJpbmcgdGhhdCB0aGUgQlBGIHByb2dyYW0gZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciBrZXJuZWwgYWN0aXZpdGllcywgb3IgY3JlYXRlIGFueSByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2g/XG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIGFueSBrbm93biBvdmVyaGVhZHMsIGNvbXBhcmVkIHRvIG90aGVyIEJQRiBhdHRhY2ggbWV0aG9kcz8gSXMgdGhlcmUgYSBkaWZmZXJlbmNlIGluIG1lbW9yeSB1c2FnZT8gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBDUFUgY2FjaGUgY29oZXJlbmN5IGJlY2F1c2Ugb2YgdGhlIHJhdyB0cmFjZXBvaW50IGludGVyYWN0aW9ucz8gSSBhbHNvIG5lZWQgdG8gYmUgdmlnaWxhbnQgZm9yIGFueSBlZGdlIGNhc2VzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgYW5kIGZhaWx1cmUgbW9kZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgYXR0YWNoIGZhaWxzPyBIb3cgYXJlIHJlc291cmNlcyBjbGVhbmVkIHVwPyBJIHdpbGwgcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBwYXJhbWV0ZXJzIHRoZSBmdW5jdGlvbiBhY2NlcHRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlcyBpdCBjYW4gcHJvZHVjZS4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByb2J1c3QgYW5kIGVmZmljaWVudCB3YXkgdG8gaW50ZXJhY3Qgd2l0aCByYXcgdHJhY2Vwb2ludHMuIExldCdzIHNlZSB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNTozNS42NjQ4MjkxODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc3MzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmF3X3RwX2xpbmtfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTMzNzU9c3RhdGljIGJvb2wgYnBmX2xpbmtfaXNfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzgwLVxcdCAqIGJwZl9yYXdfdHBfbGlua19sb3BzIGFuZCB0aHVzIGRlYWxsb2NfZGVmZXJyZWQoKSwgc2VlXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzM4MTpcXHQgKiBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKCkuXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM4Mi1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNDY9c3RhdGljIGludCBicGZfcGVyZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM1MS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MzUyOnN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM1My1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX3RwX25hbWUsIHU2NCBjb29raWUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NDMwPXN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDQ1LVxcdGNvb2tpZSA9IGF0dHItXFx1MDAzZXJhd190cmFjZXBvaW50LmNvb2tpZTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NDQ2OlxcdGZkID0gYnBmX3Jhd190cF9saW5rX2F0dGFjaChwcm9nLCB0cF9uYW1lLCBjb29raWUsIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDQ3LVxcdGlmIChmZCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg4Ny1cXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1JBV19UUClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODg4OlxcdFxcdFxcdHJldCA9IGJwZl9yYXdfdHBfbGlua19hdHRhY2gocHJvZywgTlVMTCwgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZy5jb29raWUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6MzUuNzcwNjA4NzE4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg3NDgxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgYWRvcHRpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqQlBGIEV2ZW50IFF1ZXN0aW9uKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0dWZmIGFnYWluLCBhbmQgSSd2ZSBoaXQgYSBzbWFsbCBzbmFnLiBJJ20gc2V0dGluZyB1cCBhIHJhdyB0cmFjZXBvaW50LCBzcGVjaWZpY2FsbHkgdXNpbmcgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYC4gTXkgbWluZCBrZWVwcyBjaXJjbGluZyBiYWNrIHRvIHRoaXMgZnVuZGFtZW50YWwgcXVlc3Rpb246IGlzIGl0ICphYnNvbHV0ZWx5KiBuZWNlc3NhcnkgdG8gaGF2ZSBgQlBGX0VWRU5UU2AgZW5hYmxlZCBvciBjb25maWd1cmVkIGluIG9yZGVyIGZvciBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gT3IsIHB1dCBhbm90aGVyIHdheSwgaXMgdGhhdCBjb25maWd1cmF0aW9uIGEgcHJlcmVxdWlzaXRlLCBvciBpcyB0aGVyZSBzb21lIG90aGVyIG1lY2hhbmlzbSBhdCBwbGF5PyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhbiBpbXBsaWVkIGRlcGVuZGVuY3ksIGEgYmVzdCBwcmFjdGljZSwgb3IgaWYgSSBjYW4gd29yayBhcm91bmQgaXQgc29tZWhvdy4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBiZWZvcmUgSSBpbnZlc3QgdG9vIG11Y2ggdGltZSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6NDAuMDU5MzYwMTE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgwOTI4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmF3X3RyYWNlcG9pbnRfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDI5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0MzA6c3RhdGljIGludCBicGZfcmF3X3RyYWNlcG9pbnRfb3Blbihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDMxLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1OS1cXHRjYXNlIEJQRl9SQVdfVFJBQ0VQT0lOVF9PUEVOOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NjA6XFx0XFx0ZXJyID0gYnBmX3Jhd190cmFjZXBvaW50X29wZW4oXFx1MDAyNmF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NjEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjQwLjEzNjE3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQyNjMyNzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24sIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgaXRzIHBvcnRhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBUaGUgaW5pdGlhbCwgYW5kIG1vc3QgbGlrZWx5LCBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGAjaWZkZWZgIGJsb2NrcyBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gb3IgaW1wbGVtZW50YXRpb24uIFRoYXQgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGl0cyBhdmFpbGFiaWxpdHkgdmFyaWVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGJ1aWxkIGZsYWdzLiBLbm93aW5nIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW1wb3J0YW50IGZvciBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjU1LjU2MjUwODc0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzY1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MjktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQzMDpzdGF0aWMgaW50IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MzEte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM1ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU5LVxcdGNhc2UgQlBGX1JBV19UUkFDRVBPSU5UX09QRU46XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ2MDpcXHRcXHRlcnIgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ2MS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6NTUuNzU1ODg0NDU1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMzM5NzIzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQsIGFuZCB3aGF0J3MgdGhlIHB1cnBvc2U/XCIgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGtub3dpbmcgdGhhdCBpdCdzIGEgY3JpdGljYWwgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBmdW5jdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gdHJhY2luZyByYXcgdHJhY2Vwb2ludHMgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBhcmd1bWVudHMgYXJlIHNldCBhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIG1hbmFnZWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIGl0cyBpbXBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgLSBjb3VsZCB0aGVyZSBiZSBhbnkgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5maWx0ZXJlZCB0cmFjZXBvaW50cz8gQWxzbywgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlbGF0ZWQgdG8gc29tZSBpbnN0cnVtZW50YXRpb24gc2V0dXAuIEkgd2lsbCBiZSBsb29raW5nIGZvcjpcblxuKiAgICoqQXJndW1lbnQgVmFsaWRhdGlvbioqOiBXaGF0IGlucHV0IHZhbGlkYXRpb24gaXMgZG9uZSBvbiB0aGUgdHJhY2Vwb2ludCBuYW1lLCB0aGUgaGFuZGxlciBmdW5jdGlvbiwgYW5kIHRoZSBwcm9iZSBkYXRhIHN0cnVjdHVyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzP1xuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbioqOiBIb3cgYXJlIHJlc291cmNlcyBtYW5hZ2VkIGFyb3VuZCBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gPyBJcyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJhY2UgY29uZGl0aW9ucz9cbiogICAqKkVycm9yIEhhbmRsaW5nKio6IElzIGVycm9yIGhhbmRsaW5nIHJvYnVzdD8gV2hhdCBoYXBwZW5zIGlmIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgZmFpbHM/IElzIHRoZXJlIGdyYWNlZnVsIGRlZ3JhZGF0aW9uIG9yIHBhbmljPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGFuZCBwcm9wYWdhdGUgdXAgdGhlIGNhbGwgc3RhY2ssIHNvIHRoZSBwcm9ncmFtIGRvZXMgbm90IGNyYXNoLlxuKiAgICoqS2VybmVsIENvbnRleHQqKjogSSdtIGNvbnNpZGVyaW5nIHdoYXQgY29udGV4dCB0aGlzIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJcyBpdCB1c2VyIHNwYWNlPyBLZXJuZWwgc3BhY2U/IFdoYXQgYXJlIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgY2FsbGVyPyBUaGlzIG1hdHRlcnMgdG8gdHJhY2Vwb2ludCBhY2Nlc3MgYW5kIHBvdGVudGlhbCBleHBsb2l0cy5cbiogICAqKkNvbmN1cnJlbmN5Kio6IElmIHRoZXJlJ3MgYW55IG11bHRpdGhyZWFkaW5nIGluIHRoZSB2aWNpbml0eSwgaG93IGlzIHRoZSB0cmFjZXBvaW50IGFjY2VzcyBoYW5kbGVkPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uIHdoZW4gbXVsdGlwbGUgdGhyZWFkcyBhcmUgaW52b2x2ZWQgaW4gdHJhY2luZz9cbiogICAqKlRyYWNlcG9pbnQgVXNhZ2UqKjogSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0J3MgaGFwcGVuaW5nLiBJJ20gYWxzbyBwbGFubmluZyB0byBpbnNwZWN0IHRoZSB0cmFjZXBvaW50IGhhbmRsZXIgZnVuY3Rpb24gYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gSXMgdGhlIGhhbmRsZXIgcGVyZm9ybWluZyBhbnkgcmlza3kgb3BlcmF0aW9ucz9cblxuTXkgYW5hbHlzaXMgbmVlZHMgdG8gYmUgY29tcHJlaGVuc2l2ZSwgZW5zdXJpbmcgbm8gc3RvbmUgaXMgdW50dXJuZWQuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0gYW5kIGFudGljaXBhdGUgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCdzIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0ZWxsIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE2OjE4LjA5NTYxMjQ5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQyMDpcXHRcXG40NDIxOlxcdFxcdHJldHVybiBicGZfbGlua19zZXR0bGUoXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG40NDIyOlxcdFxcbjQ0MjM6XFx0b3V0X3B1dF9idHA6XFxuNDQyNDpcXHRcXHRicGZfcHV0X3Jhd190cmFjZXBvaW50KGJ0cCk7XFxuNDQyNTpcXHRcXHRyZXR1cm4gZXJyO1xcbjQ0MjY6XFx0fVxcbjQ0Mjc6XFx0XFxuNDQyODpcXHQjZGVmaW5lIEJQRl9SQVdfVFJBQ0VQT0lOVF9PUEVOX0xBU1RfRklFTEQgcmF3X3RyYWNlcG9pbnQuY29va2llXFxuNDQyOTpcXHRcXG40NDMwOlxcdHN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuNDQzMTpcXHR7XFxuNDQzMjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuNDQzMzpcXHRcXHR2b2lkIF9fdXNlciAqdHBfbmFtZTtcXG40NDM0OlxcdFxcdF9fdTY0IGNvb2tpZTtcXG40NDM1OlxcdFxcdGludCBmZDtcXG40NDM2OlxcdFxcbjQ0Mzc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX1JBV19UUkFDRVBPSU5UX09QRU4pKVxcbjQ0Mzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDQzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6MTguMDk1OTY0NzcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTE0NjU3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIFRyYWNlcG9pbnQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGVzZSByYXcgdHJhY2Vwb2ludHMgYXJlIHNldCB1cC4gSXQgbG9va3MgbGlrZSBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIGlzIHByb2JhYmx5IGFsd2F5cyBhdmFpbGFibGUgYXMgbG9uZyBhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBmbGlwcGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgY29uc2lzdGVudCBmcm9tIGEgc3lzdGVtIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludC5cblxuQnV0IGhhbmcgb24uLi4gSSBzZWUgYSBgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludGAgY2FsbCBpbiB0aGUgY29kZS4gSSByZW1lbWJlciB0aGUgYG9wZW5gIGJ1dCB3aGVyZSBleGFjdGx5IGlzIHRoZSBjb3JyZXNwb25kaW5nIGBwdXRgIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWNsYXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgdW5kZXJzdGFuZCBob3cgaXQgY2xlYW5zIHVwIHJlc291cmNlcyBhbmQgd2hhdCBpdCdzIGRvaW5nIG9uIHRoZSBiYWNrZW5kLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgcHJvcGVyIHRyYWNlcG9pbnQgbWFuYWdlbWVudCBhbmQgcHJldmVudCBhbnkgbGluZ2VyaW5nIGlzc3Vlcy4gSSBuZWVkIHRvIGJlIHN1cmUgaXQncyBkb2luZyB3aGF0IEkgZXhwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAxNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6NDYuNjEwNjI0OTgyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI1OTg5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3B1dF9yYXdfdHJhY2Vwb2ludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTM5MDg9c3RhdGljIHZvaWQgYnBmX3Jhd190cF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzkxMy1cXHRicGZfcHJvYmVfdW5yZWdpc3RlcihyYXdfdHAtXFx1MDAzZWJ0cCwgcmF3X3RwKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozOTE0OlxcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQocmF3X3RwLVxcdTAwM2VidHApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM5MTUtfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM5My1cXHRpZiAocHJvZy1cXHUwMDNlc2xlZXBhYmxlIFxcdTAwMjZcXHUwMDI2ICF0cmFjZXBvaW50X2lzX2ZhdWx0YWJsZShidHAtXFx1MDAzZXRwKSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzOTQ6XFx0XFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzOTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDIzLW91dF9wdXRfYnRwOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0MjQ6XFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MjUtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg5Mj1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA2OS1cXHRcXHRcXHRcXHR0bmFtZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDcwOlxcdFxcdFxcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoYnRwKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNzEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNzQtXFx0XFx0XFx0XFx0XFx0dHJhY2Vfc3ltYm9sKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwNzU6XFx0XFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA3Ni1cXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMDgyPXN0cnVjdCBicGZfcmF3X2V2ZW50X21hcCAqYnBmX2dldF9yYXdfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIwOTMtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIwOTQ6dm9pZCBicGZfcHV0X3Jhd190cmFjZXBvaW50KHN0cnVjdCBicGZfcmF3X2V2ZW50X21hcCAqYnRwKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMDk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6NDYuOTIzMjI5NzcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTU0NTk2MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBUcmFjZXBvaW50IEFjdGl2YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgaXRzIGZ1bmN0aW9uIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byBhY3R1YWxseSAqZW5hYmxlKiB0aGlzIGNvZGU/IEkga25vdyB0aGlzIGFyZWEgZGVhbHMgd2l0aCBCUEYtYmFzZWQgdHJhY2Vwb2ludHMsIGJ1dCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVuYWJsaW5nIGZsYWcgaW4gdGhlIGtlcm5lbCBjb25maWcuIElzIGl0IGEgc3BlY2lmaWMgQlBGLXJlbGF0ZWQgb3B0aW9uPyBJcyBpdCB0aWVkIHRvIGEgYnJvYWRlciB0cmFjaW5nIGZyYW1ld29yayBzZXR0aW5nPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHNvIEkgY2FuIHRoZW4gc2VlIGhvdyB0aGlzIHRyYWNlcG9pbnQgZnVuY3Rpb25hbGl0eSBmaXRzIGluIHRoZSBncmVhdGVyIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgY29uZmlnIGRlcGVuZGVuY3kgaXMgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgdGhlIGZlYXR1cmUgYW5kIHRyb3VibGVzaG9vdGluZyBhbnkgaXNzdWVzIHRoYXQgY29tZSB1cC4gTGV0IG1lIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjcm9zcy1yZWZlcmVuY2VzIHRvIGZpbmQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gZmxhZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNzowOS44Nzc4Mjk1OTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk1MjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjEwLjAyNTc4ODE1OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI1NzY0NzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqT24gQlBGIFRyYWNlcG9pbnQgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb21waWxhdGlvbiBhbmQgSSdtIHByZXR0eSBzdXJlIEkgbmVlZCB0byBlbmFibGUgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCdzIHRoZSBrZXkgdG8gZ2V0dGluZyBgYnBmX3RyYWNlLm9gIGxpbmtlZCBwcm9wZXJseS4gTm93LCBpZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzICpkaXNhYmxlZCosIHRoZW4gYGJwZl9wdXRfcmF3X3RyYWNlcG9pbnRgLi4uIHllYWgsIEknZCBiZXQgYSBwcmV0dHkgZ29vZCBzdW0gdGhhdCBmdW5jdGlvbiBpcyBqdXN0IGRlZmluZWQgYXMgYW4gZW1wdHkgaW5saW5lIGZ1bmN0aW9uLCBvciBtYXliZSBldmVuIGNvbXBsZXRlbHkgc3RyaXBwZWQgb3V0IGJ5IHRoZSBjb21waWxlci4gTm8gcmVhbCBydW50aW1lIG92ZXJoZWFkLCBidXQgYWxzbyBjb21wbGV0ZWx5IHVzZWxlc3MgaW4gdGhlIHJlc3VsdGluZyBiaW5hcnkuIE1ha2VzIHNlbnNlLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCBzbyB0aGF0IEkgY2FuIGxpbmsgdGhlIG5lY2Vzc2FyeSBCUEYgZXZlbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjI3LjI4MzQzNzM2NloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0MTkwMzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wdXRfcmF3X3RyYWNlcG9pbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTc6MjcuMzQ0ODYzOTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcxMTg0Mjk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFRyYWNlcG9pbnRzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRyYWNlcG9pbnRzIGFyZSBiZWluZyBoYW5kbGVkIGF0IHRoZSBCUEYgbGV2ZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBrZXJuZWwtbGV2ZWwgdHJhY2luZyBtZWNoYW5pc20sIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIGNvcmUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBCUEYgYW5kIHRyYWNpbmcuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRob3NlIGJ1aWxkaW5nIGJsb2NrcyB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9icGZfdHJhY2UuaGAsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIgd2l0aGluIHRoZSBrZXJuZWwncyBpbmNsdWRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGlmIEknbSBzbGlnaHRseSBvZmYgb24gdGhlIGV4YWN0IGZpbGUgbmFtZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIGhvdyB0aGVzZSB0cmFjZXBvaW50cyBhcmUgZGVmaW5lZCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGVtLCBhbmQgd2hhdCByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGludGVyZXN0IGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBMZXQncyBzZWUgd2hhdCB0aGF0IGhlYWRlciByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY0NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjM2LjA1NjcxMDc4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMjc5MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wdXRfcmF3X3RyYWNlcG9pbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03ODI9c3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpicGZfZ2V0X3Jhd190cmFjZXBvaW50KGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzgzOnZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCk7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03ODQtaW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04MjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODI3LX1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjgyODpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cClcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTgyOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjM2LjI1ODk5NTI3NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDgxNTg0NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIEV2ZW50cyBhbmQgQnVmZmVyIEFjY2VzcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgcmF3IHRyYWNlcG9pbnRzIGFyZSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oYC4gUmlnaHQsIG1ha2VzIHNlbnNlLiBBbmQsIGFzIGV4cGVjdGVkLCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgdXNpbmcgdGhlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgZW5hYmxpbmcgdGhhdCBhbHNvIGFmZmVjdHMgaG93IHRoZSB2ZXJpZmllciBkZWFscyB3aXRoIGJ1ZmZlciBhY2Nlc3MuIExldCdzIHRyYWNlIGl0IGJhY2suXG5cblRoZSBmdW5jdGlvbiBgX19jaGVja19idWZmZXJfYWNjZXNzYCBzb3VuZHMgcmVsZXZhbnQsIHNvIEknbGwgc2VlIHdoZXJlIGl0J3MgdXNlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGRpcmVjdGx5IGNhbGxlZCBieSBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gIGBjaGVja19idWZmZXJfYWNjZXNzYCwgaW4gdHVybiwgaXMgdXNlZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2Agd2hpY2ggaGFuZGxlcyBhIHZhcmlldHkgb2YgcG9pbnRlciB0eXBlcywgaW5jbHVkaW5nIGBQVFJfVE9fTUFQX1ZBTFVFYCwgYFBUUl9UT19NQVBfS0VZYCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXJzLiBXYWl0LCBJIHNlZSBgUFRSX1RPX0JVRmAgaW4gdGhhdCBsaXN0LCBzbyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgaXMgYWxzbyBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggcmVndWxhciBidWZmZXJzLCBub3QganVzdCB0cmFjZXBvaW50IGRhdGE/IFRoaXMgaXMgZ29vZCB0byBrbm93LCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgdGhlIGNvbm5lY3Rpb24gaXMuXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIGNhbGxzIHRvIGBjaGVja19idWZmZXJfYWNjZXNzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoIGRpZmZlcmVudCBjb250ZXh0cywgaW5jbHVkaW5nIGJ1ZmZlcnMuIFRoYXQncyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCB0aGUgaW5zdGFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNzo0NC43NDA1ODI5MDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTU5OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2J1ZmZlcl9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTMyNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzI3LVxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpidWZfaW5mbyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01Mzc3PXN0YXRpYyBpbnQgY2hlY2tfdHBfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzODQ6XFx0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgXFxcInRyYWNlcG9pbnRcXFwiLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFxcdTAwMjZhY2Nlc3NfZW5kKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzOTM6c3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTQtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTQwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTQwMzpcXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcXHUwMDI2YWNjZXNzX2VuZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDQtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDk4PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMzMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMzMzpcXHRcXHRlcnIgPSBjaGVja19idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBmYWxzZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMzNC1cXHRcXHRcXHRcXHRcXHQgIG1heF9hY2Nlc3MpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MDktXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODEwOlxcdFxcdHJldHVybiBjaGVja19idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgMCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMS1cXHRcXHRcXHRcXHRcXHQgICBhY2Nlc3Nfc2l6ZSwgemVyb19zaXplX2FsbG93ZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjQ0Ljc5OTE0ODA5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTIyODE1Njc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIHdpdGhpbiBgY2hlY2tfbWVtX2FjY2Vzc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AuIEl0IGxvb2tzIGxpa2UgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlLCBvciBtYXliZSB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucywgdW5kZXIgd2hpY2ggYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGlzIGJlaW5nIGludm9rZWQgKndpdGhpbiogdGhlIGJyb2FkZXIgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uIHBlcmZvcm1lZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2AuIEknbSBwcm9iYWJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiB0aGVyZSdzIGFueSBjb250ZXh0IEkgY2FuIGdsZWFuIGZyb20gKmhvdyogYW5kICp3aGVuKiBpdCdzIGNhbGxlZC4gQXJlIHRoZXJlIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGJlaW5nIHByb3RlY3RlZCwgcGFydGljdWxhciBhY2Nlc3MgdHlwZXMgYmVpbmcgc2NydXRpbml6ZWQgKHJlYWRzLCB3cml0ZXMsIGV0Yy4pLCBvciBwZXJoYXBzIGVycm9yIGNvbmRpdGlvbnMgYmVpbmcgdHJpZ2dlcmVkPyBLbm93aW5nIHRoYXQgbGlua2FnZSB3aWxsIGhlbHAgY2xhcmlmeSBob3cgbWVtb3J5IGFjY2Vzc2VzLCBnZW5lcmFsbHksIGFyZSBiZWluZyB2YWxpZGF0ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGNoZWNrPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTg6MDYuMDI3MzA4MTEyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzkxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzMjA6XFx0XFx0XFx0dTMyICptYXhfYWNjZXNzO1xcbjYzMjE6XFx0XFxuNjMyMjpcXHRcXHRcXHRpZiAocmRvbmx5X21lbSkge1xcbjYzMjM6XFx0XFx0XFx0XFx0aWYgKHQgPT0gQlBGX1dSSVRFKSB7XFxuNjMyNDpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGNhbm5vdCB3cml0ZSBpbnRvICVzXFxcXG5cXFwiLFxcbjYzMjU6XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXFx1MDAzZXR5cGUpKTtcXG42MzI2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjYzMjc6XFx0XFx0XFx0XFx0fVxcbjYzMjg6XFx0XFx0XFx0XFx0bWF4X2FjY2VzcyA9IFxcdTAwMjZlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X3Jkb25seV9hY2Nlc3M7XFxuNjMyOTpcXHRcXHRcXHR9IGVsc2Uge1xcbjYzMzA6XFx0XFx0XFx0XFx0bWF4X2FjY2VzcyA9IFxcdTAwMjZlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X3Jkd3JfYWNjZXNzO1xcbjYzMzE6XFx0XFx0XFx0fVxcbjYzMzI6XFx0XFxuNjMzMzpcXHRcXHRcXHRlcnIgPSBjaGVja19idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBmYWxzZSxcXG42MzM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgbWF4X2FjY2Vzcyk7XFxuNjMzNTpcXHRcXG42MzM2OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgKHJkb25seV9tZW0gfHwgdCA9PSBCUEZfUkVBRCkpXFxuNjMzNzpcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbjYzMzg6XFx0XFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gUFRSX1RPX0FSRU5BKSB7XFxuNjMzOTpcXHRcXHRcXHRpZiAodCA9PSBCUEZfUkVBRCBcXHUwMDI2XFx1MDAyNiB2YWx1ZV9yZWdubyBcXHUwMDNlPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxODowNi4wMjg1NDk4NTJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODI4OTEzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyBgcmRvbmx5X21lbWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGhyYXNlIGByZG9ubHlfbWVtYCBqdXN0IHBvcHBlZCB1cCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGl0IHNpZ25pZmllcyBpbiB0aGlzIGNvbnRleHQuIFJhdGhlciB0aGFuIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byBnZXQgdGhlIHByZWNpc2UgZGVmaW5pdGlvbiwgc28gSSdsbCByZXdpbmQgYSBiaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uY2VwdCBpbiBkZXRhaWwsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGdldCB0aGUgZnVsbCBzY29wZSBieSByZS1yZWFkaW5nIHRoZSByZWxldmFudCBwYXJ0cywgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IGFsbCBtYWtlcyBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE4OjE5LjMxMTQ0Mzg4M1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MjkwOlxcdFxcdFxcdFxcdFxcdHZhbHVlX3JlZ25vKTtcXG42MjkxOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjYyOTI6XFx0XFx0XFx0fVxcbjYyOTM6XFx0XFxuNjI5NDpcXHRcXHRcXHRlcnIgPSBjaGVja19mbG93X2tleXNfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcXG42Mjk1OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG42Mjk2OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxuNjI5NzpcXHRcXHR9IGVsc2UgaWYgKHR5cGVfaXNfc2tfcG9pbnRlcihyZWctXFx1MDAzZXR5cGUpKSB7XFxuNjI5ODpcXHRcXHRcXHRpZiAodCA9PSBCUEZfV1JJVEUpIHtcXG42Mjk5OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgY2Fubm90IHdyaXRlIGludG8gJXNcXFxcblxcXCIsXFxuNjMwMDpcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZ190eXBlX3N0cihlbnYsIHJlZy1cXHUwMDNldHlwZSkpO1xcbjYzMDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuNjMwMjpcXHRcXHRcXHR9XFxuNjMwMzpcXHRcXHRcXHRlcnIgPSBjaGVja19zb2NrX2FjY2VzcyhlbnYsIGluc25faWR4LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQpO1xcbjYzMDQ6XFx0XFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG42MzA1OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxuNjMwNjpcXHRcXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XFxuNjMwNzpcXHRcXHRcXHRlcnIgPSBjaGVja190cF9idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcXG42MzA4OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG42MzA5OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxuNjMxMDpcXHRcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG42MzExOlxcdFxcdFxcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIHtcXG42MzEyOlxcdFxcdFxcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxcbjYzMTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdmFsdWVfcmVnbm8pO1xcbjYzMTQ6XFx0XFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkge1xcbjYzMTU6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXFxuNjMxNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZV9yZWdubyk7XFxuNjMxNzpcXHRcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG42MzE4OlxcdFxcdFxcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIHtcXG42MzE5OlxcdFxcdFxcdGJvb2wgcmRvbmx5X21lbSA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctXFx1MDAzZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxODoxOS4zMTI0OTUxMDNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyOTQ3MTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gQnVmZmVyIEFjY2VzcyBDaGVja3MqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB3ZSdyZSBpbiB0aGUgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gYFBUUl9UT19CVUZgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBJcyB0aGlzIHVzYWdlIHNwZWNpZmljIHRvIGBicGZfZHlucHRyYCBvciBwZXJoYXBzIHNvbWV0aGluZyBhbmFsb2dvdXMgdG8gaXQ/IEkgbmVlZCB0byBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLiBPa2F5LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCB2ZXJpZnkgd2hhdCBgUFRSX1RPX0JVRmAgYWN0dWFsbHkgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIExldCBtZSB0cmFjZSB0aGF0IGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuIEdvdHRhIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBidWZmZXIgaXMgYmVpbmcgYWNjZXNzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWNjZXNzIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE4OjI4LjI0MTk2OTE5N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyNzg0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBUUl9UT19CVUZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz02ODQ4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY5NzAtXFx0XFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlKTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjY5NzE6XFx0XFx0aWYgKGN0eF9hcmdfaW5mby1cXHUwMDNlb2Zmc2V0ID09IG9mZiBcXHUwMDI2XFx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2J0Zi5jLTY5NzItXFx0XFx0ICAgIChmbGFnIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jPTM5OT1jb25zdCBjaGFyICpyZWdfdHlwZV9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNDIwLVxcdFxcdFtQVFJfVE9fQVJFTkFdXFx0XFx0PSBcXFwiYXJlbmFcXFwiLFxcbmtlcm5lbC9icGYvbG9nLmM6NDIxOlxcdFxcdFtQVFJfVE9fQlVGXVxcdFxcdD0gXFxcImJ1ZlxcXCIsXFxua2VybmVsL2JwZi9sb2cuYy00MjItXFx0XFx0W1BUUl9UT19GVU5DXVxcdFxcdD0gXFxcImZ1bmNcXFwiLFxcbi0tXFxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbWFwX2VsZW1fcmVnX2luZm8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTgwLVxcdFxcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0sIGtleSksXFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjE4MTpcXHRcXHQgIFBUUl9UT19CVUYgfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFkgfSxcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTgyLVxcdFxcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0sIHZhbHVlKSxcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTgzOlxcdFxcdCAgUFRSX1RPX0JVRiB8IFBUUl9NQVlCRV9OVUxMIH0sXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTE4NC1cXHR9LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MDc9c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjEyLVxcdGNhc2UgUFRSX1RPX01FTTpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjYxMzpcXHRjYXNlIFBUUl9UT19CVUY6XFxua2VybmVsL2JwZi9zdGF0ZXMuYy02MTQtXFx0Y2FzZSBQVFJfVE9fVFBfQlVGRkVSOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMzMDc9c3RhdGljIGJvb2wgaXNfc3BpbGxhYmxlX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzIyLVxcdGNhc2UgUFRSX1RPX0JURl9JRDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMzpcXHRjYXNlIFBUUl9UT19CVUY6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjQtXFx0Y2FzZSBQVFJfVE9fTUVNOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwOTg9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzE2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMxNzpcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMxOC1cXHRcXHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXFx1MDAzZXR5cGUpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc2MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICAgemVyb19zaXplX2FsbG93ZWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Nzk4OlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc5OS1cXHRcXHRpZiAodHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBtZW1fdHlwZXMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzc3NS1cXHRcXHRQVFJfVE9fTUVNIHwgTUVNX1JJTkdCVUYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3NzY6XFx0XFx0UFRSX1RPX0JVRixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzc3Ny1cXHRcXHRQVFJfVE9fQlRGX0lEIHwgUFRSX1RSVVNURUQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAyNz1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDY5LVxcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDcwOlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODA3MTpcXHRjYXNlIFBUUl9UT19CVUYgfCBNRU1fUkRPTkxZOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDcyLVxcdGNhc2UgUFRSX1RPX0FSRU5BOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNjczPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzczNS1cXHRjYXNlIFBUUl9UT19NRU06XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzM2OlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MzctXFx0Y2FzZSBQVFJfVE9fRlVOQzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTg6MjguNjE0NzYyMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY0MDE0NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFBvaW50ZXIgVHlwZXMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoZSB1c2FnZSBvZiBwb2ludGVyIHR5cGVzIGluIEJQRiwgc3BlY2lmaWNhbGx5IGBQVFJfVE9fQlVGYCBhbmQgYFBUUl9UT19UUF9CVUZGRVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgUFRSX1RPX0JVRmAgaXMgcmVsZXZhbnQgdG8gYGJwZl9pdGVyYCwgbGlrZSB0aGUgcmVnaXN0cmF0aW9uIGluZm8gaW4gYGJwZl9tYXBfZWxlbV9yZWdfaW5mb2AuIFRoaXMgbWVhbnMgdGhlIGBjaGVja19idWZmZXJfYWNjZXNzYCBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBpbiB0aGUgcGF0aCBmb3IgYGJwZl9pdGVyYCBwcm9ncmFtcy4gT24gdGhlIG90aGVyIGhhbmQsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCBpcyB0cmlnZ2VyZWQgYnkgYFBUUl9UT19UUF9CVUZGRVJgLCBhbmQgdGhhdCBwb2ludGVyIHR5cGUgaXMgZGlyZWN0bHkgdGllZCB0byBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAgYW5kIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UYC5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVGAgaGFzIGEgaGFyZCBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQlBGX0VWRU5UU2AuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGBicGZfdHJhY2UuY2AgZGVhbHMgd2l0aCByYXcgdHJhY2Vwb2ludHMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHRoZXJlIGZvciBjb25maXJtYXRpb24uIFllcywgY29uZmlybWVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19CUEZfRVZFTlRTYCB0byBwcm9wZXJseSB0ZXN0IHRoZSBgUFRSX1RPX1RQX0JVRkZFUmAgcGF0aC5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBjaXJjbGUgYmFjayB0byBgUFRSX1RPX0JVRmAgYW5kIGBicGZfaXRlcmAuIERvZXMgYGJwZl9pdGVyYCBoYXZlIGl0cyBvd24gY29uZmlnIHJlcXVpcmVtZW50cz8gVGhpcyBpcyBpbXBvcnRhbnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgaW4gYGtlcm5lbC9icGYvYnBmX2l0ZXIuY2AgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTg6NDQuMjU0OTA4ODk4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU1MjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlci5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT05PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxODo0NC4zMTU0Njg5MTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MDQ0Mzg1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBGdW5jdGlvbmFsaXR5IGFuZCBUZXN0IFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQlBGIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQgbmVlZHMgdGVzdGluZy4gIGBicGZfaXRlci5vYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCBtZWFuaW5nIHRoZSBgUFRSX1RPX0JVRmAgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUganVzdCB3aXRoIHRoYXQgY29uZmlndXJhdGlvbi4gQnV0LCB0byB0ZXN0IGBQVFJfVE9fVFBfQlVGRkVSYCwgSSdsbCBuZWVkIGBDT05GSUdfQlBGX0VWRU5UU2AgZW5hYmxlZC4gIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIEknbGwgYWRkIGBCUEZfRVZFTlRTYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIEkgY2FuIHRlc3QgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMuIEknbSBmb2N1c2luZyBvbiB0aGUgYnVmZmVyIGFjY2VzcyBjaGVja3MsIHNwZWNpZmljYWxseSB0aGUgYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgYnlwYXNzIGZvciBuZWdhdGl2ZSBgdmFyX29mZmAgdmFsdWVzIGluIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24uIFRoZSB2ZXJpZmllciBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGEgbmVnYXRpdmUgYHN0YXJ0YCBhZnRlciB0aGUgYWRkaXRpb24sIHdoaWNoIGlzIGdvb2QuXG5gYGBjXG5cdHZhcl9vZmYgPSAoczY0KXJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHZhcl9vZmYsIChzNjQpb2ZmLCBcdTAwMjZzdGFydCkpIHtcblx0XHR2ZXJib3NlKGVudixcblx0XHRcdFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcblwiLFxuXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCB2YXJfb2ZmKTtcblx0XHRyZXR1cm4gLUVBQ0NFUztcblx0fVxuXG5cdGlmIChzdGFydCBcdTAwM2MgMCkge1xuXHRcdHZlcmJvc2UoZW52LFxuXHRcdFx0XCIlcyBpbnZhbGlkIG5lZ2F0aXZlICVzIGJ1ZmZlciBvZmZzZXQ6IG9mZj0lZCwgdmFyX29mZj0lbGxkXFxuXCIsXG5cdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpO1xuXHRcdHJldHVybiAtRUFDQ0VTO1xuXHR9XG5cblx0aWYgKHN0YXJ0IFx1MDAzZSBVMzJfTUFYIHx8IHNpemUgXHUwMDNjIDAgfHxcblx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdygodTMyKXN0YXJ0LCAodTMyKXNpemUsIGFjY2Vzc19lbmQpKSB7XG5cdFx0dmVyYm9zZShlbnYsXG5cdFx0XHRcIiVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVsbGQsIHNpemU9JWRcXG5cIixcblx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIHN0YXJ0LCBzaXplKTtcblx0XHRyZXR1cm4gLUVBQ0NFUztcblx0fVxuYGBgXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBmb3IgdGVzdGluZyBhcmUgYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZXNlIGFyZSBpbmxpbmVkLiBUaGV5IGFyZSBhbGwgc3RhdGljIHdoaWNoIG1lYW5zIHRoZXkgY291bGQgYmUgaW5saW5lZCwgYnV0IGlmIHRoZXkgYXJlIG5vdCBmdWxseSBpbmxpbmVkLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogdGhlbS4gQW5kIGlmIG5vdCwgaXQgd2lsbCBqdXN0IGZ1enogdGhlIGNhbGxlciBgY2hlY2tfbWVtX2FjY2Vzc2AsIHNvIGl0IHdpbGwgc3RpbGwgYmUgdXNlZnVsLiBJJ2xsIHN0aWNrIHdpdGggdGhvc2UgdGhyZWUgZm9yIG5vdy5cblxuTGV0J3MgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXNpZGUgZnJvbSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCwgYW55dGhpbmcgZWxzZSBpbnZvbHZlZD9cblxuT2theSwgbGV0J3MgZXhwbG9yZSB3aGVyZSB0aGVzZSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgdmFyaWFudHMgYXJlIHVzZWQuIEFoLCBgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3NgIGFsc28gdXNlcyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIEdvb2QgdG8ga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTk6MTQuMDE5OTExNTc2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEyNzgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19oZWxwZXJfbWVtX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MTU9c3RhdGljIGludCBjaGVja19zdGFja19yYW5nZV9pbml0aWFsaXplZChcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzYwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzYxOnN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc2Mi1cXHRcXHRcXHRcXHQgICBpbnQgYWNjZXNzX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGFjY2Vzc190eXBlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY4NTE9c3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODk0LVxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg5NTpcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODk2LVxcdFxcdFxcdFxcdCAgICAgIGFjY2Vzc190eXBlLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjkwOD1zdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTM0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTM1OlxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTM2OlxcdGVyciA9IGVyciA/OiBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MzctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIyND1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODMzNy1cXHRcXHRrZXlfc2l6ZSA9IG1ldGEtXFx1MDAzZW1hcC5wdHItXFx1MDAzZWtleV9zaXplO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MzM4OlxcdFxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdub19mcm9tX3JlZyhyZWdubyksIGtleV9zaXplLCBCUEZfUkVBRCwgZmFsc2UsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzM5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODM2NC1cXHRcXHRtZXRhLVxcdTAwM2VyYXdfbW9kZSA9IGFyZ190eXBlIFxcdTAwMjYgTUVNX1VOSU5JVDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODM2NTpcXHRcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBtZXRhLVxcdTAwM2VtYXAucHRyLVxcdTAwM2V2YWx1ZV9zaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzY2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGFyZ190eXBlIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQwOC1cXHRcXHRpZiAoYXJnX3R5cGUgXFx1MDAyNiBNRU1fRklYRURfU0laRSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NDA5OlxcdFxcdFxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdub19mcm9tX3JlZyhyZWdubyksIGZuLVxcdTAwM2Vhcmdfc2l6ZVthcmddLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGFyZ190eXBlIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyNzA9Z2V0X2tmdW5jX3B0cl9hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1OC1cXHQvKiBUaGlzIGlzIHRoZSBjYXRjaCBhbGwgYXJndW1lbnQgdHlwZSBvZiByZWdpc3RlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTk6XFx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MuIEhvd2V2ZXIsIHdlIG9ubHkgYWxsb3cgd2hlbiBhcmd1bWVudCB0eXBlIGlzXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzYwLVxcdCAqIHBvaW50ZXIgdG8gc2NhbGFyLCBvciBzdHJ1Y3QgY29tcG9zZWQgKHJlY3Vyc2l2ZWx5KSBvZiBzY2FsYXJzLiBXaGVuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE5OjE0LjA4NjA0NzE2WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTg0MzM3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBIZWxwZXIgQXJndW1lbnQgVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyB3ZSB2YWxpZGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBoZWxwZXJzLiBJdCdzIGNsZWFyIHRoYXQgYGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIHdoaWNoIG1lYW5zIGBjaGVja19idWZmZXJfYWNjZXNzYCBwcm9iYWJseSBnZXRzIGEgbG90IG9mIHVzZSwgYW5kIG5vdCBqdXN0IGZvciB0aGUgb2J2aW91cyBjYXNlcyBsaWtlIGBQVFJfVE9fQlVGYCBhbmQgYFBUUl9UT19UUF9CVUZGRVJgLiBIbW0sIGl0IGp1c3Qgc3RydWNrIG1lOiBgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3NgICppdHNlbGYqIGNhbGxzIGBjaGVja19idWZmZXJfYWNjZXNzYCB3aGVuIGRlYWxpbmcgd2l0aCBgUFRSX1RPX0JVRmAuIFJpZ2h0LiBTZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AgZGlyZWN0bHkgYW5kIHNlZSBleGFjdGx5IGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxOToxOC4yNDQ0ODQ0NThaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NzYwOlxcdFxcbjY3NjE6XFx0c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbjY3NjI6XFx0XFx0XFx0XFx0XFx0ICAgaW50IGFjY2Vzc19zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhY2Nlc3NfdHlwZSxcXG42NzYzOlxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgemVyb19zaXplX2FsbG93ZWQsXFxuNjc2NDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuNjc2NTpcXHR7XFxuNjc2NjpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuNjc2NzpcXHRcXHR1MzIgKm1heF9hY2Nlc3M7XFxuNjc2ODpcXHRcXG42NzY5OlxcdFxcdHN3aXRjaCAoYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSkpIHtcXG42NzcwOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVDpcXG42NzcxOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVF9NRVRBOlxcbjY3NzI6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX3BhY2tldF9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcXG42NzczOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHplcm9fc2l6ZV9hbGxvd2VkKTtcXG42Nzc0OlxcdFxcdGNhc2UgUFRSX1RPX01BUF9LRVk6XFxuNjc3NTpcXHRcXHRcXHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XFxuNjc3NjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGNhbm5vdCB3cml0ZSBpbnRvICVzXFxcXG5cXFwiLFxcbjY3Nzc6XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXFx1MDAzZXR5cGUpKTtcXG42Nzc4OlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjY3Nzk6XFx0XFx0XFx0fVxcbjY3ODA6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX21lbV9yZWdpb25fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgMCwgYWNjZXNzX3NpemUsXFxuNjc4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcmVnLVxcdTAwM2VtYXBfcHRyLVxcdTAwM2VrZXlfc2l6ZSwgZmFsc2UpO1xcbjY3ODI6XFx0XFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxcbjY3ODM6XFx0XFx0XFx0aWYgKGNoZWNrX21hcF9hY2Nlc3NfdHlwZShlbnYsIHJlZywgMCwgYWNjZXNzX3NpemUsIGFjY2Vzc190eXBlKSlcXG42Nzg0OlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjY3ODU6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX21hcF9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcXG42Nzg2OlxcdFxcdFxcdFxcdFxcdFxcdHplcm9fc2l6ZV9hbGxvd2VkLCBBQ0NFU1NfSEVMUEVSKTtcXG42Nzg3OlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG42Nzg4OlxcdFxcdFxcdGlmICh0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVxcdTAwM2V0eXBlKSkge1xcbjY3ODk6XFx0XFx0XFx0XFx0aWYgKGFjY2Vzc190eXBlID09IEJQRl9XUklURSkge1xcbjY3OTA6XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBjYW5ub3Qgd3JpdGUgaW50byAlc1xcXFxuXFxcIixcXG42NzkxOlxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVxcdTAwM2V0eXBlKSk7XFxuNjc5MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG42NzkzOlxcdFxcdFxcdFxcdH1cXG42Nzk0OlxcdFxcdFxcdH1cXG42Nzk1OlxcdFxcdFxcdHJldHVybiBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIDAsXFxuNjc5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYWNjZXNzX3NpemUsIHJlZy1cXHUwMDNlbWVtX3NpemUsXFxuNjc5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgemVyb19zaXplX2FsbG93ZWQpO1xcbjY3OTg6XFx0XFx0Y2FzZSBQVFJfVE9fQlVGOlxcbjY3OTk6XFx0XFx0XFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXFx1MDAzZXR5cGUpKSB7XFxuNjgwMDpcXHRcXHRcXHRcXHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XFxuNjgwMTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGNhbm5vdCB3cml0ZSBpbnRvICVzXFxcXG5cXFwiLFxcbjY4MDI6XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXFx1MDAzZXR5cGUpKTtcXG42ODAzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjY4MDQ6XFx0XFx0XFx0XFx0fVxcbjY4MDU6XFx0XFxuNjgwNjpcXHRcXHRcXHRcXHRtYXhfYWNjZXNzID0gXFx1MDAyNmVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfcmRvbmx5X2FjY2VzcztcXG42ODA3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNjgwODpcXHRcXHRcXHRcXHRtYXhfYWNjZXNzID0gXFx1MDAyNmVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfcmR3cl9hY2Nlc3M7XFxuNjgwOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE5OjE4LjI0NTMwNDE2OFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM0MDg2MzA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgQnVmZmVyIEFjY2VzcyBDaGVja3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzYCBzcGVjaWZpY2FsbHkgdXNlcyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2Agd2hlbiBkZWFsaW5nIHdpdGggYFBUUl9UT19CVUZgLiBTbywgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGlzLCBhdCBpdHMgY29yZSwgZGVzaWduZWQgZm9yIGhhbmRsaW5nIGBQVFJfVE9fQlVGYCBhY2Nlc3Nlcy4gU2ltaWxhcmx5LCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AgaXMgY2xlYXJseSB0YXJnZXRlZCBmb3IgYFBUUl9UT19UUF9CVUZGRVJgLiBJbnRlcmVzdGluZ2x5LCBib3RoIHRoZXNlIGZ1bmN0aW9ucyB1bHRpbWF0ZWx5IHJlbHkgb24gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuXG5cblRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBidWZmZXIgYWNjZXNzIGNoZWNrcy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0VWRU5UU2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBgQ09ORklHX1RSQUNJTkdgIGlzIGFsc28gbmVjZXNzYXJ5LiBgQ09ORklHX0JQRl9FVkVOVFNgIHVzdWFsbHkgZGVwZW5kcyBvbiBgQ09ORklHX1RSQUNJTkdgLCBidXQgSSBjYW4ganVzdCBsaXN0IGBCUEZfRVZFTlRTYCBmb3Igbm93LiBMZXQgbWUgY29uc3VsdCBga2VybmVsL3RyYWNlL0tjb25maWdgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBgQlBGX0VWRU5UU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTk6MzYuNTg2MTY5ODAxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjI0MTM3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctODU0LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTk6MzYuOTA4NTg4MDI5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODE0NTIzMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBWZXJpZmllciBCb3VuZHMgQ2hlY2sgQnlwYXNzKipcblxuT2theSwgc28gYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGl0J3MgY2xlYXIgdGhhdCBmb2N1c2luZyBvbiBgQlBGX0VWRU5UU2AgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIHRoZSBjb25maWd1cmF0aW9uLiBMZXQgbWUgc3VtbWFyaXplIG15IHRoaW5raW5nIGhlcmUuIFdlJ3ZlIGdvdCBhIGNyaXRpY2FsIGJvdW5kcyBjaGVja2luZyBieXBhc3MgZml4IGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBuZWVkcyB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5UaGUgaGlnaC1sZXZlbCBzdW1tYXJ5IGlzOlxuKiAgIFdlJ3JlIGRlZmluaXRlbHkgZnV6emluZyB0aGlzLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuXG4qICAgVGhlIHByaW1hcnkgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdGFyZ2V0IHdpdGggb3VyIGZ1enppbmcgZWZmb3J0cywgYW5kIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLCBhcmU6XG4gICAgKiAgIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgXG4gICAgKiAgIGBjaGVja190cF9idWZmZXJfYWNjZXNzYFxuICAgICogICBgY2hlY2tfYnVmZmVyX2FjY2Vzc2BcbiogICBUaGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBkdXJpbmcgZnV6emluZyBhcmU6XG4gICAgKiAgIGBCUEZfU1lTQ0FMTGBcbiAgICAqICAgYEJQRl9FVkVOVFNgXG5cblRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBhIGJvdW5kcyBjaGVja2luZyBieXBhc3Mgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSB2dWxuZXJhYmlsaXR5IGFsbG93cyBuZWdhdGl2ZSB2YXJpYWJsZSBvZmZzZXRzIHRvIGJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIHRoZSBpbnRlbmRlZCBidWZmZXIgYm91bmRhcmllcywgYWZmZWN0aW5nIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgcGF0Y2ggaXRzZWxmIGltcGxlbWVudHMgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3Mgd2l0aGluIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCB3aGljaCBpcyBhIGNvcmUgdmVyaWZpZXIgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGZ1enppbmcgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIG9yIHNpbWlsYXIgYnlwYXNzZXMuXG5cbkkgZG91YmxlLWNoZWNrZWQgdG8gY29uZmlybSB0aGF0IHRoZSBsaXN0ZWQgZnVuY3Rpb25zIHdlcmUgdGhlIG9ubHkgb25lcyB0aGF0IHdlcmUgbW9kaWZpZWQsIGFuZCB0aGF0J3MgY29ycmVjdDogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYCB3ZXJlIGFsbCBpbXBhY3RlZC5cblxuVGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBhbmQgZG9jdW1lbnQgb3VyIHBsYW5uZWQgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MTgsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE5OjU2LjcyMzExNDc0NloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzE5NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfYnVmZmVyX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfYnVmZmVyX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 12:58:55 +0000 UTC FinishedAt: 2026-07-07 13:19:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "12091470c6b4c1c14b2de12dcbae2ada6cb6d20b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "12091470c6b4c1c14b2de12dcbae2ada6cb6d20b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS" ], "series_id": "4f1e6afd-19a1-45b0-860d-375aa90d3bf9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__check_buffer_access", "check_tp_buffer_access", "check_buffer_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwMDQxZjAxZDRiZjFiMDRhMjZjZjkwOGVhZDU1NjNiZWU3NTQxZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDEzOjEyOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC01MzI2LDE0ICYjNDM7NTMyNiwxOCBAQCBzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi1cdFx0XHRcdCBhcmdub190IGFyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSlcbiYjNDM7XHRcdFx0XHQgYXJnbm9fdCBhcmdubywgaW50IG9mZiwgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0IHUzMiAqYWNjZXNzX2VuZClcbiB7XG4mIzQzO1x0czY0IHN0YXJ0LCB2YXJfb2ZmO1xuJiM0MztcbiBcdGlmIChvZmYgXHUwMDNjIDApIHtcbiBcdFx0dmVyYm9zZShlbnYsXG4gXHRcdFx0XCYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcXG5cJiMzNDssXG4gXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCBzaXplKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4mIzQzO1xuIFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuIFx0XHRjaGFyIHRuX2J1Zls0OF07XG4gXG5AQCAtNTM0NCw2ICYjNDM7NTM0OCwyOSBAQCBzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbiYjNDM7XHR2YXJfb2ZmID0gKHM2NClyZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHZhcl9vZmYsIChzNjQpb2ZmLCBcdTAwMjZzdGFydCkpIHtcbiYjNDM7XHRcdHZlcmJvc2UoZW52LFxuJiM0MztcdFx0XHRcJiMzNDslcyBpbnZhbGlkICVzIGJ1ZmZlciBhY2Nlc3M6IG9mZj0lZCwgdmFyX29mZj0lbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHZlcmJvc2UoZW52LFxuJiM0MztcdFx0XHRcJiMzNDslcyBpbnZhbGlkIG5lZ2F0aXZlICVzIGJ1ZmZlciBvZmZzZXQ6IG9mZj0lZCwgdmFyX29mZj0lbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNlIFUzMl9NQVggfHwgc2l6ZSBcdTAwM2MgMCB8fFxuJiM0MztcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coKHUzMilzdGFydCwgKHUzMilzaXplLCBhY2Nlc3NfZW5kKSkge1xuJiM0MztcdFx0dmVyYm9zZShlbnYsXG4mIzQzO1x0XHRcdFwmIzM0OyVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVsbGQsIHNpemU9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIHN0YXJ0LCBzaXplKTtcbiYjNDM7XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTM1MSwxNCAmIzQzOzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4gXHRcdFx0XHQgIGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKVxuIHtcbiYjNDM7XHR1MzIgYWNjZXNzX2VuZDtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBcJiMzNDt0cmFjZXBvaW50XCYjMzQ7LCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xuJiM0MztcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgocmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgJiM0Mzsgb2ZmICYjNDM7IHNpemUsXG4tXHRcdFx0XHRcdCAgICBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3RwX2FjY2Vzcyk7XG4mIzQzO1x0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgoYWNjZXNzX2VuZCwgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUzNzAsMTMgJiM0Mzs1Mzk3LDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICB1MzIgKm1heF9hY2Nlc3MpXG4ge1xuIFx0Y29uc3QgY2hhciAqYnVmX2luZm8gPSB0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVx1MDAzZXR5cGUpID8gXCYjMzQ7cmRvbmx5XCYjMzQ7IDogXCYjMzQ7cmR3clwmIzM0OztcbiYjNDM7XHR1MzIgYWNjZXNzX2VuZDtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcbiYjNDM7XHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcdTAwMjZhY2Nlc3NfZW5kKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHQqbWF4X2FjY2VzcyA9IG1heChyZWctXHUwMDNldmFyX29mZi52YWx1ZSAmIzQzOyBvZmYgJiM0Mzsgc2l6ZSwgKm1heF9hY2Nlc3MpO1xuJiM0MztcdCptYXhfYWNjZXNzID0gbWF4KGFjY2Vzc19lbmQsICptYXhfYWNjZXNzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcbmluZGV4IDIxNmIwZGZhYzBmZTYxLi5lZmU0Y2FkNDdiMjgwYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZC5jXG5AQCAtNCwxMiAmIzQzOzQsMzEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uYmQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2JwZl91dGlsLmhcJiMzNDtcbiBcbi12b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBjaGVja19uYmRfYXR0YWNoX3JlamVjdChjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnByb2dyYW0sIHNpemVfdCBwcm9nX2xlbilcbiB7XG4tXHRfX3UzMiBkdXJhdGlvbiA9IDA7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzKTtcbiBcdGNoYXIgZXJyb3JbNDA5Nl07XG4tXHRpbnQgYnBmX2ZkID0gLTEsIHRwX2ZkID0gLTE7XG4mIzQzO1x0aW50IGJwZl9mZCwgdHBfZmQ7XG4mIzQzO1xuJiM0MztcdG9wdHMubG9nX2xldmVsID0gMjtcbiYjNDM7XHRvcHRzLmxvZ19idWYgPSBlcnJvcjtcbiYjNDM7XHRvcHRzLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKTtcbiYjNDM7XG4mIzQzO1x0YnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCBcJiMzNDtHUEwgdjJcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBwcm9ncmFtLCBwcm9nX2xlbiwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYnBmX2ZkLCAwLCBcJiMzNDtwcm9nX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0cF9mZCA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKFwmIzM0O25iZF9zZW5kX3JlcXVlc3RcJiMzNDssIGJwZl9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTFQodHBfZmQsIDAsIG5hbWUpKVxuJiM0MztcdFx0Y2xvc2UodHBfZmQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShicGZfZmQpO1xuJiM0Mzt9XG4gXG4mIzQzO3ZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpXG4mIzQzO3tcbiBcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiBwcm9ncmFtW10gPSB7XG4gXHRcdC8qIHI2IGlzIG91ciB0cCBidWZmZXIgKi9cbiBcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksXG5AQCAtMTksMjUgJiM0MzszOCwxOCBAQCB2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxuIFx0XHRCUEZfRVhJVF9JTlNOKCksXG4gXHR9O1xuIFxuLVx0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzLFxuLVx0XHQubG9nX2xldmVsID0gMixcbi1cdFx0LmxvZ19idWYgPSBlcnJvcixcbi1cdFx0LmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKSxcbi1cdCk7XG4tXG4tXHRicGZfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUsIE5VTEwsIFwmIzM0O0dQTCB2MlwmIzM0Oyxcbi1cdFx0XHQgICAgICAgcHJvZ3JhbSwgQVJSQVlfU0laRShwcm9ncmFtKSxcbi1cdFx0XHQgICAgICAgXHUwMDI2b3B0cyk7XG4tXHRpZiAoQ0hFQ0soYnBmX2ZkIFx1MDAzYyAwLCBcJiMzNDticGZfcmF3X3RyYWNlcG9pbnRfd3JpdGFibGUgbG9hZFwmIzM0Oyxcbi1cdFx0ICBcJiMzNDtmYWlsZWQ6ICVkIGVycm5vICVkXFxuXCYjMzQ7LCBicGZfZmQsIGVycm5vKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcJiMzNDtuYmRfc2VuZF9yZXF1ZXN0XCYjMzQ7LCBicGZfZmQpO1xuLVx0aWYgKENIRUNLKHRwX2ZkIFx1MDAzZT0gMCwgXCYjMzQ7YnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIG9wZW5cJiMzNDssXG4tXHRcdCAgXCYjMzQ7ZXJyb25lb3VzbHkgc3VjY2VlZGVkXFxuXCYjMzQ7KSlcbi1cdFx0Z290byBvdXRfYnBmZmQ7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9pbnNuIG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbVtdID0ge1xuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHQvKiBtYWtlIHZhcl9vZmYgbmVnYXRpdmUsIGJ1dCBrZWVwIHRoZSBlZmZlY3RpdmUgYWNjZXNzIG9mZnNldCBub24tbmVnYXRpdmUgKi9cbiYjNDM7XHRcdEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR182LCAtOCksXG4mIzQzO1x0XHQvKiBvbmUgYnl0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbmJkX3JlcXVlc3Qgc3RydWN0ICovXG4mIzQzO1x0XHRCUEZfTERYX01FTShCUEZfQiwgQlBGX1JFR18wLCBCUEZfUkVHXzYsXG4mIzQzO1x0XHRcdCAgICBzaXplb2Yoc3RydWN0IG5iZF9yZXF1ZXN0KSAmIzQzOyA4KSxcbiYjNDM7XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHR9O1xuIFxuLVx0Y2xvc2UodHBfZmQpO1xuLW91dF9icGZmZDpcbi1cdGNsb3NlKGJwZl9mZCk7XG4mIzQzO1x0Y2hlY2tfbmJkX2F0dGFjaF9yZWplY3QoXCYjMzQ7bmJkX2ludmFsaWRcJiMzNDssIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSkpO1xuJiM0MztcdGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KFwmIzM0O25iZF9pbnZhbGlkX25lZ2F0aXZlX3Zhcl9vZmZcJiMzNDssXG4mIzQzO1x0XHRcdFx0bmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtLFxuJiM0MztcdFx0XHRcdEFSUkFZX1NJWkUobmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtKSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuY1xuaW5kZXggMTRhMDE3MmUyMTQxZTguLjQwNTVhNjQ0M2JjMjBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmNcbkBAIC00Nyw0ICYjNDM7NDcsMjAgQEAgbDBfJT06XHQvKiBzaGlmdCB0aGUgYnVmZmVyIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBsb2NhdGlvbiAqL1xcXG4gXHQ6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3Jhd190cmFjZXBvaW50LndcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cmF3X3RyYWNlcG9pbnRfd3JpdGFibGU6IHJlamVjdCBuZWdhdGl2ZSBjb25zdCBvZmZzZXRcJiMzNDspXG4mIzQzO19fZmFpbHVyZVxuJiM0MztfX21zZyhcJiMzNDtpbnZhbGlkIG5lZ2F0aXZlIHRyYWNlcG9pbnQgYnVmZmVyIG9mZnNldFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHRyYWNlcG9pbnRfd3JpdGFibGVfcmVqZWN0X25lZ2F0aXZlX2NvbnN0X29mZnNldCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiA9ICoodTY0ICopKHIxICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiAmIzQzOz0gLTg7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHU2NCAqKShyNiAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjAwNDFmMDFkNGJmMWIwNGEyNmNmOTA4ZWFkNTU2M2JlZTc1NDFmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTM6MTI6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01MzI2LDE0ICYjNDM7NTMyNiwxOCBAQCBzdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogc3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgY29uc3QgY2hhciAqYnVmX2luZm8sCiAJCQkJIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsCi0JCQkJIGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKQomIzQzOwkJCQkgYXJnbm9fdCBhcmdubywgaW50IG9mZiwgaW50IHNpemUsCiYjNDM7CQkJCSB1MzIgKmFjY2Vzc19lbmQpCiB7CiYjNDM7CXM2NCBzdGFydCwgdmFyX29mZjsKJiM0MzsKIAlpZiAob2ZmICZsdDsgMCkgewogCQl2ZXJib3NlKGVudiwKIAkJCSYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcbiYjMzQ7LAogCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCBzaXplKTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQomIzQzOwogCWlmICghdG51bV9pc19jb25zdChyZWctJmd0O3Zhcl9vZmYpKSB7CiAJCWNoYXIgdG5fYnVmWzQ4XTsKIApAQCAtNTM0NCw2ICYjNDM7NTM0OCwyOSBAQCBzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKJiM0MzsJdmFyX29mZiA9IChzNjQpcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KHZhcl9vZmYsIChzNjQpb2ZmLCAmYW1wO3N0YXJ0KSkgewomIzQzOwkJdmVyYm9zZShlbnYsCiYjNDM7CQkJJiMzNDslcyBpbnZhbGlkICVzIGJ1ZmZlciBhY2Nlc3M6IG9mZj0lZCwgdmFyX29mZj0lbGxkXG4mIzM0OywKJiM0MzsJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZsdDsgMCkgewomIzQzOwkJdmVyYm9zZShlbnYsCiYjNDM7CQkJJiMzNDslcyBpbnZhbGlkIG5lZ2F0aXZlICVzIGJ1ZmZlciBvZmZzZXQ6IG9mZj0lZCwgdmFyX29mZj0lbGxkXG4mIzM0OywKJiM0MzsJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZndDsgVTMyX01BWCB8fCBzaXplICZsdDsgMCB8fAomIzQzOwkgICAgY2hlY2tfYWRkX292ZXJmbG93KCh1MzIpc3RhcnQsICh1MzIpc2l6ZSwgYWNjZXNzX2VuZCkpIHsKJiM0MzsJCXZlcmJvc2UoZW52LAomIzQzOwkJCSYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWxsZCwgc2l6ZT0lZFxuJiMzNDssCiYjNDM7CQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgc3RhcnQsIHNpemUpOwomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM1MSwxNCAmIzQzOzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAogCQkJCSAgYXJnbm9fdCBhcmdubywgaW50IG9mZiwgaW50IHNpemUpCiB7CiYjNDM7CXUzMiBhY2Nlc3NfZW5kOwogCWludCBlcnI7CiAKLQllcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCAmIzM0O3RyYWNlcG9pbnQmIzM0OywgcmVnLCBhcmdubywgb2ZmLCBzaXplKTsKJiM0MzsJZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgJiMzNDt0cmFjZXBvaW50JiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgJmFtcDthY2Nlc3NfZW5kKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZW52LSZndDtwcm9nLSZndDthdXgtJmd0O21heF90cF9hY2Nlc3MgPSBtYXgocmVnLSZndDt2YXJfb2ZmLnZhbHVlICYjNDM7IG9mZiAmIzQzOyBzaXplLAotCQkJCQkgICAgZW52LSZndDtwcm9nLSZndDthdXgtJmd0O21heF90cF9hY2Nlc3MpOwomIzQzOwllbnYtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7bWF4X3RwX2FjY2VzcyA9IG1heChhY2Nlc3NfZW5kLCBlbnYtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7bWF4X3RwX2FjY2Vzcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzNzAsMTMgJiM0Mzs1Mzk3LDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJICAgICAgIHUzMiAqbWF4X2FjY2VzcykKIHsKIAljb25zdCBjaGFyICpidWZfaW5mbyA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctJmd0O3R5cGUpID8gJiMzNDtyZG9ubHkmIzM0OyA6ICYjMzQ7cmR3ciYjMzQ7OwomIzQzOwl1MzIgYWNjZXNzX2VuZDsKIAlpbnQgZXJyOwogCi0JZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgYnVmX2luZm8sIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSk7CiYjNDM7CWVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsICZhbXA7YWNjZXNzX2VuZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCSptYXhfYWNjZXNzID0gbWF4KHJlZy0mZ3Q7dmFyX29mZi52YWx1ZSAmIzQzOyBvZmYgJiM0Mzsgc2l6ZSwgKm1heF9hY2Nlc3MpOwomIzQzOwkqbWF4X2FjY2VzcyA9IG1heChhY2Nlc3NfZW5kLCAqbWF4X2FjY2Vzcyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYwppbmRleCAyMTZiMGRmYWMwZmU2MS4uZWZlNGNhZDQ3YjI4MGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmMKQEAgLTQsMTIgJiM0Mzs0LDMxIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmJkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl91dGlsLmgmIzM0OwogCi12b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnByb2dyYW0sIHNpemVfdCBwcm9nX2xlbikKIHsKLQlfX3UzMiBkdXJhdGlvbiA9IDA7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgb3B0cyk7CiAJY2hhciBlcnJvcls0MDk2XTsKLQlpbnQgYnBmX2ZkID0gLTEsIHRwX2ZkID0gLTE7CiYjNDM7CWludCBicGZfZmQsIHRwX2ZkOwomIzQzOwomIzQzOwlvcHRzLmxvZ19sZXZlbCA9IDI7CiYjNDM7CW9wdHMubG9nX2J1ZiA9IGVycm9yOwomIzQzOwlvcHRzLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKTsKJiM0MzsKJiM0MzsJYnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCAmIzM0O0dQTCB2MiYjMzQ7LAomIzQzOwkJCSAgICAgICBwcm9ncmFtLCBwcm9nX2xlbiwgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoYnBmX2ZkLCAwLCAmIzM0O3Byb2dfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbigmIzM0O25iZF9zZW5kX3JlcXVlc3QmIzM0OywgYnBmX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQodHBfZmQsIDAsIG5hbWUpKQomIzQzOwkJY2xvc2UodHBfZmQpOwomIzQzOwomIzQzOwljbG9zZShicGZfZmQpOwomIzQzO30KIAomIzQzO3ZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpCiYjNDM7ewogCWNvbnN0IHN0cnVjdCBicGZfaW5zbiBwcm9ncmFtW10gPSB7CiAJCS8qIHI2IGlzIG91ciB0cCBidWZmZXIgKi8KIAkJQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksCkBAIC0xOSwyNSAmIzQzOzM4LDE4IEBAIHZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpCiAJCUJQRl9FWElUX0lOU04oKSwKIAl9OwogCi0JTElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzLAotCQkubG9nX2xldmVsID0gMiwKLQkJLmxvZ19idWYgPSBlcnJvciwKLQkJLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKSwKLQkpOwotCi0JYnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCAmIzM0O0dQTCB2MiYjMzQ7LAotCQkJICAgICAgIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSksCi0JCQkgICAgICAgJmFtcDtvcHRzKTsKLQlpZiAoQ0hFQ0soYnBmX2ZkICZsdDsgMCwgJiMzNDticGZfcmF3X3RyYWNlcG9pbnRfd3JpdGFibGUgbG9hZCYjMzQ7LAotCQkgICYjMzQ7ZmFpbGVkOiAlZCBlcnJubyAlZFxuJiMzNDssIGJwZl9mZCwgZXJybm8pKQotCQlyZXR1cm47Ci0KLQl0cF9mZCA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKCYjMzQ7bmJkX3NlbmRfcmVxdWVzdCYjMzQ7LCBicGZfZmQpOwotCWlmIChDSEVDSyh0cF9mZCAmZ3Q7PSAwLCAmIzM0O2JwZl9yYXdfdHJhY2Vwb2ludF93cml0YWJsZSBvcGVuJiMzNDssCi0JCSAgJiMzNDtlcnJvbmVvdXNseSBzdWNjZWVkZWRcbiYjMzQ7KSkKLQkJZ290byBvdXRfYnBmZmQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfaW5zbiBuZWdhdGl2ZV92YXJfb2ZmX3Byb2dyYW1bXSA9IHsKJiM0MzsJCUJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR182LCBCUEZfUkVHXzEsIDApLAomIzQzOwkJLyogbWFrZSB2YXJfb2ZmIG5lZ2F0aXZlLCBidXQga2VlcCB0aGUgZWZmZWN0aXZlIGFjY2VzcyBvZmZzZXQgbm9uLW5lZ2F0aXZlICovCiYjNDM7CQlCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfNiwgLTgpLAomIzQzOwkJLyogb25lIGJ5dGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG5iZF9yZXF1ZXN0IHN0cnVjdCAqLwomIzQzOwkJQlBGX0xEWF9NRU0oQlBGX0IsIEJQRl9SRUdfMCwgQlBGX1JFR182LAomIzQzOwkJCSAgICBzaXplb2Yoc3RydWN0IG5iZF9yZXF1ZXN0KSAmIzQzOyA4KSwKJiM0MzsJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfTsKIAotCWNsb3NlKHRwX2ZkKTsKLW91dF9icGZmZDoKLQljbG9zZShicGZfZmQpOwomIzQzOwljaGVja19uYmRfYXR0YWNoX3JlamVjdCgmIzM0O25iZF9pbnZhbGlkJiMzNDssIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSkpOwomIzQzOwljaGVja19uYmRfYXR0YWNoX3JlamVjdCgmIzM0O25iZF9pbnZhbGlkX25lZ2F0aXZlX3Zhcl9vZmYmIzM0OywKJiM0MzsJCQkJbmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtLAomIzQzOwkJCQlBUlJBWV9TSVpFKG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbSkpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jCmluZGV4IDE0YTAxNzJlMjE0MWU4Li40MDU1YTY0NDNiYzIwYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuYwpAQCAtNDcsNCAmIzQzOzQ3LDIwIEBAIGwwXyU9OgkvKiBzaGlmdCB0aGUgYnVmZmVyIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBsb2NhdGlvbiAqL1wKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7U0VDKCYjMzQ7cmF3X3RyYWNlcG9pbnQudyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtyYXdfdHJhY2Vwb2ludF93cml0YWJsZTogcmVqZWN0IG5lZ2F0aXZlIGNvbnN0IG9mZnNldCYjMzQ7KQomIzQzO19fZmFpbHVyZQomIzQzO19fbXNnKCYjMzQ7aW52YWxpZCBuZWdhdGl2ZSB0cmFjZXBvaW50IGJ1ZmZlciBvZmZzZXQmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgdHJhY2Vwb2ludF93cml0YWJsZV9yZWplY3RfbmVnYXRpdmVfY29uc3Rfb2Zmc2V0KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXI2ID0gKih1NjQgKikocjEgJiM0MzsgMCk7CQkJCVwKJiM0MzsJcjYgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwlyMCA9ICoodTY0ICopKHI2ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOgomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZm9jdXNlZCBvbiBlbmhhbmNpbmcgYnVmZmVyIGFjY2VzcyBjaGVja3Mgd2l0aGluIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZyBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gSSBzZWUgdGhlIGNoYW5nZXMgdG91Y2ggdGhyZWUga2V5IGZ1bmN0aW9uczogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gVGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyYjMzQ7IHRvIG1lLCByaWdodCBvZmYgdGhlIGJhdC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgdGhlIG1haW4gZm9jdXMgc2VlbXMgdG8gYmUgb24gcHJldmVudGluZyBuZWdhdGl2ZSBvZmZzZXRzIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBidWZmZXIgYWNjZXNzIGJvdW5kYXJpZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLiBUaGV5JiMzOTt2ZSBhZGRlZCBjaGVja3MgZm9yIG5lZ2F0aXZlIG9mZnNldHMsIGFuZCwgY2xldmVybHksIGFyZSBjaGVja2luZyBmb3Igb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB0aGUgc3RhcnRpbmcgb2Zmc2V0IHdpdGhpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIGVuZCBwb2ludC4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIHJvYnVzdG5lc3MuCgpNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9ucyBhbmQgc2VlIGhvdyB0aGV5IGFyZSB0cmlnZ2VyZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3Mgc2FmZSB0byBzYXkgQlBGIG5lZWRzIHRvIGJlIGVuYWJsZWQgdG8gc3RhcnQsIGFuZCB0aGF0IGxpa2VseSBtZWFucyBgQ09ORklHX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIG5lZWQgdG8gYmUgc2V0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudmlyb25tZW50IHRvIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zIHJlbGlhYmx5LgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOb3csIGxldCYjMzk7cyBmaXJlIHVwIHNvbWUgdG9vbHMgYW5kIHN0YXJ0IHZlcmlmeWluZyB0aGlzLCB3aGljaCBpcyBhIGdvb2QgdXNlIG9mIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jaGVja19idWZmZXJfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzOTM9c3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTQwMzpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFx1MDAyNmFjY2Vzc19lbmQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEJ1ZmZlciBBY2Nlc3MgQ2hlY2tzIGluIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGJ1ZmZlciBhY2Nlc3MgZnVuY3Rpb25zOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgc2ltcGx5IGBjaGVja19idWZmZXJfYWNjZXNzYC4gQ2xlYXJseSwgdGhlc2UgYXJlIGFsbCBrZXkgY29tcG9uZW50cyBvZiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgbWFpbiBjb25maWd1cmF0aW9uIGdvdmVybmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgYEJQRl9TWVNDQUxMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgYnVmZmVyIGFjY2VzcyBpcyBvZnRlbiByZWxhdGVkIHRvIHN5c3RlbSBjYWxscyBhbmQgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBCUEYgY29udGV4dC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgKnNwZWNpZmljKiBjb25maWdzIHRoYXQgZmluZS10dW5lIGBjaGVja190cF9idWZmZXJfYWNjZXNzYD8gVGhpcyBmdW5jdGlvbiYjMzk7cyBuYW1lIGltcGxpZXMgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIHRyYWNlcG9pbnRzLCBzbyBteSBpbml0aWFsIGludHVpdGlvbiBpcyB0byBjaGVjayB3aGV0aGVyIGl0JiMzOTtzIGxpbmtlZCB0byBgQlBGX0VWRU5UU2Agb3IgYFRSQUNJTkdgIHNpbmNlIHRob3NlIHNlZW0gbGlrZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHRyYWNlcG9pbnQtcmVsYXRlZCBCUEYgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTMyNj1zdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzNzc6c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3OC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzA2LVx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMwNzpcdFx0ZXJyID0gY2hlY2tfdHBfYnVmZmVyX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMwOC1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEZWR1Y3RpdmUgUmVhc29uaW5nIG9uIE1lbW9yeSBBY2Nlc3MgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY2FsbHMgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIHZlcmlmaWNhdGlvbiwgYW5kIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGNyeXN0YWxsaXplIGEgYml0LiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUsIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgaXMgYWxzbyBnZXR0aW5nIGludm9rZWQgKmRvd25zdHJlYW0qIHRocm91Z2ggYGNoZWNrX21lbV9hY2Nlc3NgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgbGF5ZXJpbmcgb2YgY2hlY2tzLCBwZXJoYXBzIGEgbW9yZSBnZW5lcmljIG1lbW9yeSBhY2Nlc3MgY2hlY2sgKGBjaGVja19tZW1fYWNjZXNzYCkgdGhhdCAqdGhlbiogZnVubmVscyBpbnRvIGEgYnVmZmVyLXNwZWNpZmljIGNoZWNrIChgY2hlY2tfYnVmZmVyX2FjY2Vzc2ApIGZvciBtb3JlIGdyYW51bGFyIHZhbGlkYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGhpZXJhcmNoeSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBpbiB0aGlzIGFyZWEsIGJlY2F1c2UgdGhlIG9yaWdpbiBhbmQgaW50ZW50IG9mIHRoZSBjaGVja3MgbWF5IGJlIGxheWVyZWQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGNvbnRpbnVlIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM5MzpzdGF0aWMgaW50IGNoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzk0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU0MDM6XHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcdTAwMjZhY2Nlc3NfZW5kKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDA0LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzMyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMzM6XHRcdGVyciA9IGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIGZhbHNlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzQtXHRcdFx0XHRcdCAgbWF4X2FjY2Vzcyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA5LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMDpcdFx0cmV0dXJuIGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTEtXHRcdFx0XHRcdCAgIGFjY2Vzc19zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzU2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCdWZmZXIgQWNjZXNzIENoZWNrcyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhyZWUga2V5IGZ1bmN0aW9ucyBoZXJlOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGVzZSBhcmUgYWxsIGNsZWFybHkgcmVsYXRlZCB0byB2YWxpZGF0aW5nIGFjY2VzcyB0byBidWZmZXJzLCB3aGljaCBpcyBhIGNvbW1vbiBzZWN1cml0eSBjb25zaWRlcmF0aW9uIGluIHRoaXMgdHlwZSBvZiBlbnZpcm9ubWVudC4KClRoZSBtZW50aW9uIG9mIGBCUEZfU1lTQ0FMTGAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYgcHJvZ3JhbXMgYW5kIGxpa2VseSBzeXN0ZW0gY2FsbCBpbnRlcmFjdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBTbywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxheSBoZXJlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgpBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhlIHNlbGZ0ZXN0IGByYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNgLiBBaCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQmIzM5O3MgYWxsIGNvbWluZyB0b2dldGhlciEgVGhpcyB0ZXN0IGlzIGZvY3VzZWQgb24gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBBbmQgdGhhdCBicmluZ3MgYENPTkZJR19CUEZfRVZFTlRTYCBpbnRvIHRoZSBlcXVhdGlvbi4gU28sIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJhdyB0cmFjZXBvaW50cywgd3JpdGFibGUgcHJvZ3JhbXMsIGFuZCB0aGUgZXZlbnRzIGluZnJhc3RydWN0dXJlLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCB0aGUgYnVmZmVyIGFjY2VzcyBjaGVja3MgYXJlIGNyaXRpY2FsIHRvIHByZXZlbnQgbWFsaWNpb3VzIHVzZSBvZiB0aGVzZSB0cmFjZXBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9NjIxNj1zdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9wcm9nX2N0eF90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzMtXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjYyNzQ6XHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzUtXHRcdC8qIGFsbG93IHU2NCogYXMgY3R4ICovXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3MT1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NzctXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODc4Olx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg3OS1cdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDSU5HOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Mzc4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM3OTpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzODAtXHRcdGlmIChzdHJuY3B5X2Zyb21fdXNlcihidWYsIHVzZXJfdHBfbmFtZSwgc2l6ZW9mKGJ1ZikgLSAxKSBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3MjM9c3RhdGljIGJvb2wgaXNfdHJhY2luZ19wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzI5LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NzMwOlx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzMxLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxOAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHBpbiBkb3duIGV4YWN0bHkgd2hlcmUgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlcy4gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IG5ldyBwcm9ncmFtIHR5cGUsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBsYXRlc3QgaW5mb3JtYXRpb24gYW5kIGRvbiYjMzk7dCBtaXNpbnRlcnByZXQgYW55IHByaW9yLCBvbGRlciBkZWZpbml0aW9ucy4gTmV4dCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWNlc3NhcnkgdG8gaGF2ZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBlbmFibGVkLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIHRocm91Z2ggdGhlIHJlbGV2YW50IGluY2x1ZGUgZmlsZXMsIGxvb2tpbmcgZm9yIHRoZSBhY3R1YWwgZGVmaW5pdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyB0byBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYnJpbmcgdGhpcyBwcm9ncmFtIHR5cGUgaW50byBwbGF5LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgcmVnYXJkaW5nIHNlY3VyaXR5IGFuZCByZXNvdXJjZSBsaW1pdHMgd2l0aCByYXcgdHJhY2Vwb2ludHMgYmVpbmcgd3JpdGFibGUuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bGwgZGVwZW5kZW5jeSB0cmVlLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBwcm9ncmFtIHR5cGUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEJQRiBlY29zeXN0ZW0uIEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIGZ1bGwgbWVudGFsIG1hcCBvZiB3aGVyZSB0aGlzIHRoaW5nIGxpdmVzLCBhbmQgd2hhdCBjb250cm9scyBpdHMgYmVoYXZpb3IuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCBhbmQgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTMyPXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM4Ni0gKlx0XHQqKkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQqKixcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozODc6ICpcdFx0KipCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFKipcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zODgtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTA2Mj1lbnVtIGJwZl9wcm9nX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDg2LVx0QlBGX1BST0dfVFlQRV9DR1JPVVBfU1lTQ1RMLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODc6XHRCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODgtXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBCUEYgVHJhY2Vwb2ludCBJbnRlcm5hbHMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBsaWtlbHkgcmVsYXRlZCB0byB3cml0YWJsZSByYXcgdHJhY2Vwb2ludHMgYW5kLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2QgZG8gaXMgemVybyBpbiBvbiB0aGUgc291cmNlIGNvZGUsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O2QgZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBtZW50aW9uIG9mIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFYCBpcyBhIHByZXR0eSBzdHJvbmcgaGludCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBjb2RlIHJlc2lkZXMuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBsb29raW5nIGVsc2V3aGVyZSBpbml0aWFsbHk7IHRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBCUEYgcHJvZ3JhbSB0eXBlIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhc3NvY2lhdGVkIGxvZ2ljIHRoYXQgZGVmaW5lIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIHRoYXQgYGtlcm5lbC9icGYvYCBkaXJlY3Rvcnk6CgoqKkV4YW1pbmluZyBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gTXkgZm9jdXMgaXMgc3BlY2lmaWNhbGx5IG9uIGFueXRoaW5nIHJlbGF0ZWQgdG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIG9yIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVjZW50IGNoYW5nZXMgdGhlcmUgdGhhdCBhcmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbnNpZGVyIGFsbCBhbmdsZXMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciBCUEYgcHJvZ3JhbSB0eXBlIGlzIGhhbmRsZWQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTYyMTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy02MjczLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9idGYuYzo2Mjc0Olx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxua2VybmVsL2JwZi9idGYuYy02Mjc1LVx0XHQvKiBhbGxvdyB1NjQqIGFzIGN0eCAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI4NzE9c3RhdGljIGJvb2wgaXNfcGVyZm1vbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg3ODpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NzktXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0lORzpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzgwLVx0XHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzIzPXN0YXRpYyBib29sIGlzX3RyYWNpbmdfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzcyOS1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzczMDpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMS1cdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgQlBGIFByb2dyYW0gVHlwZSBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIGtub3cgaXQmIzM5O3MgaGFuZGxlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBhbHNvIGdldHMgdmVyaWZpY2F0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbiBwbGF5IGhlcmU/IEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZXMgdGhlIHZlcmlmaWVyLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgb25lLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2suIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2xhcmlmeSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xuICAxMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuICAxMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuICAxMzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbiAgMTU6XHRvYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiAgMTY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiAgMTg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuICAxOTpcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4gIDIwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG4gIDIzOlx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxuICAyNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbiAgMjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbiAgMjc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbiAgMjg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuICAyOTpcdGVuZGlmXG4gIDMwOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICAzNzpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDM4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgMzk6XHRlbmRpZlxuICA0MDpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuICA0MTpcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG4gIDQyOlx0ZW5kaWZcbiAgNDM6XHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuICA0NDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbiAgNDU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAgNDY6XHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbiAgNDc6XHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxuICA0ODpcdCMgYnRmX2VuY29kZXJfX2FkZF9zYXZlZF9mdW5jKCkgYnkga2VlcGluZyB0aGUgZmlyc3QgaW5zdGFuY2Ugc2Vlbi4gV2VcbiAgNDk6XHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXG4gIDUwOlx0IyBvdmVyIHRob3NlIHdpdGhpbiBicGZfbHNtLm8uIEhhdmluZyBicGZfbHNtX3Byb3RvLm8gcHJlY2VkZVxuICA1MTpcdCMgYnBmX2xzbS5vIGVuc3VyZXMgaXRzIERXQVJGIENVIGlzIHByb2Nlc3NlZCBlYXJseSwgZm9yY2luZyB0aGVcbiAgNTI6XHQjIGdlbmVyYXRlZCBCVEYgdG8gY29udGFpbiB0aGUgb3ZlcnJpZGVzLlxuICA1MzpcdCNcbiAgNTQ6XHQjIE5vdGFibHksIHRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGlsc3QgdGhlIGRlZHVwbGljYXRpb25cbiAgNTU6XHQjIHNlbWFudGljcyB3aXRoaW4gcGFob2xlIGFyZSByZXZpc2l0ZWQgYWNjb3JkaW5nbHkuXG4gIDU2Olx0b2JqLSR7Q09ORklHX0JQRl9MU019ICYjNDM7PSBicGZfbHNtX3Byb3RvLm8gYnBmX2xzbS5vXG4gIDU3Olx0ZW5kaWZcbiAgNTg6XHRpZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG4gIDU5Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbiAgNjA6XHRlbmRpZlxuICA2MTpcdG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG4gIDYyOlx0XG4gIDYzOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbiAgNjQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG4gIDY1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX3JlbG9jYXRlLm9cbiAgNjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBrbWVtX2NhY2hlX2l0ZXIub1xuICA2NzpcdGlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxuICA2ODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRtYWJ1Zl9pdGVyLm9cbiAgNjk6XHRlbmRpZlxuICA3MDpcdFxuICA3MTpcdENGTEFHU19SRU1PVkVfcGVyY3B1X2ZyZWVsaXN0Lm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzI6XHRDRkxBR1NfUkVNT1ZFX2JwZl9scnVfbGlzdC5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4gIDczOlx0Q0ZMQUdTX1JFTU9WRV9xdWV1ZV9zdGFja19tYXBzLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzQ6XHRDRkxBR1NfUkVNT1ZFX2xwbV90cmllLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiAgNzU6XHRDRkxBR1NfUkVNT1ZFX3JpbmdidWYubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuICA3NjpcdENGTEFHU19SRU1PVkVfcnFzcGlubG9jay5vID0gJChDQ19GTEFHU19GVFJBQ0UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDEzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGVuYWJsaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIHBpZWNlIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtLiBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGUga2V5IGZ1bmN0aW9ucyBpZGVudGlmaWVkOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIG15IGFuYWx5c2lzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBUaGF0JiMzOTtzIGdvb2QgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlIGZyb20gc3lzY2FsbHM/IFRoZSBhbnN3ZXIgaXMgeWVzLCB0aGV5IGFyZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBicGZgIHN5c2NhbGwuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LgoKVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFsbG93cyBuZWdhdGl2ZSBvZmZzZXRzIG9yIG92ZXJmbG93cyB0byBieXBhc3MgY3J1Y2lhbCBjaGVja3MuIFRoaXMgaXMgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHksIGFuZCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGhlcmUgaXMgc2lnbmlmaWNhbnQuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgYmV5b25kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGUgc2VsZi10ZXN0cyB1c2UgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwcm9ncmFtIHR5cGUgaXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQgd2hlbiBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agb3Igc2ltaWxhciBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSByZXBsaWNhdGUgdGhlIGVudmlyb25tZW50IGZvciBlZmZlY3RpdmUgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjI3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkgcmVtZW1iZXIgcnVubmluZyBhIGBncmVwYCBmb3IgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIHdpdGhpbiB0aGUgYGtlcm5lbC9gIGRpcmVjdG9yeSBhbHJlYWR5LiBUaGF0IHNob3VsZCBoYXZlIGNvdmVyZWQgbW9zdCBvZiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEkgb25seSBzYXcgaXQgbWVudGlvbmVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCwgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiAgVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCB3aGljaCBtYWtlcyB0aGluZ3MgYSBiaXQgZWFzaWVyIHRvIHRyYWNrIGRvd24uIEdpdmVuIGl0JiMzOTtzIGEgcHJvZ3JhbSB0eXBlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXRzIHVzZSBpbnZvbHZlcyBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYmVjYXVzZSB0aGlzIHR5cGljYWxseSBhZmZlY3RzIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBpZiBpdCB3aWxsIHdvcmsuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTI4NzE9c3RhdGljIGJvb2wgaXNfcGVyZm1vbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg3ODpcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NzktXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0lORzpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzk6XHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzgwLVx0XHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkJQRiBSYXcgVHJhY2Vwb2ludCBMaW5rIEF0dGFjaG1lbnQgRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGJwZl9yYXdfdHBfbGlua19hdHRhY2hgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXcgdHJhY2Vwb2ludCBsaW5raW5nIHByb2Nlc3MuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhcmUgdGhlIGtleSBhc3BlY3RzIEkgbmVlZCB0byBjb25zaWRlcj8gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyB0cmFjZXBvaW50IGluZnJhc3RydWN0dXJlLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQga3Byb2JlL3Vwcm9iZSBtYWNoaW5lcnksIG9yIGlzIGl0IGRvaW5nIHNvbWV0aGluZyBtb3JlIGRpcmVjdGx5IGF0IHRoZSBrZXJuZWwgcHJvYmUgZW50cnkgcG9pbnRzPyBJIGtub3cgcmF3IHRyYWNlcG9pbnRzIGhhdmUgdGhlaXIgb3duIHNwZWNpZmljIHNldCBvZiBjb25zdHJhaW50cywgc28gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBCUEYgdmVyaWZpZXIgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3ZlcmxhcHMgd2l0aCBvdGhlciB0cmFjZXBvaW50IGhhbmRsZXJzLiBXaGF0IGtpbmQgb2YgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIEJQRiBwcm9ncmFtIGJlaW5nIGF0dGFjaGVkPyBBcmUgdGhlcmUgc3BlY2lmaWMgY2hlY2tzIGZvciByYXcgdHJhY2Vwb2ludHMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgcmVndWxhciBgdHJhY2Vwb2ludF9wcm9iZV9hdHRhY2hgIGxvZ2ljPyBUaGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGFub3RoZXIgaW1wb3J0YW50IGFzcGVjdC4gSG93IGlzIGl0IGVuc3VyaW5nIHRoYXQgdGhlIEJQRiBwcm9ncmFtIGRvZXNuJiMzOTt0IGludGVyZmVyZSB3aXRoIG90aGVyIGtlcm5lbCBhY3Rpdml0aWVzLCBvciBjcmVhdGUgYW55IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYXR0YWNoL2RldGFjaD8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkga25vd24gb3ZlcmhlYWRzLCBjb21wYXJlZCB0byBvdGhlciBCUEYgYXR0YWNoIG1ldGhvZHM/IElzIHRoZXJlIGEgZGlmZmVyZW5jZSBpbiBtZW1vcnkgdXNhZ2U/IEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggQ1BVIGNhY2hlIGNvaGVyZW5jeSBiZWNhdXNlIG9mIHRoZSByYXcgdHJhY2Vwb2ludCBpbnRlcmFjdGlvbnM/IEkgYWxzbyBuZWVkIHRvIGJlIHZpZ2lsYW50IGZvciBhbnkgZWRnZSBjYXNlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBmYWlsdXJlIG1vZGVzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGF0dGFjaCBmYWlscz8gSG93IGFyZSByZXNvdXJjZXMgY2xlYW5lZCB1cD8gSSB3aWxsIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVycyB0aGUgZnVuY3Rpb24gYWNjZXB0cyBhbmQgdGhlIHJldHVybiB2YWx1ZXMgaXQgY2FuIHByb2R1Y2UuIEJhc2ljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgd2F5IHRvIGludGVyYWN0IHdpdGggcmF3IHRyYWNlcG9pbnRzLiBMZXQmIzM5O3Mgc2VlIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmF3X3RwX2xpbmtfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MzM3NT1zdGF0aWMgYm9vbCBicGZfbGlua19pc190cmFjZXBvaW50KHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzgwLVx0ICogYnBmX3Jhd190cF9saW5rX2xvcHMgYW5kIHRodXMgZGVhbGxvY19kZWZlcnJlZCgpLCBzZWVcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMzODE6XHQgKiBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKCkuXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzgyLVx0ICovXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM0Nj1zdGF0aWMgaW50IGJwZl9wZXJmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM1MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNTI6c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNTMtXHRcdFx0XHQgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX3RwX25hbWUsIHU2NCBjb29raWUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDQzMD1zdGF0aWMgaW50IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0NDUtXHRjb29raWUgPSBhdHRyLVx1MDAzZXJhd190cmFjZXBvaW50LmNvb2tpZTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0NDY6XHRmZCA9IGJwZl9yYXdfdHBfbGlua19hdHRhY2gocHJvZywgdHBfbmFtZSwgY29va2llLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0NDctXHRpZiAoZmQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODg3LVx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfUkFXX1RQKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg4ODpcdFx0XHRyZXQgPSBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHByb2csIE5VTEwsIGF0dHItXHUwMDNlbGlua19jcmVhdGUudHJhY2luZy5jb29raWUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODg5LVx0XHRcdFx0XHRcdCAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCBhZG9wdGluZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqQlBGIEV2ZW50IFF1ZXN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgc3R1ZmYgYWdhaW4sIGFuZCBJJiMzOTt2ZSBoaXQgYSBzbWFsbCBzbmFnLiBJJiMzOTttIHNldHRpbmcgdXAgYSByYXcgdHJhY2Vwb2ludCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAuIE15IG1pbmQga2VlcHMgY2lyY2xpbmcgYmFjayB0byB0aGlzIGZ1bmRhbWVudGFsIHF1ZXN0aW9uOiBpcyBpdCAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IHRvIGhhdmUgYEJQRl9FVkVOVFNgIGVuYWJsZWQgb3IgY29uZmlndXJlZCBpbiBvcmRlciBmb3IgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IE9yLCBwdXQgYW5vdGhlciB3YXksIGlzIHRoYXQgY29uZmlndXJhdGlvbiBhIHByZXJlcXVpc2l0ZSwgb3IgaXMgdGhlcmUgc29tZSBvdGhlciBtZWNoYW5pc20gYXQgcGxheT8gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhbiBpbXBsaWVkIGRlcGVuZGVuY3ksIGEgYmVzdCBwcmFjdGljZSwgb3IgaWYgSSBjYW4gd29yayBhcm91bmQgaXQgc29tZWhvdy4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBiZWZvcmUgSSBpbnZlc3QgdG9vIG11Y2ggdGltZSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9yYXdfdHJhY2Vwb2ludF9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MjktXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NDMwOnN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDMxLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU5LVx0Y2FzZSBCUEZfUkFXX1RSQUNFUE9JTlRfT1BFTjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NjA6XHRcdGVyciA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ2MS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiwgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYC4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBpdHMgcG9ydGFiaWxpdHkgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFRoZSBpbml0aWFsLCBhbmQgbW9zdCBsaWtlbHksIGNydWNpYWwgcXVlc3Rpb246IGlzIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXM/IEkgbmVlZCB0byBjaGVjayBmb3IgYCNpZmRlZmAgYmxvY2tzIHN1cnJvdW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gb3IgaW1wbGVtZW50YXRpb24uIFRoYXQgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGl0cyBhdmFpbGFiaWxpdHkgdmFyaWVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGJ1aWxkIGZsYWdzLiBLbm93aW5nIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW1wb3J0YW50IGZvciBteSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmF3X3RyYWNlcG9pbnRfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDI5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQzMDpzdGF0aWMgaW50IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQzMS17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM1ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1OS1cdGNhc2UgQlBGX1JBV19UUkFDRVBPSU5UX09QRU46XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDYwOlx0XHRlcnIgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcdTAwMjZhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NjEtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkLCBhbmQgd2hhdCYjMzk7cyB0aGUgcHVycG9zZT8mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGtub3dpbmcgdGhhdCBpdCYjMzk7cyBhIGNyaXRpY2FsIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgZnVuY3Rpb24sIGxpa2VseSByZWxhdGVkIHRvIHRyYWNpbmcgcmF3IHRyYWNlcG9pbnRzIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYXJndW1lbnRzIGFyZSBzZXQgYW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBtYW5hZ2VkLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyBpdHMgaW1wbGljYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyAtIGNvdWxkIHRoZXJlIGJlIGFueSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmZpbHRlcmVkIHRyYWNlcG9pbnRzPyBBbHNvLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlbGF0ZWQgdG8gc29tZSBpbnN0cnVtZW50YXRpb24gc2V0dXAuIEkgd2lsbCBiZSBsb29raW5nIGZvcjoKCiogICAqKkFyZ3VtZW50IFZhbGlkYXRpb24qKjogV2hhdCBpbnB1dCB2YWxpZGF0aW9uIGlzIGRvbmUgb24gdGhlIHRyYWNlcG9pbnQgbmFtZSwgdGhlIGhhbmRsZXIgZnVuY3Rpb24sIGFuZCB0aGUgcHJvYmUgZGF0YSBzdHJ1Y3R1cmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcz8KKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbioqOiBIb3cgYXJlIHJlc291cmNlcyBtYW5hZ2VkIGFyb3VuZCBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gPyBJcyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJhY2UgY29uZGl0aW9ucz8KKiAgICoqRXJyb3IgSGFuZGxpbmcqKjogSXMgZXJyb3IgaGFuZGxpbmcgcm9idXN0PyBXaGF0IGhhcHBlbnMgaWYgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYCBmYWlscz8gSXMgdGhlcmUgZ3JhY2VmdWwgZGVncmFkYXRpb24gb3IgcGFuaWM/IEkgbmVlZCB0byBhbmFseXplIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgYW5kIHByb3BhZ2F0ZSB1cCB0aGUgY2FsbCBzdGFjaywgc28gdGhlIHByb2dyYW0gZG9lcyBub3QgY3Jhc2guCiogICAqKktlcm5lbCBDb250ZXh0Kio6IEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCBjb250ZXh0IHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZyb20uIElzIGl0IHVzZXIgc3BhY2U/IEtlcm5lbCBzcGFjZT8gV2hhdCBhcmUgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBjYWxsZXI/IFRoaXMgbWF0dGVycyB0byB0cmFjZXBvaW50IGFjY2VzcyBhbmQgcG90ZW50aWFsIGV4cGxvaXRzLgoqICAgKipDb25jdXJyZW5jeSoqOiBJZiB0aGVyZSYjMzk7cyBhbnkgbXVsdGl0aHJlYWRpbmcgaW4gdGhlIHZpY2luaXR5LCBob3cgaXMgdGhlIHRyYWNlcG9pbnQgYWNjZXNzIGhhbmRsZWQ/IEFyZSB0aGVyZSBhcHByb3ByaWF0ZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gd2hlbiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBpbnZvbHZlZCBpbiB0cmFjaW5nPwoqICAgKipUcmFjZXBvaW50IFVzYWdlKio6IEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O20gYWxzbyBwbGFubmluZyB0byBpbnNwZWN0IHRoZSB0cmFjZXBvaW50IGhhbmRsZXIgZnVuY3Rpb24gYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gSXMgdGhlIGhhbmRsZXIgcGVyZm9ybWluZyBhbnkgcmlza3kgb3BlcmF0aW9ucz8KCk15IGFuYWx5c2lzIG5lZWRzIHRvIGJlIGNvbXByZWhlbnNpdmUsIGVuc3VyaW5nIG5vIHN0b25lIGlzIHVudHVybmVkLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRlbGwgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MjA6XHRcbjQ0MjE6XHRcdHJldHVybiBicGZfbGlua19zZXR0bGUoXHUwMDI2bGlua19wcmltZXIpO1xuNDQyMjpcdFxuNDQyMzpcdG91dF9wdXRfYnRwOlxuNDQyNDpcdFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xuNDQyNTpcdFx0cmV0dXJuIGVycjtcbjQ0MjY6XHR9XG40NDI3Olx0XG40NDI4Olx0I2RlZmluZSBCUEZfUkFXX1RSQUNFUE9JTlRfT1BFTl9MQVNUX0ZJRUxEIHJhd190cmFjZXBvaW50LmNvb2tpZVxuNDQyOTpcdFxuNDQzMDpcdHN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG40NDMxOlx0e1xuNDQzMjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuNDQzMzpcdFx0dm9pZCBfX3VzZXIgKnRwX25hbWU7XG40NDM0Olx0XHRfX3U2NCBjb29raWU7XG40NDM1Olx0XHRpbnQgZmQ7XG40NDM2Olx0XG40NDM3Olx0XHRpZiAoQ0hFQ0tfQVRUUihCUEZfUkFXX1RSQUNFUE9JTlRfT1BFTikpXG40NDM4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgVHJhY2Vwb2ludCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgcmF3IHRyYWNlcG9pbnRzIGFyZSBzZXQgdXAuIEl0IGxvb2tzIGxpa2UgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYCBpcyBwcm9iYWJseSBhbHdheXMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZmxpcHBlZC4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIGNvbnNpc3RlbnQgZnJvbSBhIHN5c3RlbSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuCgpCdXQgaGFuZyBvbi4uLiBJIHNlZSBhIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YCBjYWxsIGluIHRoZSBjb2RlLiBJIHJlbWVtYmVyIHRoZSBgb3BlbmAgYnV0IHdoZXJlIGV4YWN0bHkgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYHB1dGAgZGVmaW5lZD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlY2xhcmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCB1bmRlcnN0YW5kIGhvdyBpdCBjbGVhbnMgdXAgcmVzb3VyY2VzIGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIG9uIHRoZSBiYWNrZW5kLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgcHJvcGVyIHRyYWNlcG9pbnQgbWFuYWdlbWVudCBhbmQgcHJldmVudCBhbnkgbGluZ2VyaW5nIGlzc3Vlcy4gSSBuZWVkIHRvIGJlIHN1cmUgaXQmIzM5O3MgZG9pbmcgd2hhdCBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3B1dF9yYXdfdHJhY2Vwb2ludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MzkwOD1zdGF0aWMgdm9pZCBicGZfcmF3X3RwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzkxMy1cdGJwZl9wcm9iZV91bnJlZ2lzdGVyKHJhd190cC1cdTAwM2VidHAsIHJhd190cCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozOTE0Olx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChyYXdfdHAtXHUwMDNlYnRwKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM5MTUtfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzkzLVx0aWYgKHByb2ctXHUwMDNlc2xlZXBhYmxlIFx1MDAyNlx1MDAyNiAhdHJhY2Vwb2ludF9pc19mYXVsdGFibGUoYnRwLVx1MDAzZXRwKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM5NDpcdFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM5NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQyMy1vdXRfcHV0X2J0cDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0MjQ6XHRicGZfcHV0X3Jhd190cmFjZXBvaW50KGJ0cCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDI1LVx0cmV0dXJuIGVycjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4OTI9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MDY5LVx0XHRcdFx0dG5hbWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDcwOlx0XHRcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoYnRwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA3MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNzQtXHRcdFx0XHRcdHRyYWNlX3N5bWJvbCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwNzU6XHRcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoYnRwKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA3Ni1cbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjA4Mj1zdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjA5My1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMDk0OnZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMDk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgVHJhY2Vwb2ludCBBY3RpdmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgaXRzIGZ1bmN0aW9uIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgdG8gYWN0dWFsbHkgKmVuYWJsZSogdGhpcyBjb2RlPyBJIGtub3cgdGhpcyBhcmVhIGRlYWxzIHdpdGggQlBGLWJhc2VkIHRyYWNlcG9pbnRzLCBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBlbmFibGluZyBmbGFnIGluIHRoZSBrZXJuZWwgY29uZmlnLiBJcyBpdCBhIHNwZWNpZmljIEJQRi1yZWxhdGVkIG9wdGlvbj8gSXMgaXQgdGllZCB0byBhIGJyb2FkZXIgdHJhY2luZyBmcmFtZXdvcmsgc2V0dGluZz8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBzbyBJIGNhbiB0aGVuIHNlZSBob3cgdGhpcyB0cmFjZXBvaW50IGZ1bmN0aW9uYWxpdHkgZml0cyBpbiB0aGUgZ3JlYXRlciBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbmZpZyBkZXBlbmRlbmN5IGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlIGFuZCB0cm91Ymxlc2hvb3RpbmcgYW55IGlzc3VlcyB0aGF0IGNvbWUgdXAuIExldCBtZSBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY3Jvc3MtcmVmZXJlbmNlcyB0byBmaW5kIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGZsYWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2V2ZW50c191c2VyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICYjNDM7PSBicGZfdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2twcm9iZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDoKCioqT24gQlBGIFRyYWNlcG9pbnQgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbXBpbGF0aW9uIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkgbmVlZCB0byBlbmFibGUgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGdldHRpbmcgYGJwZl90cmFjZS5vYCBsaW5rZWQgcHJvcGVybHkuIE5vdywgaWYgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyAqZGlzYWJsZWQqLCB0aGVuIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YC4uLiB5ZWFoLCBJJiMzOTtkIGJldCBhIHByZXR0eSBnb29kIHN1bSB0aGF0IGZ1bmN0aW9uIGlzIGp1c3QgZGVmaW5lZCBhcyBhbiBlbXB0eSBpbmxpbmUgZnVuY3Rpb24sIG9yIG1heWJlIGV2ZW4gY29tcGxldGVseSBzdHJpcHBlZCBvdXQgYnkgdGhlIGNvbXBpbGVyLiBObyByZWFsIHJ1bnRpbWUgb3ZlcmhlYWQsIGJ1dCBhbHNvIGNvbXBsZXRlbHkgdXNlbGVzcyBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeS4gTWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCBzbyB0aGF0IEkgY2FuIGxpbmsgdGhlIG5lY2Vzc2FyeSBCUEYgZXZlbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wdXRfcmF3X3RyYWNlcG9pbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBCUEYgVHJhY2Vwb2ludHMqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRyYWNlcG9pbnRzIGFyZSBiZWluZyBoYW5kbGVkIGF0IHRoZSBCUEYgbGV2ZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBrZXJuZWwtbGV2ZWwgdHJhY2luZyBtZWNoYW5pc20sIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCB3aXRoIHRoZSBjb3JlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gQlBGIGFuZCB0cmFjaW5nLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aG9zZSBidWlsZGluZyBibG9ja3Mgd291bGQgYmUgYGluY2x1ZGUvbGludXgvYnBmX3RyYWNlLmhgLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGluY2x1ZGUgZGlyZWN0b3J5IHN0cnVjdHVyZSwgaWYgSSYjMzk7bSBzbGlnaHRseSBvZmYgb24gdGhlIGV4YWN0IGZpbGUgbmFtZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIGhvdyB0aGVzZSB0cmFjZXBvaW50cyBhcmUgZGVmaW5lZCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGVtLCBhbmQgd2hhdCByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGludGVyZXN0IGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBoZWFkZXIgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3B1dF9yYXdfdHJhY2Vwb2ludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NzgyPXN0cnVjdCBicGZfcmF3X2V2ZW50X21hcCAqYnBmX2dldF9yYXdfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKTtcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzgzOnZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCk7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc4NC1pbnQgYnBmX2dldF9wZXJmX2V2ZW50X2luZm8oY29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1MzIgKnByb2dfaWQsXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04MjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTgyNy19XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjgyODpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cClcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgRXZlbnRzIGFuZCBCdWZmZXIgQWNjZXNzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgcmF3IHRyYWNlcG9pbnRzIGFyZSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oYC4gUmlnaHQsIG1ha2VzIHNlbnNlLiBBbmQsIGFzIGV4cGVjdGVkLCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgdXNpbmcgdGhlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgZW5hYmxpbmcgdGhhdCBhbHNvIGFmZmVjdHMgaG93IHRoZSB2ZXJpZmllciBkZWFscyB3aXRoIGJ1ZmZlciBhY2Nlc3MuIExldCYjMzk7cyB0cmFjZSBpdCBiYWNrLgoKVGhlIGZ1bmN0aW9uIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgIHNvdW5kcyByZWxldmFudCwgc28gSSYjMzk7bGwgc2VlIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGlyZWN0bHkgY2FsbGVkIGJ5IGBjaGVja190cF9idWZmZXJfYWNjZXNzYCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiAgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGBjaGVja19tZW1fYWNjZXNzYCB3aGljaCBoYW5kbGVzIGEgdmFyaWV0eSBvZiBwb2ludGVyIHR5cGVzLCBpbmNsdWRpbmcgYFBUUl9UT19NQVBfVkFMVUVgLCBgUFRSX1RPX01BUF9LRVlgLCBhbmQgYSBidW5jaCBvZiBvdGhlcnMuIFdhaXQsIEkgc2VlIGBQVFJfVE9fQlVGYCBpbiB0aGF0IGxpc3QsIHNvIGBjaGVja19idWZmZXJfYWNjZXNzYCBpcyBhbHNvIGNhbGxlZCB3aGVuIGRlYWxpbmcgd2l0aCByZWd1bGFyIGJ1ZmZlcnMsIG5vdCBqdXN0IHRyYWNlcG9pbnQgZGF0YT8gVGhpcyBpcyBnb29kIHRvIGtub3csIGFuZCBwb3RlbnRpYWxseSB3aGVyZSB0aGUgY29ubmVjdGlvbiBpcy4KClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIGNhbGxzIHRvIGBjaGVja19idWZmZXJfYWNjZXNzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGggZGlmZmVyZW50IGNvbnRleHRzLCBpbmNsdWRpbmcgYnVmZmVycy4gVGhhdCYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCB0aGUgaW5zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXHRcdFx0XHQgY29uc3QgY2hhciAqYnVmX2luZm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwmIzM0O3RyYWNlcG9pbnRcJiMzNDssIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM5MzpzdGF0aWMgaW50IGNoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzk0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU0MDM6XHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcdTAwMjZhY2Nlc3NfZW5kKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDA0LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzMyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMzM6XHRcdGVyciA9IGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIGZhbHNlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzQtXHRcdFx0XHRcdCAgbWF4X2FjY2Vzcyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA5LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMDpcdFx0cmV0dXJuIGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTEtXHRcdFx0XHRcdCAgIGFjY2Vzc19zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBgY2hlY2tfYnVmZmVyX2FjY2Vzc2Agd2l0aGluIGBjaGVja19tZW1fYWNjZXNzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AuIEl0IGxvb2tzIGxpa2UgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSwgb3IgbWF5YmUgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMsIHVuZGVyIHdoaWNoIGBjaGVja19idWZmZXJfYWNjZXNzYCBpcyBiZWluZyBpbnZva2VkICp3aXRoaW4qIHRoZSBicm9hZGVyIG1lbW9yeSBhY2Nlc3MgdmFsaWRhdGlvbiBwZXJmb3JtZWQgYnkgYGNoZWNrX21lbV9hY2Nlc3NgLiBJJiMzOTttIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlJiMzOTtzIGFueSBjb250ZXh0IEkgY2FuIGdsZWFuIGZyb20gKmhvdyogYW5kICp3aGVuKiBpdCYjMzk7cyBjYWxsZWQuIEFyZSB0aGVyZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBiZWluZyBwcm90ZWN0ZWQsIHBhcnRpY3VsYXIgYWNjZXNzIHR5cGVzIGJlaW5nIHNjcnV0aW5pemVkIChyZWFkcywgd3JpdGVzLCBldGMuKSwgb3IgcGVyaGFwcyBlcnJvciBjb25kaXRpb25zIGJlaW5nIHRyaWdnZXJlZD8gS25vd2luZyB0aGF0IGxpbmthZ2Ugd2lsbCBoZWxwIGNsYXJpZnkgaG93IG1lbW9yeSBhY2Nlc3NlcywgZ2VuZXJhbGx5LCBhcmUgYmVpbmcgdmFsaWRhdGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBzZWN1cml0eSBjaGVjaz8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjMyMDpcdFx0XHR1MzIgKm1heF9hY2Nlc3M7XG42MzIxOlx0XG42MzIyOlx0XHRcdGlmIChyZG9ubHlfbWVtKSB7XG42MzIzOlx0XHRcdFx0aWYgKHQgPT0gQlBGX1dSSVRFKSB7XG42MzI0Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42MzI1Olx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjYzMjY6XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNjMyNzpcdFx0XHRcdH1cbjYzMjg6XHRcdFx0XHRtYXhfYWNjZXNzID0gXHUwMDI2ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9yZG9ubHlfYWNjZXNzO1xuNjMyOTpcdFx0XHR9IGVsc2Uge1xuNjMzMDpcdFx0XHRcdG1heF9hY2Nlc3MgPSBcdTAwMjZlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3Jkd3JfYWNjZXNzO1xuNjMzMTpcdFx0XHR9XG42MzMyOlx0XG42MzMzOlx0XHRcdGVyciA9IGNoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIGZhbHNlLFxuNjMzNDpcdFx0XHRcdFx0XHQgIG1heF9hY2Nlc3MpO1xuNjMzNTpcdFxuNjMzNjpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAocmRvbmx5X21lbSB8fCB0ID09IEJQRl9SRUFEKSlcbjYzMzc6XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuNjMzODpcdFx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQVJFTkEpIHtcbjYzMzk6XHRcdFx0aWYgKHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgYHJkb25seV9tZW1gKioKCkFscmlnaHQsIHNvIHRoZSBwaHJhc2UgYHJkb25seV9tZW1gIGp1c3QgcG9wcGVkIHVwLCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaXQgc2lnbmlmaWVzIGluIHRoaXMgY29udGV4dC4gUmF0aGVyIHRoYW4ganVtcGluZyB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGdldCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uLCBzbyBJJiMzOTtsbCByZXdpbmQgYSBiaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uY2VwdCBpbiBkZXRhaWwsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSeKAmWxsIG1ha2Ugc3VyZSB0byBnZXQgdGhlIGZ1bGwgc2NvcGUgYnkgcmUtcmVhZGluZyB0aGUgcmVsZXZhbnQgcGFydHMsIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCBhbGwgbWFrZXMgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MjkwOlx0XHRcdFx0XHR2YWx1ZV9yZWdubyk7XG42MjkxOlx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG42MjkyOlx0XHRcdH1cbjYyOTM6XHRcbjYyOTQ6XHRcdFx0ZXJyID0gY2hlY2tfZmxvd19rZXlzX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSk7XG42Mjk1Olx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG42Mjk2Olx0XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbjYyOTc6XHRcdH0gZWxzZSBpZiAodHlwZV9pc19za19wb2ludGVyKHJlZy1cdTAwM2V0eXBlKSkge1xuNjI5ODpcdFx0XHRpZiAodCA9PSBCUEZfV1JJVEUpIHtcbjYyOTk6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42MzAwOlx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZ190eXBlX3N0cihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG42MzAxOlx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG42MzAyOlx0XHRcdH1cbjYzMDM6XHRcdFx0ZXJyID0gY2hlY2tfc29ja19hY2Nlc3MoZW52LCBpbnNuX2lkeCwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0KTtcbjYzMDQ6XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbjYzMDU6XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuNjMwNjpcdFx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XG42MzA3Olx0XHRcdGVyciA9IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xuNjMwODpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKVxuNjMwOTpcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG42MzEwOlx0XHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbjYzMTE6XHRcdFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSB7XG42MzEyOlx0XHRcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxuNjMxMzpcdFx0XHRcdFx0XHQgICAgICB2YWx1ZV9yZWdubyk7XG42MzE0Olx0XHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IENPTlNUX1BUUl9UT19NQVApIHtcbjYzMTU6XHRcdFx0ZXJyID0gY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXG42MzE2Olx0XHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbjYzMTc6XHRcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlVGIFx1MDAyNlx1MDAyNlxuNjMxODpcdFx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbjYzMTk6XHRcdFx0Ym9vbCByZG9ubHlfbWVtID0gdHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cdTAwM2V0eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gQnVmZmVyIEFjY2VzcyBDaGVja3MqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHdlJiMzOTtyZSBpbiB0aGUgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGBQVFJfVE9fQlVGYC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmU/IElzIHRoaXMgdXNhZ2Ugc3BlY2lmaWMgdG8gYGJwZl9keW5wdHJgIG9yIHBlcmhhcHMgc29tZXRoaW5nIGFuYWxvZ291cyB0byBpdD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUuIE9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB3aGF0IGBQVFJfVE9fQlVGYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gTGV0IG1lIHRyYWNlIHRoYXQgZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvdHRhIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBidWZmZXIgaXMgYmVpbmcgYWNjZXNzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWNjZXNzIGNoZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFRSX1RPX0JVRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9Njg0OD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjk3MC1cdFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGUpO1xua2VybmVsL2JwZi9idGYuYzo2OTcxOlx0XHRpZiAoY3R4X2FyZ19pbmZvLVx1MDAzZW9mZnNldCA9PSBvZmYgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvYnRmLmMtNjk3Mi1cdFx0ICAgIChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpIHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTM5OT1jb25zdCBjaGFyICpyZWdfdHlwZV9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTQyMC1cdFx0W1BUUl9UT19BUkVOQV1cdFx0PSBcJiMzNDthcmVuYVwmIzM0Oyxcbmtlcm5lbC9icGYvbG9nLmM6NDIxOlx0XHRbUFRSX1RPX0JVRl1cdFx0PSBcJiMzNDtidWZcJiMzNDssXG5rZXJuZWwvYnBmL2xvZy5jLTQyMi1cdFx0W1BUUl9UT19GVU5DXVx0XHQ9IFwmIzM0O2Z1bmNcJiMzNDssXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbWFwX2VsZW1fcmVnX2luZm8gPSB7XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTE4MC1cdFx0eyBvZmZzZXRvZihzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSwga2V5KSxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxODE6XHRcdCAgUFRSX1RPX0JVRiB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSB9LFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTE4Mi1cdFx0eyBvZmZzZXRvZihzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSwgdmFsdWUpLFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjE4MzpcdFx0ICBQVFJfVE9fQlVGIHwgUFRSX01BWUJFX05VTEwgfSxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xODQtXHR9LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9NTA3PXN0YXRpYyBib29sIHJlZ3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJvbGQsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy02MTItXHRjYXNlIFBUUl9UT19NRU06XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjYxMzpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjE0LVx0Y2FzZSBQVFJfVE9fVFBfQlVGRkVSOlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzA3PXN0YXRpYyBib29sIGlzX3NwaWxsYWJsZV9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjItXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMzpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzI0LVx0Y2FzZSBQVFJfVE9fTUVNOlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDk4PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMTYtXHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzE3Olx0fSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMxOC1cdFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Nzk3LVx0XHRcdFx0XHQgICAgICAgemVyb19zaXplX2FsbG93ZWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTg6XHRjYXNlIFBUUl9UT19CVUY6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc5OS1cdFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgbWVtX3R5cGVzID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Nzc1LVx0XHRQVFJfVE9fTUVNIHwgTUVNX1JJTkdCVUYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzc3NjpcdFx0UFRSX1RPX0JVRixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Nzc3LVx0XHRQVFJfVE9fQlRGX0lEIHwgUFRSX1RSVVNURUQsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwMjc9c3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNjktXHRjYXNlIFBUUl9UT19NRU0gfCBNRU1fUklOR0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDcwOlx0Y2FzZSBQVFJfVE9fQlVGOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjgwNzE6XHRjYXNlIFBUUl9UT19CVUYgfCBNRU1fUkRPTkxZOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNzItXHRjYXNlIFBUUl9UT19BUkVOQTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM2NzM9c3RhdGljIGludCBhZGp1c3RfcHRyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzczNS1cdGNhc2UgUFRSX1RPX01FTTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzczNjpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzczNy1cdGNhc2UgUFRSX1RPX0ZVTkM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgUG9pbnRlciBUeXBlcyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGUgdXNhZ2Ugb2YgcG9pbnRlciB0eXBlcyBpbiBCUEYsIHNwZWNpZmljYWxseSBgUFRSX1RPX0JVRmAgYW5kIGBQVFJfVE9fVFBfQlVGRkVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFBUUl9UT19CVUZgIGlzIHJlbGV2YW50IHRvIGBicGZfaXRlcmAsIGxpa2UgdGhlIHJlZ2lzdHJhdGlvbiBpbmZvIGluIGBicGZfbWFwX2VsZW1fcmVnX2luZm9gLiBUaGlzIG1lYW5zIHRoZSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgaW4gdGhlIHBhdGggZm9yIGBicGZfaXRlcmAgcHJvZ3JhbXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AgaXMgdHJpZ2dlcmVkIGJ5IGBQVFJfVE9fVFBfQlVGRkVSYCwgYW5kIHRoYXQgcG9pbnRlciB0eXBlIGlzIGRpcmVjdGx5IHRpZWQgdG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIGFuZCBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVGAuCgpOb3csIEkgbmVlZCB0byBjb25maXJtIGlmIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UYCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gYENPTkZJR19CUEZfRVZFTlRTYC4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYGJwZl90cmFjZS5jYCBkZWFscyB3aXRoIHJhdyB0cmFjZXBvaW50cywgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZ28gdGhlcmUgZm9yIGNvbmZpcm1hdGlvbi4gWWVzLCBjb25maXJtZWQuIFdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX0JQRl9FVkVOVFNgIHRvIHByb3Blcmx5IHRlc3QgdGhlIGBQVFJfVE9fVFBfQlVGRkVSYCBwYXRoLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjaXJjbGUgYmFjayB0byBgUFRSX1RPX0JVRmAgYW5kIGBicGZfaXRlcmAuIERvZXMgYGJwZl9pdGVyYCBoYXZlIGl0cyBvd24gY29uZmlnIHJlcXVpcmVtZW50cz8gVGhpcyBpcyBpbXBvcnRhbnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGluIGBrZXJuZWwvYnBmL2JwZl9pdGVyLmNgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgRnVuY3Rpb25hbGl0eSBhbmQgVGVzdCBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQlBGIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQgbmVlZHMgdGVzdGluZy4gIGBicGZfaXRlci5vYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCBtZWFuaW5nIHRoZSBgUFRSX1RPX0JVRmAgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUganVzdCB3aXRoIHRoYXQgY29uZmlndXJhdGlvbi4gQnV0LCB0byB0ZXN0IGBQVFJfVE9fVFBfQlVGRkVSYCwgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9FVkVOVFNgIGVuYWJsZWQuICBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBJJiMzOTtsbCBhZGQgYEJQRl9FVkVOVFNgIHRvIGBFbmFibGVDb25maWdzYCB0byBtYWtlIHN1cmUgSSBjYW4gdGVzdCB0aGUgZnVsbCBmdW5jdGlvbmFsaXR5LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBidWZmZXIgYWNjZXNzIGNoZWNrcywgc3BlY2lmaWNhbGx5IHRoZSBgX19jaGVja19idWZmZXJfYWNjZXNzYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBieXBhc3MgZm9yIG5lZ2F0aXZlIGB2YXJfb2ZmYCB2YWx1ZXMgaW4gdGhlIG9mZnNldCBjYWxjdWxhdGlvbi4gVGhlIHZlcmlmaWVyIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYSBuZWdhdGl2ZSBgc3RhcnRgIGFmdGVyIHRoZSBhZGRpdGlvbiwgd2hpY2ggaXMgZ29vZC4KYGBgYwoJdmFyX29mZiA9IChzNjQpcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwoJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyh2YXJfb2ZmLCAoczY0KW9mZiwgJmFtcDtzdGFydCkpIHsKCQl2ZXJib3NlKGVudiwKCQkJJiMzNDslcyBpbnZhbGlkICVzIGJ1ZmZlciBhY2Nlc3M6IG9mZj0lZCwgdmFyX29mZj0lbGxkXG4mIzM0OywKCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCB2YXJfb2ZmKTsKCQlyZXR1cm4gLUVBQ0NFUzsKCX0KCglpZiAoc3RhcnQgJmx0OyAwKSB7CgkJdmVyYm9zZShlbnYsCgkJCSYjMzQ7JXMgaW52YWxpZCBuZWdhdGl2ZSAlcyBidWZmZXIgb2Zmc2V0OiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxuJiMzNDssCgkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7CgkJcmV0dXJuIC1FQUNDRVM7Cgl9CgoJaWYgKHN0YXJ0ICZndDsgVTMyX01BWCB8fCBzaXplICZsdDsgMCB8fAoJICAgIGNoZWNrX2FkZF9vdmVyZmxvdygodTMyKXN0YXJ0LCAodTMyKXNpemUsIGFjY2Vzc19lbmQpKSB7CgkJdmVyYm9zZShlbnYsCgkJCSYjMzQ7JXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWxsZCwgc2l6ZT0lZFxuJiMzNDssCgkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIHN0YXJ0LCBzaXplKTsKCQlyZXR1cm4gLUVBQ0NFUzsKCX0KYGBgClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXIuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBmb3IgdGVzdGluZyBhcmUgYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZXNlIGFyZSBpbmxpbmVkLiBUaGV5IGFyZSBhbGwgc3RhdGljIHdoaWNoIG1lYW5zIHRoZXkgY291bGQgYmUgaW5saW5lZCwgYnV0IGlmIHRoZXkgYXJlIG5vdCBmdWxseSBpbmxpbmVkLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogdGhlbS4gQW5kIGlmIG5vdCwgaXQgd2lsbCBqdXN0IGZ1enogdGhlIGNhbGxlciBgY2hlY2tfbWVtX2FjY2Vzc2AsIHNvIGl0IHdpbGwgc3RpbGwgYmUgdXNlZnVsLiBJJiMzOTtsbCBzdGljayB3aXRoIHRob3NlIHRocmVlIGZvciBub3cuCgpMZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXNpZGUgZnJvbSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCwgYW55dGhpbmcgZWxzZSBpbnZvbHZlZD8KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIHdoZXJlIHRoZXNlIGBjaGVja19idWZmZXJfYWNjZXNzYCB2YXJpYW50cyBhcmUgdXNlZC4gQWgsIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AgYWxzbyB1c2VzIGBjaGVja19idWZmZXJfYWNjZXNzYC4gR29vZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19oZWxwZXJfbWVtX2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjYxNT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JhbmdlX2luaXRpYWxpemVkKFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzYwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3NjE6c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NjItXHRcdFx0XHQgICBpbnQgYWNjZXNzX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGFjY2Vzc190eXBlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02ODUxPXN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4OTQtXHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg5NTpcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjg5Ni1cdFx0XHRcdCAgICAgIGFjY2Vzc190eXBlLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY5MDg9c3RhdGljIGludCBjaGVja19tZW1fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MzQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjkzNTpcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY5MzY6XHRlcnIgPSBlcnIgPzogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfV1JJVEUsIHRydWUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MzctXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgyMjQ9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzM3LVx0XHRrZXlfc2l6ZSA9IG1ldGEtXHUwMDNlbWFwLnB0ci1cdTAwM2VrZXlfc2l6ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MzM4Olx0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBrZXlfc2l6ZSwgQlBGX1JFQUQsIGZhbHNlLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzM5LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzY0LVx0XHRtZXRhLVx1MDAzZXJhd19tb2RlID0gYXJnX3R5cGUgXHUwMDI2IE1FTV9VTklOSVQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODM2NTpcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vX2Zyb21fcmVnKHJlZ25vKSwgbWV0YS1cdTAwM2VtYXAucHRyLVx1MDAzZXZhbHVlX3NpemUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODM2Ni1cdFx0XHRcdFx0ICAgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDA4LVx0XHRpZiAoYXJnX3R5cGUgXHUwMDI2IE1FTV9GSVhFRF9TSVpFKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODQwOTpcdFx0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg0MTAtXHRcdFx0XHRcdFx0ICAgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3MD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1OC1cdC8qIFRoaXMgaXMgdGhlIGNhdGNoIGFsbCBhcmd1bWVudCB0eXBlIG9mIHJlZ2lzdGVyIHR5cGVzIHN1cHBvcnRlZCBieVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzU5Olx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MuIEhvd2V2ZXIsIHdlIG9ubHkgYWxsb3cgd2hlbiBhcmd1bWVudCB0eXBlIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjAtXHQgKiBwb2ludGVyIHRvIHNjYWxhciwgb3Igc3RydWN0IGNvbXBvc2VkIChyZWN1cnNpdmVseSkgb2Ygc2NhbGFycy4gV2hlblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSGVscGVyIEFyZ3VtZW50IFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyB3ZSB2YWxpZGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBoZWxwZXJzLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCB3aGljaCBtZWFucyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgcHJvYmFibHkgZ2V0cyBhIGxvdCBvZiB1c2UsIGFuZCBub3QganVzdCBmb3IgdGhlIG9idmlvdXMgY2FzZXMgbGlrZSBgUFRSX1RPX0JVRmAgYW5kIGBQVFJfVE9fVFBfQlVGRkVSYC4gSG1tLCBpdCBqdXN0IHN0cnVjayBtZTogYGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzYCAqaXRzZWxmKiBjYWxscyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2Agd2hlbiBkZWFsaW5nIHdpdGggYFBUUl9UT19CVUZgLiBSaWdodC4gU2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3NgIGRpcmVjdGx5IGFuZCBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NzYwOlx0XG42NzYxOlx0c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuNjc2MjpcdFx0XHRcdFx0ICAgaW50IGFjY2Vzc19zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhY2Nlc3NfdHlwZSxcbjY3NjM6XHRcdFx0XHRcdCAgIGJvb2wgemVyb19zaXplX2FsbG93ZWQsXG42NzY0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG42NzY1Olx0e1xuNjc2NjpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuNjc2NzpcdFx0dTMyICptYXhfYWNjZXNzO1xuNjc2ODpcdFxuNjc2OTpcdFx0c3dpdGNoIChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpKSB7XG42NzcwOlx0XHRjYXNlIFBUUl9UT19QQUNLRVQ6XG42NzcxOlx0XHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcbjY3NzI6XHRcdFx0cmV0dXJuIGNoZWNrX3BhY2tldF9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcbjY3NzM6XHRcdFx0XHRcdFx0ICAgemVyb19zaXplX2FsbG93ZWQpO1xuNjc3NDpcdFx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcbjY3NzU6XHRcdFx0aWYgKGFjY2Vzc190eXBlID09IEJQRl9XUklURSkge1xuNjc3NjpcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBjYW5ub3Qgd3JpdGUgaW50byAlc1xcblwmIzM0OyxcbjY3Nzc6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjY3Nzg6XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjY3Nzk6XHRcdFx0fVxuNjc4MDpcdFx0XHRyZXR1cm4gY2hlY2tfbWVtX3JlZ2lvbl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcbjY3ODE6XHRcdFx0XHRcdFx0ICAgICAgIHJlZy1cdTAwM2VtYXBfcHRyLVx1MDAzZWtleV9zaXplLCBmYWxzZSk7XG42NzgyOlx0XHRjYXNlIFBUUl9UT19NQVBfVkFMVUU6XG42NzgzOlx0XHRcdGlmIChjaGVja19tYXBfYWNjZXNzX3R5cGUoZW52LCByZWcsIDAsIGFjY2Vzc19zaXplLCBhY2Nlc3NfdHlwZSkpXG42Nzg0Olx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG42Nzg1Olx0XHRcdHJldHVybiBjaGVja19tYXBfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgMCwgYWNjZXNzX3NpemUsXG42Nzg2Olx0XHRcdFx0XHRcdHplcm9fc2l6ZV9hbGxvd2VkLCBBQ0NFU1NfSEVMUEVSKTtcbjY3ODc6XHRcdGNhc2UgUFRSX1RPX01FTTpcbjY3ODg6XHRcdFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkpIHtcbjY3ODk6XHRcdFx0XHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XG42NzkwOlx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42NzkxOlx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjY3OTI6XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNjc5MzpcdFx0XHRcdH1cbjY3OTQ6XHRcdFx0fVxuNjc5NTpcdFx0XHRyZXR1cm4gY2hlY2tfbWVtX3JlZ2lvbl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLFxuNjc5NjpcdFx0XHRcdFx0XHQgICAgICAgYWNjZXNzX3NpemUsIHJlZy1cdTAwM2VtZW1fc2l6ZSxcbjY3OTc6XHRcdFx0XHRcdFx0ICAgICAgIHplcm9fc2l6ZV9hbGxvd2VkKTtcbjY3OTg6XHRcdGNhc2UgUFRSX1RPX0JVRjpcbjY3OTk6XHRcdFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkpIHtcbjY4MDA6XHRcdFx0XHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XG42ODAxOlx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgY2Fubm90IHdyaXRlIGludG8gJXNcXG5cJiMzNDssXG42ODAyOlx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbjY4MDM6XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuNjgwNDpcdFx0XHRcdH1cbjY4MDU6XHRcbjY4MDY6XHRcdFx0XHRtYXhfYWNjZXNzID0gXHUwMDI2ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF9yZG9ubHlfYWNjZXNzO1xuNjgwNzpcdFx0XHR9IGVsc2Uge1xuNjgwODpcdFx0XHRcdG1heF9hY2Nlc3MgPSBcdTAwMjZlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlbWF4X3Jkd3JfYWNjZXNzO1xuNjgwOTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBCdWZmZXIgQWNjZXNzIENoZWNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2Agc3BlY2lmaWNhbGx5IHVzZXMgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIHdoZW4gZGVhbGluZyB3aXRoIGBQVFJfVE9fQlVGYC4gU28sIGBjaGVja19idWZmZXJfYWNjZXNzYCBpcywgYXQgaXRzIGNvcmUsIGRlc2lnbmVkIGZvciBoYW5kbGluZyBgUFRSX1RPX0JVRmAgYWNjZXNzZXMuIFNpbWlsYXJseSwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgIGlzIGNsZWFybHkgdGFyZ2V0ZWQgZm9yIGBQVFJfVE9fVFBfQlVGRkVSYC4gSW50ZXJlc3RpbmdseSwgYm90aCB0aGVzZSBmdW5jdGlvbnMgdWx0aW1hdGVseSByZWx5IG9uIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AsIGFuZCBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3Mgb2YgdGhlIGJ1ZmZlciBhY2Nlc3MgY2hlY2tzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYENPTkZJR19UUkFDSU5HYCBpcyBhbHNvIG5lY2Vzc2FyeS4gYENPTkZJR19CUEZfRVZFTlRTYCB1c3VhbGx5IGRlcGVuZHMgb24gYENPTkZJR19UUkFDSU5HYCwgYnV0IEkgY2FuIGp1c3QgbGlzdCBgQlBGX0VWRU5UU2AgZm9yIG5vdy4gTGV0IG1lIGNvbnN1bHQgYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgYEJQRl9FVkVOVFNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYxOAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgQlBGIFZlcmlmaWVyIEJvdW5kcyBDaGVjayBCeXBhc3MqKgoKT2theSwgc28gYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGl0JiMzOTtzIGNsZWFyIHRoYXQgZm9jdXNpbmcgb24gYEJQRl9FVkVOVFNgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGZvciB0aGUgY29uZmlndXJhdGlvbi4gTGV0IG1lIHN1bW1hcml6ZSBteSB0aGlua2luZyBoZXJlLiBXZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBmaXggaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IG5lZWRzIHRob3JvdWdoIHRlc3RpbmcuCgpUaGUgaGlnaC1sZXZlbCBzdW1tYXJ5IGlzOgoqICAgV2UmIzM5O3JlIGRlZmluaXRlbHkgZnV6emluZyB0aGlzLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuCiogICBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgd2UgbmVlZCB0byB0YXJnZXQgd2l0aCBvdXIgZnV6emluZyBlZmZvcnRzLCBhbmQgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFyZToKICAgICogICBgX19jaGVja19idWZmZXJfYWNjZXNzYAogICAgKiAgIGBjaGVja190cF9idWZmZXJfYWNjZXNzYAogICAgKiAgIGBjaGVja19idWZmZXJfYWNjZXNzYAoqICAgVGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgZHVyaW5nIGZ1enppbmcgYXJlOgogICAgKiAgIGBCUEZfU1lTQ0FMTGAKICAgICogICBgQlBGX0VWRU5UU2AKClRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBhIGJvdW5kcyBjaGVja2luZyBieXBhc3Mgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSB2dWxuZXJhYmlsaXR5IGFsbG93cyBuZWdhdGl2ZSB2YXJpYWJsZSBvZmZzZXRzIHRvIGJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIHRoZSBpbnRlbmRlZCBidWZmZXIgYm91bmRhcmllcywgYWZmZWN0aW5nIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgcGF0Y2ggaXRzZWxmIGltcGxlbWVudHMgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3Mgd2l0aGluIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCB3aGljaCBpcyBhIGNvcmUgdmVyaWZpZXIgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGZ1enppbmcgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIG9yIHNpbWlsYXIgYnlwYXNzZXMuCgpJIGRvdWJsZS1jaGVja2VkIHRvIGNvbmZpcm0gdGhhdCB0aGUgbGlzdGVkIGZ1bmN0aW9ucyB3ZXJlIHRoZSBvbmx5IG9uZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLCBhbmQgdGhhdCYjMzk7cyBjb3JyZWN0OiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIHdlcmUgYWxsIGltcGFjdGVkLgoKVGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBhbmQgZG9jdW1lbnQgb3VyIHBsYW5uZWQgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfdHBfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja19idWZmZXJfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2hlY2tfYnVmZmVyX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtjaGVja190cF9idWZmZXJfYWNjZXNzJiMzNDssCiAgICAmIzM0O2NoZWNrX2J1ZmZlcl9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBib3VuZHMgY2hlY2tpbmcgYnlwYXNzIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgbmVnYXRpdmUgdmFyaWFibGUgb2Zmc2V0cyBjb3VsZCBiZSB1c2VkIHRvIGFjY2VzcyBtZW1vcnkgb3V0IG9mIGJvdW5kcyBmb3IgdHJhY2Vwb2ludCBidWZmZXJzIGFuZCBvdGhlciBidWZmZXIgdHlwZXMuIFRoZSBjaGFuZ2VzIGFkZCBvdmVyZmxvdyBhbmQgbmVnYXRpdmUgb2Zmc2V0IGNoZWNrcyBpbiBgX19jaGVja19idWZmZXJfYWNjZXNzYC4gVGhpcyBpcyBhIGNvcmUgdmVyaWZpZXIgc2VjdXJpdHkgZml4IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzaW1pbGFyIGJ5cGFzc2VzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTI6MjUuNzkxODE3MTE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDE2MDMyNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19jaGVja19idWZmZXJfYWNjZXNzXCIsXG4gICAgXCJjaGVja190cF9idWZmZXJfYWNjZXNzXCIsXG4gICAgXCJjaGVja19idWZmZXJfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBib3VuZHMgY2hlY2tpbmcgYnlwYXNzIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgbmVnYXRpdmUgdmFyaWFibGUgb2Zmc2V0cyBjb3VsZCBiZSB1c2VkIHRvIGFjY2VzcyBtZW1vcnkgb3V0IG9mIGJvdW5kcyBmb3IgdHJhY2Vwb2ludCBidWZmZXJzIGFuZCBvdGhlciBidWZmZXIgdHlwZXMuIFRoZSBjaGFuZ2VzIGFkZCBvdmVyZmxvdyBhbmQgbmVnYXRpdmUgb2Zmc2V0IGNoZWNrcyBpbiBgX19jaGVja19idWZmZXJfYWNjZXNzYC4gVGhpcyBpcyBhIGNvcmUgdmVyaWZpZXIgc2VjdXJpdHkgZml4IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBzaW1pbGFyIGJ5cGFzc2VzIGV4aXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjoyNS43OTE4MjYyMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjc1MzA1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMDA0MWYwMWQ0YmYxYjA0YTI2Y2Y5MDhlYWQ1NTYzYmVlNzU0MWY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTM6MTI6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC01MzI2LDE0ICs1MzI2LDE4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpidWZfaW5mbyxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLVxcdFxcdFxcdFxcdCBhcmdub190IGFyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0IGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplLFxcbitcXHRcXHRcXHRcXHQgdTMyICphY2Nlc3NfZW5kKVxcbiB7XFxuK1xcdHM2NCBzdGFydCwgdmFyX29mZjtcXG4rXFxuIFxcdGlmIChvZmYgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LFxcbiBcXHRcXHRcXHRcXFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgc2l6ZSk7XFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuK1xcbiBcXHRpZiAoIXRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbiBcXHRcXHRjaGFyIHRuX2J1Zls0OF07XFxuIFxcbkBAIC01MzQ0LDYgKzUzNDgsMjkgQEAgc3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdH1cXG4gXFxuK1xcdHZhcl9vZmYgPSAoczY0KXJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyh2YXJfb2ZmLCAoczY0KW9mZiwgXFx1MDAyNnN0YXJ0KSkge1xcbitcXHRcXHR2ZXJib3NlKGVudixcXG4rXFx0XFx0XFx0XFxcIiVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVkLCB2YXJfb2ZmPSVsbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7XFxuK1xcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXFwiJXMgaW52YWxpZCBuZWdhdGl2ZSAlcyBidWZmZXIgb2Zmc2V0OiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCB2YXJfb2ZmKTtcXG4rXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGFydCBcXHUwMDNlIFUzMl9NQVggfHwgc2l6ZSBcXHUwMDNjIDAgfHxcXG4rXFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdygodTMyKXN0YXJ0LCAodTMyKXNpemUsIGFjY2Vzc19lbmQpKSB7XFxuK1xcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWxsZCwgc2l6ZT0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgc3RhcnQsIHNpemUpO1xcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTUzNTEsMTQgKzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4gXFx0XFx0XFx0XFx0ICBhcmdub190IGFyZ25vLCBpbnQgb2ZmLCBpbnQgc2l6ZSlcXG4ge1xcbitcXHR1MzIgYWNjZXNzX2VuZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFxcXCJ0cmFjZXBvaW50XFxcIiwgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcXG4rXFx0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgXFxcInRyYWNlcG9pbnRcXFwiLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFxcdTAwMjZhY2Nlc3NfZW5kKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfdHBfYWNjZXNzID0gbWF4KHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZSArIG9mZiArIHNpemUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X3RwX2FjY2Vzcyk7XFxuK1xcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfdHBfYWNjZXNzID0gbWF4KGFjY2Vzc19lbmQsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfdHBfYWNjZXNzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUzNzAsMTMgKzUzOTcsMTQgQEAgc3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdCAgICAgICB1MzIgKm1heF9hY2Nlc3MpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqYnVmX2luZm8gPSB0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVxcdTAwM2V0eXBlKSA/IFxcXCJyZG9ubHlcXFwiIDogXFxcInJkd3JcXFwiO1xcbitcXHR1MzIgYWNjZXNzX2VuZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xcbitcXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcXHUwMDI2YWNjZXNzX2VuZCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHQqbWF4X2FjY2VzcyA9IG1heChyZWctXFx1MDAzZXZhcl9vZmYudmFsdWUgKyBvZmYgKyBzaXplLCAqbWF4X2FjY2Vzcyk7XFxuK1xcdCptYXhfYWNjZXNzID0gbWF4KGFjY2Vzc19lbmQsICptYXhfYWNjZXNzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuY1xcbmluZGV4IDIxNmIwZGZhYzBmZTYxLi5lZmU0Y2FkNDdiMjgwYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcXG5AQCAtNCwxMiArNCwzMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmJkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJicGZfdXRpbC5oXFxcIlxcbiBcXG4tdm9pZCB0ZXN0X3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQodm9pZClcXG4rc3RhdGljIHZvaWQgY2hlY2tfbmJkX2F0dGFjaF9yZWplY3QoY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcHJvZ3JhbSwgc2l6ZV90IHByb2dfbGVuKVxcbiB7XFxuLVxcdF9fdTMyIGR1cmF0aW9uID0gMDtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzKTtcXG4gXFx0Y2hhciBlcnJvcls0MDk2XTtcXG4tXFx0aW50IGJwZl9mZCA9IC0xLCB0cF9mZCA9IC0xO1xcbitcXHRpbnQgYnBmX2ZkLCB0cF9mZDtcXG4rXFxuK1xcdG9wdHMubG9nX2xldmVsID0gMjtcXG4rXFx0b3B0cy5sb2dfYnVmID0gZXJyb3I7XFxuK1xcdG9wdHMubG9nX3NpemUgPSBzaXplb2YoZXJyb3IpO1xcbitcXG4rXFx0YnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCBcXFwiR1BMIHYyXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHByb2dyYW0sIHByb2dfbGVuLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJwZl9mZCwgMCwgXFxcInByb2dfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0cF9mZCA9IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKFxcXCJuYmRfc2VuZF9yZXF1ZXN0XFxcIiwgYnBmX2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfTFQodHBfZmQsIDAsIG5hbWUpKVxcbitcXHRcXHRjbG9zZSh0cF9mZCk7XFxuK1xcbitcXHRjbG9zZShicGZfZmQpO1xcbit9XFxuIFxcbit2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxcbit7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiBwcm9ncmFtW10gPSB7XFxuIFxcdFxcdC8qIHI2IGlzIG91ciB0cCBidWZmZXIgKi9cXG4gXFx0XFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzYsIEJQRl9SRUdfMSwgMCksXFxuQEAgLTE5LDI1ICszOCwxOCBAQCB2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxcbiBcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuIFxcdH07XFxuIFxcbi1cXHRMSUJCUEZfT1BUUyhicGZfcHJvZ19sb2FkX29wdHMsIG9wdHMsXFxuLVxcdFxcdC5sb2dfbGV2ZWwgPSAyLFxcbi1cXHRcXHQubG9nX2J1ZiA9IGVycm9yLFxcbi1cXHRcXHQubG9nX3NpemUgPSBzaXplb2YoZXJyb3IpLFxcbi1cXHQpO1xcbi1cXG4tXFx0YnBmX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFLCBOVUxMLCBcXFwiR1BMIHYyXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSksXFxuLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2b3B0cyk7XFxuLVxcdGlmIChDSEVDSyhicGZfZmQgXFx1MDAzYyAwLCBcXFwiYnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIGxvYWRcXFwiLFxcbi1cXHRcXHQgIFxcXCJmYWlsZWQ6ICVkIGVycm5vICVkXFxcXG5cXFwiLCBicGZfZmQsIGVycm5vKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcXFwibmJkX3NlbmRfcmVxdWVzdFxcXCIsIGJwZl9mZCk7XFxuLVxcdGlmIChDSEVDSyh0cF9mZCBcXHUwMDNlPSAwLCBcXFwiYnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIG9wZW5cXFwiLFxcbi1cXHRcXHQgIFxcXCJlcnJvbmVvdXNseSBzdWNjZWVkZWRcXFxcblxcXCIpKVxcbi1cXHRcXHRnb3RvIG91dF9icGZmZDtcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuIG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbVtdID0ge1xcbitcXHRcXHRCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfNiwgQlBGX1JFR18xLCAwKSxcXG4rXFx0XFx0LyogbWFrZSB2YXJfb2ZmIG5lZ2F0aXZlLCBidXQga2VlcCB0aGUgZWZmZWN0aXZlIGFjY2VzcyBvZmZzZXQgbm9uLW5lZ2F0aXZlICovXFxuK1xcdFxcdEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgQlBGX1JFR182LCAtOCksXFxuK1xcdFxcdC8qIG9uZSBieXRlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBuYmRfcmVxdWVzdCBzdHJ1Y3QgKi9cXG4rXFx0XFx0QlBGX0xEWF9NRU0oQlBGX0IsIEJQRl9SRUdfMCwgQlBGX1JFR182LFxcbitcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBuYmRfcmVxdWVzdCkgKyA4KSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbiBcXG4tXFx0Y2xvc2UodHBfZmQpO1xcbi1vdXRfYnBmZmQ6XFxuLVxcdGNsb3NlKGJwZl9mZCk7XFxuK1xcdGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KFxcXCJuYmRfaW52YWxpZFxcXCIsIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSkpO1xcbitcXHRjaGVja19uYmRfYXR0YWNoX3JlamVjdChcXFwibmJkX2ludmFsaWRfbmVnYXRpdmVfdmFyX29mZlxcXCIsXFxuK1xcdFxcdFxcdFxcdG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbSxcXG4rXFx0XFx0XFx0XFx0QVJSQVlfU0laRShuZWdhdGl2ZV92YXJfb2ZmX3Byb2dyYW0pKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmNcXG5pbmRleCAxNGEwMTcyZTIxNDFlOC4uNDA1NWE2NDQzYmMyMGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXFxuQEAgLTQ3LDQgKzQ3LDIwIEBAIGwwXyU9OlxcdC8qIHNoaWZ0IHRoZSBidWZmZXIgcG9pbnRlciB0byBhIHZhcmlhYmxlIGxvY2F0aW9uICovXFxcXFxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitTRUMoXFxcInJhd190cmFjZXBvaW50LndcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJyYXdfdHJhY2Vwb2ludF93cml0YWJsZTogcmVqZWN0IG5lZ2F0aXZlIGNvbnN0IG9mZnNldFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwiaW52YWxpZCBuZWdhdGl2ZSB0cmFjZXBvaW50IGJ1ZmZlciBvZmZzZXRcXFwiKVxcbitfX25ha2VkIHZvaWQgdHJhY2Vwb2ludF93cml0YWJsZV9yZWplY3RfbmVnYXRpdmVfY29uc3Rfb2Zmc2V0KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9ICoodTY0ICopKHIxICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gKih1NjQgKikocjYgKyAwKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6XFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjoyNy4xNjAwMTQwODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTY0NzgyNDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfYnVmZmVyX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDA0MWYwMWQ0YmYxYjA0YTI2Y2Y5MDhlYWQ1NTYzYmVlNzU0MWY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMzoxMjoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMjFhMzY1ZDQzNmE1OTUuLmI0ZWQ2ZDUxOTYzMGM1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC01MzI2LDE0ICs1MzI2LDE4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gc3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCBjb25zdCBjaGFyICpidWZfaW5mbyxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLVx0XHRcdFx0IGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKVxuK1x0XHRcdFx0IGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplLFxuK1x0XHRcdFx0IHUzMiAqYWNjZXNzX2VuZClcbiB7XG4rXHRzNjQgc3RhcnQsIHZhcl9vZmY7XG4rXG4gXHRpZiAob2ZmIFx1MDAzYyAwKSB7XG4gXHRcdHZlcmJvc2UoZW52LFxuIFx0XHRcdFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHNpemU9JWRcXG5cIixcbiBcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHNpemUpO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbitcbiBcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbiBcdFx0Y2hhciB0bl9idWZbNDhdO1xuIFxuQEAgLTUzNDQsNiArNTM0OCwyOSBAQCBzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbitcdHZhcl9vZmYgPSAoczY0KXJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyh2YXJfb2ZmLCAoczY0KW9mZiwgXHUwMDI2c3RhcnQpKSB7XG4rXHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcblwiLFxuK1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXJ0IFx1MDAzYyAwKSB7XG4rXHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFwiJXMgaW52YWxpZCBuZWdhdGl2ZSAlcyBidWZmZXIgb2Zmc2V0OiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcblwiLFxuK1x0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIG9mZiwgdmFyX29mZik7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXJ0IFx1MDAzZSBVMzJfTUFYIHx8IHNpemUgXHUwMDNjIDAgfHxcbitcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coKHUzMilzdGFydCwgKHUzMilzaXplLCBhY2Nlc3NfZW5kKSkge1xuK1x0XHR2ZXJib3NlKGVudixcbitcdFx0XHRcIiVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVsbGQsIHNpemU9JWRcXG5cIixcbitcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBzdGFydCwgc2l6ZSk7XG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTUzNTEsMTQgKzUzNzgsMTQgQEAgc3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4gXHRcdFx0XHQgIGFyZ25vX3QgYXJnbm8sIGludCBvZmYsIGludCBzaXplKVxuIHtcbitcdHUzMiBhY2Nlc3NfZW5kO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFwidHJhY2Vwb2ludFwiLCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xuK1x0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgXCJ0cmFjZXBvaW50XCIsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXHUwMDI2YWNjZXNzX2VuZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgocmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgKyBvZmYgKyBzaXplLFxuLVx0XHRcdFx0XHQgICAgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MpO1xuK1x0ZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MgPSBtYXgoYWNjZXNzX2VuZCwgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZW1heF90cF9hY2Nlc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUzNzAsMTMgKzUzOTcsMTQgQEAgc3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgICAgIHUzMiAqbWF4X2FjY2VzcylcbiB7XG4gXHRjb25zdCBjaGFyICpidWZfaW5mbyA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSkgPyBcInJkb25seVwiIDogXCJyZHdyXCI7XG4rXHR1MzIgYWNjZXNzX2VuZDtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcbitcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFx1MDAyNmFjY2Vzc19lbmQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdCptYXhfYWNjZXNzID0gbWF4KHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlICsgb2ZmICsgc2l6ZSwgKm1heF9hY2Nlc3MpO1xuK1x0Km1heF9hY2Nlc3MgPSBtYXgoYWNjZXNzX2VuZCwgKm1heF9hY2Nlc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQuY1xuaW5kZXggMjE2YjBkZmFjMGZlNjEuLmVmZTRjYWQ0N2IyODBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNcbkBAIC00LDEyICs0LDMxIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmJkLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl91dGlsLmhcIlxuIFxuLXZvaWQgdGVzdF9yYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkKHZvaWQpXG4rc3RhdGljIHZvaWQgY2hlY2tfbmJkX2F0dGFjaF9yZWplY3QoY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnByb2dyYW0sIHNpemVfdCBwcm9nX2xlbilcbiB7XG4tXHRfX3UzMiBkdXJhdGlvbiA9IDA7XG4rXHRMSUJCUEZfT1BUUyhicGZfcHJvZ19sb2FkX29wdHMsIG9wdHMpO1xuIFx0Y2hhciBlcnJvcls0MDk2XTtcbi1cdGludCBicGZfZmQgPSAtMSwgdHBfZmQgPSAtMTtcbitcdGludCBicGZfZmQsIHRwX2ZkO1xuK1xuK1x0b3B0cy5sb2dfbGV2ZWwgPSAyO1xuK1x0b3B0cy5sb2dfYnVmID0gZXJyb3I7XG4rXHRvcHRzLmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKTtcbitcbitcdGJwZl9mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSwgTlVMTCwgXCJHUEwgdjJcIixcbitcdFx0XHQgICAgICAgcHJvZ3JhbSwgcHJvZ19sZW4sIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UoYnBmX2ZkLCAwLCBcInByb2dfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcIm5iZF9zZW5kX3JlcXVlc3RcIiwgYnBmX2ZkKTtcbitcdGlmICghQVNTRVJUX0xUKHRwX2ZkLCAwLCBuYW1lKSlcbitcdFx0Y2xvc2UodHBfZmQpO1xuK1xuK1x0Y2xvc2UoYnBmX2ZkKTtcbit9XG4gXG4rdm9pZCB0ZXN0X3Jhd190cF93cml0YWJsZV9yZWplY3RfbmJkX2ludmFsaWQodm9pZClcbit7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gcHJvZ3JhbVtdID0ge1xuIFx0XHQvKiByNiBpcyBvdXIgdHAgYnVmZmVyICovXG4gXHRcdEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR182LCBCUEZfUkVHXzEsIDApLFxuQEAgLTE5LDI1ICszOCwxOCBAQCB2b2lkIHRlc3RfcmF3X3RwX3dyaXRhYmxlX3JlamVjdF9uYmRfaW52YWxpZCh2b2lkKVxuIFx0XHRCUEZfRVhJVF9JTlNOKCksXG4gXHR9O1xuIFxuLVx0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBvcHRzLFxuLVx0XHQubG9nX2xldmVsID0gMixcbi1cdFx0LmxvZ19idWYgPSBlcnJvcixcbi1cdFx0LmxvZ19zaXplID0gc2l6ZW9mKGVycm9yKSxcbi1cdCk7XG4tXG4tXHRicGZfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUsIE5VTEwsIFwiR1BMIHYyXCIsXG4tXHRcdFx0ICAgICAgIHByb2dyYW0sIEFSUkFZX1NJWkUocHJvZ3JhbSksXG4tXHRcdFx0ICAgICAgIFx1MDAyNm9wdHMpO1xuLVx0aWYgKENIRUNLKGJwZl9mZCBcdTAwM2MgMCwgXCJicGZfcmF3X3RyYWNlcG9pbnRfd3JpdGFibGUgbG9hZFwiLFxuLVx0XHQgIFwiZmFpbGVkOiAlZCBlcnJubyAlZFxcblwiLCBicGZfZmQsIGVycm5vKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dHBfZmQgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcIm5iZF9zZW5kX3JlcXVlc3RcIiwgYnBmX2ZkKTtcbi1cdGlmIChDSEVDSyh0cF9mZCBcdTAwM2U9IDAsIFwiYnBmX3Jhd190cmFjZXBvaW50X3dyaXRhYmxlIG9wZW5cIixcbi1cdFx0ICBcImVycm9uZW91c2x5IHN1Y2NlZWRlZFxcblwiKSlcbi1cdFx0Z290byBvdXRfYnBmZmQ7XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gbmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtW10gPSB7XG4rXHRcdEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR182LCBCUEZfUkVHXzEsIDApLFxuK1x0XHQvKiBtYWtlIHZhcl9vZmYgbmVnYXRpdmUsIGJ1dCBrZWVwIHRoZSBlZmZlY3RpdmUgYWNjZXNzIG9mZnNldCBub24tbmVnYXRpdmUgKi9cbitcdFx0QlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzYsIC04KSxcbitcdFx0Lyogb25lIGJ5dGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG5iZF9yZXF1ZXN0IHN0cnVjdCAqL1xuK1x0XHRCUEZfTERYX01FTShCUEZfQiwgQlBGX1JFR18wLCBCUEZfUkVHXzYsXG4rXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgbmJkX3JlcXVlc3QpICsgOCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdH07XG4gXG4tXHRjbG9zZSh0cF9mZCk7XG4tb3V0X2JwZmZkOlxuLVx0Y2xvc2UoYnBmX2ZkKTtcbitcdGNoZWNrX25iZF9hdHRhY2hfcmVqZWN0KFwibmJkX2ludmFsaWRcIiwgcHJvZ3JhbSwgQVJSQVlfU0laRShwcm9ncmFtKSk7XG4rXHRjaGVja19uYmRfYXR0YWNoX3JlamVjdChcIm5iZF9pbnZhbGlkX25lZ2F0aXZlX3Zhcl9vZmZcIixcbitcdFx0XHRcdG5lZ2F0aXZlX3Zhcl9vZmZfcHJvZ3JhbSxcbitcdFx0XHRcdEFSUkFZX1NJWkUobmVnYXRpdmVfdmFyX29mZl9wcm9ncmFtKSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9yYXdfdHBfd3JpdGFibGUuY1xuaW5kZXggMTRhMDE3MmUyMTQxZTguLjQwNTVhNjQ0M2JjMjBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Jhd190cF93cml0YWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcmF3X3RwX3dyaXRhYmxlLmNcbkBAIC00Nyw0ICs0NywyMCBAQCBsMF8lPTpcdC8qIHNoaWZ0IHRoZSBidWZmZXIgcG9pbnRlciB0byBhIHZhcmlhYmxlIGxvY2F0aW9uICovXFxcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuK1NFQyhcInJhd190cmFjZXBvaW50LndcIilcbitfX2Rlc2NyaXB0aW9uKFwicmF3X3RyYWNlcG9pbnRfd3JpdGFibGU6IHJlamVjdCBuZWdhdGl2ZSBjb25zdCBvZmZzZXRcIilcbitfX2ZhaWx1cmVcbitfX21zZyhcImludmFsaWQgbmVnYXRpdmUgdHJhY2Vwb2ludCBidWZmZXIgb2Zmc2V0XCIpXG4rX19uYWtlZCB2b2lkIHRyYWNlcG9pbnRfd3JpdGFibGVfcmVqZWN0X25lZ2F0aXZlX2NvbnN0X29mZnNldCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHI2ID0gKih1NjQgKikocjEgKyAwKTtcdFx0XHRcdFxcXG4rXHRyNiArPSAtODtcdFx0XHRcdFx0XFxcbitcdHIwID0gKih1NjQgKikocjYgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDpcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjEyOjI3LjE2MDAxNTQ2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTU0Nzc1NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIGVuaGFuY2luZyBidWZmZXIgYWNjZXNzIGNoZWNrcyB3aXRoaW4gQlBGIHByb2dyYW1zLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nIGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzXCIgdG8gbWUsIHJpZ2h0IG9mZiB0aGUgYmF0LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBtYWluIGZvY3VzIHNlZW1zIHRvIGJlIG9uIHByZXZlbnRpbmcgbmVnYXRpdmUgb2Zmc2V0cyBhbmQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gY2FsY3VsYXRpbmcgYnVmZmVyIGFjY2VzcyBib3VuZGFyaWVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHdyaXRlcy4gVGhleSd2ZSBhZGRlZCBjaGVja3MgZm9yIG5lZ2F0aXZlIG9mZnNldHMsIGFuZCwgY2xldmVybHksIGFyZSBjaGVja2luZyBmb3Igb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB0aGUgc3RhcnRpbmcgb2Zmc2V0IHdpdGhpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIGVuZCBwb2ludC4gVGhpcyBpcyBhIHNvbGlkLCB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgdGhlIHZlcmlmaWVyJ3Mgcm9idXN0bmVzcy5cblxuTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aG9zZSB0aHJlZSBmdW5jdGlvbnMgYW5kIHNlZSBob3cgdGhleSBhcmUgdHJpZ2dlcmVkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBzYWZlIHRvIHNheSBCUEYgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byBzdGFydCwgYW5kIHRoYXQgbGlrZWx5IG1lYW5zIGBDT05GSUdfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgbmVlZCB0byBiZSBzZXQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBlbnZpcm9ubWVudCB0byB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucyByZWxpYWJseS5cblxuVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBOb3csIGxldCdzIGZpcmUgdXAgc29tZSB0b29scyBhbmQgc3RhcnQgdmVyaWZ5aW5nIHRoaXMsIHdoaWNoIGlzIGEgZ29vZCB1c2Ugb2YgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjEyOjQ1LjMxNDc5NDI2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwNDc2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTUyNzI9c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzI1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MzI2OnN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjctXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKmJ1Zl9pbmZvLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUzNzc9c3RhdGljIGludCBjaGVja190cF9idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM4NDpcXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBcXFwidHJhY2Vwb2ludFxcXCIsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXFx1MDAyNmFjY2Vzc19lbmQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzg1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTM5Mz1zdGF0aWMgaW50IGNoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NDAzOlxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIGJ1Zl9pbmZvLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFxcdTAwMjZhY2Nlc3NfZW5kKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTQwNC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjo0Ni45NTUyNzYyOTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDMyMTEyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEJ1ZmZlciBBY2Nlc3MgQ2hlY2tzIGluIHRoZSBCUEYgVmVyaWZpZXIqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBidWZmZXIgYWNjZXNzIGZ1bmN0aW9uczogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIHNpbXBseSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIENsZWFybHksIHRoZXNlIGFyZSBhbGwga2V5IGNvbXBvbmVudHMgb2YgdGhlIEJQRiB2ZXJpZmllci4gVGhlIG1haW4gY29uZmlndXJhdGlvbiBnb3Zlcm5pbmcgdGhpcyBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGBCUEZfU1lTQ0FMTGAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGJ1ZmZlciBhY2Nlc3MgaXMgb2Z0ZW4gcmVsYXRlZCB0byBzeXN0ZW0gY2FsbHMgYW5kIGRhdGEgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgKnNwZWNpZmljKiBjb25maWdzIHRoYXQgZmluZS10dW5lIGBjaGVja190cF9idWZmZXJfYWNjZXNzYD8gVGhpcyBmdW5jdGlvbidzIG5hbWUgaW1wbGllcyBpdCdzIGFzc29jaWF0ZWQgd2l0aCB0cmFjZXBvaW50cywgc28gbXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgdG8gY2hlY2sgd2hldGhlciBpdCdzIGxpbmtlZCB0byBgQlBGX0VWRU5UU2Agb3IgYFRSQUNJTkdgIHNpbmNlIHRob3NlIHNlZW0gbGlrZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMgZm9yIHRyYWNlcG9pbnQtcmVsYXRlZCBCUEYgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMjo1MS4zODczOTE2MTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2NjI5NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01MzI2PXN0YXRpYyBpbnQgX19jaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTM3NzpzdGF0aWMgaW50IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3OC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMDYtXFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gUFRSX1RPX1RQX0JVRkZFUikge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzA3OlxcdFxcdGVyciA9IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBvZmYsIHNpemUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzA4LVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTI6NTEuNzY0MDI2NjkxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE5ODI0NTgwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVkdWN0aXZlIFJlYXNvbmluZyBvbiBNZW1vcnkgQWNjZXNzIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBjYWxscyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgdmVyaWZpY2F0aW9uLCBhbmQgaXQncyBzdGFydGluZyB0byBjcnlzdGFsbGl6ZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2UgYSBub3RlLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGlzIGFsc28gZ2V0dGluZyBpbnZva2VkICpkb3duc3RyZWFtKiB0aHJvdWdoIGBjaGVja19tZW1fYWNjZXNzYC4gVGhhdCdzIGltcG9ydGFudC4gSXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgbGF5ZXJpbmcgb2YgY2hlY2tzLCBwZXJoYXBzIGEgbW9yZSBnZW5lcmljIG1lbW9yeSBhY2Nlc3MgY2hlY2sgKGBjaGVja19tZW1fYWNjZXNzYCkgdGhhdCAqdGhlbiogZnVubmVscyBpbnRvIGEgYnVmZmVyLXNwZWNpZmljIGNoZWNrIChgY2hlY2tfYnVmZmVyX2FjY2Vzc2ApIGZvciBtb3JlIGdyYW51bGFyIHZhbGlkYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGhpZXJhcmNoeSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBpbiB0aGlzIGFyZWEsIGJlY2F1c2UgdGhlIG9yaWdpbiBhbmQgaW50ZW50IG9mIHRoZSBjaGVja3MgbWF5IGJlIGxheWVyZWQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGNvbnRpbnVlIGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjEzOjEzLjc0NjQ4NjU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTgwNDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19idWZmZXJfYWNjZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTI3Mj1zdGF0aWMgaW50IGNoZWNrX21heF9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzMjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzMjY6c3RhdGljIGludCBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTMyNy1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqYnVmX2luZm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTM3Nz1zdGF0aWMgaW50IGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzgzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1Mzg0OlxcdGVyciA9IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIFxcXCJ0cmFjZXBvaW50XFxcIiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcXHUwMDI2YWNjZXNzX2VuZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzkyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MzkzOnN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Mzk0LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU0MDM6XFx0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgYnVmX2luZm8sIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgXFx1MDAyNmFjY2Vzc19lbmQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDA0LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA5OD1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzMzM6XFx0XFx0ZXJyID0gY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgZmFsc2UsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzMzQtXFx0XFx0XFx0XFx0XFx0ICBtYXhfYWNjZXNzKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzYxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA5LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMDpcXHRcXHRyZXR1cm4gY2hlY2tfYnVmZmVyX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIDAsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTEtXFx0XFx0XFx0XFx0XFx0ICAgYWNjZXNzX3NpemUsIHplcm9fc2l6ZV9hbGxvd2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxMzoxNC4wMzgyOTYwNTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk4MzE4NzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQnVmZmVyIEFjY2VzcyBDaGVja3MgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIGhlcmU6IGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AsIGFuZCBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSByZWxhdGVkIHRvIHZhbGlkYXRpbmcgYWNjZXNzIHRvIGJ1ZmZlcnMsIHdoaWNoIGlzIGEgY29tbW9uIHNlY3VyaXR5IGNvbnNpZGVyYXRpb24gaW4gdGhpcyB0eXBlIG9mIGVudmlyb25tZW50LlxuXG5UaGUgbWVudGlvbiBvZiBgQlBGX1NZU0NBTExgIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYgcHJvZ3JhbXMgYW5kIGxpa2VseSBzeXN0ZW0gY2FsbCBpbnRlcmFjdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIFNvLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IGhlcmU/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhlIHNlbGZ0ZXN0IGByYXdfdHBfd3JpdGFibGVfcmVqZWN0X25iZF9pbnZhbGlkLmNgLiBBaCwgYW5kIHRoaXMgaXMgd2hlcmUgaXQncyBhbGwgY29taW5nIHRvZ2V0aGVyISBUaGlzIHRlc3QgaXMgZm9jdXNlZCBvbiBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAuIEFuZCB0aGF0IGJyaW5ncyBgQ09ORklHX0JQRl9FVkVOVFNgIGludG8gdGhlIGVxdWF0aW9uLiBTbywgd2UncmUgdGFsa2luZyBhYm91dCByYXcgdHJhY2Vwb2ludHMsIHdyaXRhYmxlIHByb2dyYW1zLCBhbmQgdGhlIGV2ZW50cyBpbmZyYXN0cnVjdHVyZS4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHRoYXQgdGhlIGJ1ZmZlciBhY2Nlc3MgY2hlY2tzIGFyZSBjcml0aWNhbCB0byBwcmV2ZW50IG1hbGljaW91cyB1c2Ugb2YgdGhlc2UgdHJhY2Vwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTM6NTcuMDIxNDk0ODY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU4NzY3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTYyMTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxcbmtlcm5lbC9icGYvYnRmLmM6NjI3NDpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9idGYuYy02Mjc1LVxcdFxcdC8qIGFsbG93IHU2NCogYXMgY3R4ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODcxPXN0YXRpYyBib29sIGlzX3BlcmZtb25fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODc4OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDSU5HOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM3OTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM4MC1cXHRcXHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzIzPXN0YXRpYyBib29sIGlzX3RyYWNpbmdfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzI5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MzA6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTM6NTcuMzY3Mzc3MzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDYxMzc5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gcGluIGRvd24gZXhhY3RseSB3aGVyZSBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLiBJdCdzIGEgcmVsYXRpdmVseSBuZXcgcHJvZ3JhbSB0eXBlLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbGF0ZXN0IGluZm9ybWF0aW9uIGFuZCBkb24ndCBtaXNpbnRlcnByZXQgYW55IHByaW9yLCBvbGRlciBkZWZpbml0aW9ucy4gTmV4dCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBoYXZlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCB0aHJvdWdoIHRoZSByZWxldmFudCBpbmNsdWRlIGZpbGVzLCBsb29raW5nIGZvciB0aGUgYWN0dWFsIGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyB0byBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYnJpbmcgdGhpcyBwcm9ncmFtIHR5cGUgaW50byBwbGF5LiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgc2VjdXJpdHkgYW5kIHJlc291cmNlIGxpbWl0cyB3aXRoIHJhdyB0cmFjZXBvaW50cyBiZWluZyB3cml0YWJsZS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVsbCBkZXBlbmRlbmN5IHRyZWUsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHByb2dyYW0gdHlwZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIGVjb3N5c3RlbS4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBmdWxsIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyB0aGluZyBsaXZlcywgYW5kIHdoYXQgY29udHJvbHMgaXRzIGJlaGF2aW9yLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCBhbmQgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMxOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE0OjE3LjgyODgwMTY2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1NjU3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM4Ni0gKlxcdFxcdCoqQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVCoqLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozODc6ICpcXHRcXHQqKkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUqKlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zODgtICpcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4Ni1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TWVNDVEwsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODc6XFx0QlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRSxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4OC1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNDoxNy45MDAzNzM4OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4OTMyMzkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBUcmFjZXBvaW50IEludGVybmFscyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGFibGUgcmF3IHRyYWNlcG9pbnRzIGFuZCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJ2QgZG8gaXMgemVybyBpbiBvbiB0aGUgc291cmNlIGNvZGUsIGFuZCBzcGVjaWZpY2FsbHksIEknZCBnbyBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjYW5vbmljYWwgbG9jYXRpb24gZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLCBhbmQgdGhlIG1lbnRpb24gb2YgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIGlzIGEgcHJldHR5IHN0cm9uZyBoaW50IHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSByZXNpZGVzLiBObyBuZWVkIHRvIHdhc3RlIHRpbWUgbG9va2luZyBlbHNld2hlcmUgaW5pdGlhbGx5OyB0aGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgQlBGIHByb2dyYW0gdHlwZSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhc3NvY2lhdGVkIGxvZ2ljIHRoYXQgZGVmaW5lIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE0OjI0LjA4OTcwMDAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ4MTg5MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNDoyNC4yOTQ1MzAwMTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA5OTgyMDUzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIHRoYXQgYGtlcm5lbC9icGYvYCBkaXJlY3Rvcnk6XG5cbioqRXhhbWluaW5nIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEUqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gTXkgZm9jdXMgaXMgc3BlY2lmaWNhbGx5IG9uIGFueXRoaW5nIHJlbGF0ZWQgdG8gYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgb3IgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHJlY2VudCBjaGFuZ2VzIHRoZXJlIHRoYXQgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBjb25zaWRlciBhbGwgYW5nbGVzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgQlBGIHByb2dyYW0gdHlwZSBpcyBoYW5kbGVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE0OjQ1LjI5MjczNjk4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDA3OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTYyMTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTYyNzMtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxcbmtlcm5lbC9icGYvYnRmLmM6NjI3NDpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9idGYuYy02Mjc1LVxcdFxcdC8qIGFsbG93IHU2NCogYXMgY3R4ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODcxPXN0YXRpYyBib29sIGlzX3BlcmZtb25fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc3LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyODc4OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yODc5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9UUkFDSU5HOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDM3OTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM4MC1cXHRcXHRpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyX3RwX25hbWUsIHNpemVvZihidWYpIC0gMSkgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzIzPXN0YXRpYyBib29sIGlzX3RyYWNpbmdfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzI5LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MzA6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzczMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTQ6NDUuNDQxNzQ4Njc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Mjk2OTU2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBQcm9ncmFtIFR5cGUgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAuIEkga25vdyBpdCdzIGhhbmRsZWQgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgYWxzbyBnZXRzIHZlcmlmaWNhdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW4gcGxheSBoZXJlPyBJIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVzIHRoZSB2ZXJpZmllciwgSSdtIHByZXR0eSBzdXJlIHRoYXQncyB0aGUgb25seSBvbmUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjaGVjay4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNDo1Mi45NzE0NDYwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai15IDo9IGNvcmUub1xcbiAgIDM6XFx0aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbiAgIDQ6XFx0IyBfX19icGZfcHJvZ19ydW4oKSBuZWVkcyBHQ1NFIGRpc2FibGVkIG9uIHg4Njsgc2VlIDMxOTNjMDgzNmYyMDMgZm9yIGRldGFpbHNcXG4gICA1OlxcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXFxuICAgNjpcXHRlbmRpZlxcbiAgIDc6XFx0Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbiAgMTA6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG4gIDExOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG4gIDEyOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcbiAgMTU6XFx0b2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxuICAxNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG4gIDE4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG4gIDE5OlxcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxuICAyMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGRpc3BhdGNoZXIub1xcbiAgMjM6XFx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxuICAyODpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuICAyOTpcXHRlbmRpZlxcbiAgMzA6XFx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxuICAzMTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHRpZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbiAgMzU6XFx0ZW5kaWZcXG4gIDM2OlxcdG9iai0kKENPTkZJR19DR1JPVVBfQlBGKSArPSBjZ3JvdXAub1xcbiAgMzc6XFx0aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG4gIDM4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG4gIDM5OlxcdGVuZGlmXFxuICA0MDpcXHRpZmVxICgkKENPTkZJR19TWVNGUykseSlcXG4gIDQxOlxcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0gc3lzZnNfYnRmLm9cXG4gIDQyOlxcdGVuZGlmXFxuICA0MzpcXHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc3RydWN0X29wcy5vXFxuICA0NTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xcbiAgNDY6XFx0IyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXFxuICA0NzpcXHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxcbiAgNDg6XFx0IyBidGZfZW5jb2Rlcl9fYWRkX3NhdmVkX2Z1bmMoKSBieSBrZWVwaW5nIHRoZSBmaXJzdCBpbnN0YW5jZSBzZWVuLiBXZVxcbiAgNDk6XFx0IyBuZWVkIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUocykgaW4gYnBmX2xzbV9wcm90by5vIHRvIHRha2UgcHJlY2VkZW5jZVxcbiAgNTA6XFx0IyBvdmVyIHRob3NlIHdpdGhpbiBicGZfbHNtLm8uIEhhdmluZyBicGZfbHNtX3Byb3RvLm8gcHJlY2VkZVxcbiAgNTE6XFx0IyBicGZfbHNtLm8gZW5zdXJlcyBpdHMgRFdBUkYgQ1UgaXMgcHJvY2Vzc2VkIGVhcmx5LCBmb3JjaW5nIHRoZVxcbiAgNTI6XFx0IyBnZW5lcmF0ZWQgQlRGIHRvIGNvbnRhaW4gdGhlIG92ZXJyaWRlcy5cXG4gIDUzOlxcdCNcXG4gIDU0OlxcdCMgTm90YWJseSwgdGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWxzdCB0aGUgZGVkdXBsaWNhdGlvblxcbiAgNTU6XFx0IyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5LlxcbiAgNTY6XFx0b2JqLSR7Q09ORklHX0JQRl9MU019ICs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cXG4gIDU3OlxcdGVuZGlmXFxuICA1ODpcXHRpZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXFxuICA1OTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxuICA2MDpcXHRlbmRpZlxcbiAgNjE6XFx0b2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSArPSBwcmVsb2FkL1xcbiAgNjI6XFx0XFxuICA2MzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxuICA2NDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9pdGVyLm9cXG4gIDY1OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX3JlbG9jYXRlLm9cXG4gIDY2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0ga21lbV9jYWNoZV9pdGVyLm9cXG4gIDY3OlxcdGlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxcbiAgNjg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkbWFidWZfaXRlci5vXFxuICA2OTpcXHRlbmRpZlxcbiAgNzA6XFx0XFxuICA3MTpcXHRDRkxBR1NfUkVNT1ZFX3BlcmNwdV9mcmVlbGlzdC5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3MjpcXHRDRkxBR1NfUkVNT1ZFX2JwZl9scnVfbGlzdC5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3MzpcXHRDRkxBR1NfUkVNT1ZFX3F1ZXVlX3N0YWNrX21hcHMubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgNzQ6XFx0Q0ZMQUdTX1JFTU9WRV9scG1fdHJpZS5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuICA3NTpcXHRDRkxBR1NfUkVNT1ZFX3JpbmdidWYubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbiAgNzY6XFx0Q0ZMQUdTX1JFTU9WRV9ycXNwaW5sb2NrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTQ6NTIuOTcxNTI3OTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTczMDYwNjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGVuYWJsaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIHBpZWNlIGhlcmUuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIEkgdGhpbmsgSSd2ZSBnb3QgdGhlIGtleSBmdW5jdGlvbnMgaWRlbnRpZmllZDogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyBteSBhbmFseXNpcy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBUaGF0J3MgZ29vZCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSB3aXRoaW4gdGhlIGtlcm5lbC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHN5c2NhbGxzPyBUaGUgYW5zd2VyIGlzIHllcywgdGhleSBhcmUsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFsbG93cyBuZWdhdGl2ZSBvZmZzZXRzIG9yIG92ZXJmbG93cyB0byBieXBhc3MgY3J1Y2lhbCBjaGVja3MuIFRoaXMgaXMgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHksIGFuZCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gVGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGhlcmUgaXMgc2lnbmlmaWNhbnQuXG5cbk5vdywgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBiZXlvbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoZSBzZWxmLXRlc3RzIHVzZSBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHByb2dyYW0gdHlwZSBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdCB3aGVuIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBvciBzaW1pbGFyIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHJlcGxpY2F0ZSB0aGUgZW52aXJvbm1lbnQgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjAyLjcwMjEzNzA4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4ODc2OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6MDIuNzY5MDM1NDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MTc0OTgxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgYEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSByZW1lbWJlciBydW5uaW5nIGEgYGdyZXBgIGZvciBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAgd2l0aGluIHRoZSBga2VybmVsL2AgZGlyZWN0b3J5IGFscmVhZHkuIFRoYXQgc2hvdWxkIGhhdmUgY292ZXJlZCBtb3N0IG9mIHRoZSByZWxldmFudCBjb2RlYmFzZS4gSSBvbmx5IHNhdyBpdCBtZW50aW9uZWQgaW4gYGtlcm5lbC9icGYvYnRmLmNgLCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBUaGF0J3MgYSBwcmV0dHkgbGltaXRlZCBzY29wZSwgd2hpY2ggbWFrZXMgdGhpbmdzIGEgYml0IGVhc2llciB0byB0cmFjayBkb3duLiBHaXZlbiBpdCdzIGEgcHJvZ3JhbSB0eXBlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXRzIHVzZSBpbnZvbHZlcyBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYmVjYXVzZSB0aGlzIHR5cGljYWxseSBhZmZlY3RzIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBpZiBpdCB3aWxsIHdvcmsuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjI3Ljk0NDAxOTQ4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0MjYyMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg3MT1zdGF0aWMgYm9vbCBpc19wZXJmbW9uX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg3Ny1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjg3ODpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlRfV1JJVEFCTEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg3OS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfVFJBQ0lORzpcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNzgtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzk6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzODAtXFx0XFx0aWYgKHN0cm5jcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl90cF9uYW1lLCBzaXplb2YoYnVmKSAtIDEpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6MjguMzE4Mjg4MzA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNDY1Mzc4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipCUEYgUmF3IFRyYWNlcG9pbnQgTGluayBBdHRhY2htZW50IERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGJwZl9yYXdfdHBfbGlua19hdHRhY2hgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXcgdHJhY2Vwb2ludCBsaW5raW5nIHByb2Nlc3MuIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUga2V5IGFzcGVjdHMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgdHJhY2Vwb2ludCBpbmZyYXN0cnVjdHVyZS4gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIGtwcm9iZS91cHJvYmUgbWFjaGluZXJ5LCBvciBpcyBpdCBkb2luZyBzb21ldGhpbmcgbW9yZSBkaXJlY3RseSBhdCB0aGUga2VybmVsIHByb2JlIGVudHJ5IHBvaW50cz8gSSBrbm93IHJhdyB0cmFjZXBvaW50cyBoYXZlIHRoZWlyIG93biBzcGVjaWZpYyBzZXQgb2YgY29uc3RyYWludHMsIHNvIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbkknbGwgYmUgbG9va2luZyBhdCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGV4aXN0aW5nIEJQRiB2ZXJpZmllciBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvdmVybGFwcyB3aXRoIG90aGVyIHRyYWNlcG9pbnQgaGFuZGxlcnMuIFdoYXQga2luZCBvZiB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgQlBGIHByb2dyYW0gYmVpbmcgYXR0YWNoZWQ/IEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3MgZm9yIHJhdyB0cmFjZXBvaW50cyB0aGF0IGRpZmZlciBmcm9tIHRoZSByZWd1bGFyIGB0cmFjZXBvaW50X3Byb2JlX2F0dGFjaGAgbG9naWM/IFRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhcmUgYW5vdGhlciBpbXBvcnRhbnQgYXNwZWN0LiBIb3cgaXMgaXQgZW5zdXJpbmcgdGhhdCB0aGUgQlBGIHByb2dyYW0gZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciBrZXJuZWwgYWN0aXZpdGllcywgb3IgY3JlYXRlIGFueSByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2g/XG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIGFueSBrbm93biBvdmVyaGVhZHMsIGNvbXBhcmVkIHRvIG90aGVyIEJQRiBhdHRhY2ggbWV0aG9kcz8gSXMgdGhlcmUgYSBkaWZmZXJlbmNlIGluIG1lbW9yeSB1c2FnZT8gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBDUFUgY2FjaGUgY29oZXJlbmN5IGJlY2F1c2Ugb2YgdGhlIHJhdyB0cmFjZXBvaW50IGludGVyYWN0aW9ucz8gSSBhbHNvIG5lZWQgdG8gYmUgdmlnaWxhbnQgZm9yIGFueSBlZGdlIGNhc2VzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgYW5kIGZhaWx1cmUgbW9kZXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgYXR0YWNoIGZhaWxzPyBIb3cgYXJlIHJlc291cmNlcyBjbGVhbmVkIHVwPyBJIHdpbGwgcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBwYXJhbWV0ZXJzIHRoZSBmdW5jdGlvbiBhY2NlcHRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlcyBpdCBjYW4gcHJvZHVjZS4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByb2J1c3QgYW5kIGVmZmljaWVudCB3YXkgdG8gaW50ZXJhY3Qgd2l0aCByYXcgdHJhY2Vwb2ludHMuIExldCdzIHNlZSB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNTozNS42NjQ4MjkxODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc3MzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmF3X3RwX2xpbmtfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTMzNzU9c3RhdGljIGJvb2wgYnBmX2xpbmtfaXNfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzgwLVxcdCAqIGJwZl9yYXdfdHBfbGlua19sb3BzIGFuZCB0aHVzIGRlYWxsb2NfZGVmZXJyZWQoKSwgc2VlXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzM4MTpcXHQgKiBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKCkuXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzM4Mi1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNDY9c3RhdGljIGludCBicGZfcGVyZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM1MS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MzUyOnN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM1My1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX3RwX25hbWUsIHU2NCBjb29raWUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NDMwPXN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDQ1LVxcdGNvb2tpZSA9IGF0dHItXFx1MDAzZXJhd190cmFjZXBvaW50LmNvb2tpZTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NDQ2OlxcdGZkID0gYnBmX3Jhd190cF9saW5rX2F0dGFjaChwcm9nLCB0cF9uYW1lLCBjb29raWUsIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDQ3LVxcdGlmIChmZCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg4Ny1cXHRcXHRpZiAocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX1JBV19UUClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODg4OlxcdFxcdFxcdHJldCA9IGJwZl9yYXdfdHBfbGlua19hdHRhY2gocHJvZywgTlVMTCwgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZy5jb29raWUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6MzUuNzcwNjA4NzE4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg3NDgxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgYWRvcHRpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqQlBGIEV2ZW50IFF1ZXN0aW9uKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0dWZmIGFnYWluLCBhbmQgSSd2ZSBoaXQgYSBzbWFsbCBzbmFnLiBJJ20gc2V0dGluZyB1cCBhIHJhdyB0cmFjZXBvaW50LCBzcGVjaWZpY2FsbHkgdXNpbmcgYGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuYC4gTXkgbWluZCBrZWVwcyBjaXJjbGluZyBiYWNrIHRvIHRoaXMgZnVuZGFtZW50YWwgcXVlc3Rpb246IGlzIGl0ICphYnNvbHV0ZWx5KiBuZWNlc3NhcnkgdG8gaGF2ZSBgQlBGX0VWRU5UU2AgZW5hYmxlZCBvciBjb25maWd1cmVkIGluIG9yZGVyIGZvciBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gT3IsIHB1dCBhbm90aGVyIHdheSwgaXMgdGhhdCBjb25maWd1cmF0aW9uIGEgcHJlcmVxdWlzaXRlLCBvciBpcyB0aGVyZSBzb21lIG90aGVyIG1lY2hhbmlzbSBhdCBwbGF5PyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhbiBpbXBsaWVkIGRlcGVuZGVuY3ksIGEgYmVzdCBwcmFjdGljZSwgb3IgaWYgSSBjYW4gd29yayBhcm91bmQgaXQgc29tZWhvdy4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBiZWZvcmUgSSBpbnZlc3QgdG9vIG11Y2ggdGltZSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6NDAuMDU5MzYwMTE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgwOTI4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmF3X3RyYWNlcG9pbnRfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDI5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0MzA6c3RhdGljIGludCBicGZfcmF3X3RyYWNlcG9pbnRfb3Blbihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDMxLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1OS1cXHRjYXNlIEJQRl9SQVdfVFJBQ0VQT0lOVF9PUEVOOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NjA6XFx0XFx0ZXJyID0gYnBmX3Jhd190cmFjZXBvaW50X29wZW4oXFx1MDAyNmF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NjEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjQwLjEzNjE3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQyNjMyNzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24sIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgaXRzIHBvcnRhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBUaGUgaW5pdGlhbCwgYW5kIG1vc3QgbGlrZWx5LCBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGAjaWZkZWZgIGJsb2NrcyBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gb3IgaW1wbGVtZW50YXRpb24uIFRoYXQgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGlmIGl0cyBhdmFpbGFiaWxpdHkgdmFyaWVzIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIG9yIGJ1aWxkIGZsYWdzLiBLbm93aW5nIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW1wb3J0YW50IGZvciBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjU1LjU2MjUwODc0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzY1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQzNTI9c3RhdGljIGludCBicGZfcmF3X3RwX2xpbmtfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MjktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQzMDpzdGF0aWMgaW50IGJwZl9yYXdfdHJhY2Vwb2ludF9vcGVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MzEte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM1ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU5LVxcdGNhc2UgQlBGX1JBV19UUkFDRVBPSU5UX09QRU46XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ2MDpcXHRcXHRlcnIgPSBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbihcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ2MS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6NTUuNzU1ODg0NDU1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMzM5NzIzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQsIGFuZCB3aGF0J3MgdGhlIHB1cnBvc2U/XCIgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGtub3dpbmcgdGhhdCBpdCdzIGEgY3JpdGljYWwgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBmdW5jdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gdHJhY2luZyByYXcgdHJhY2Vwb2ludHMgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBhcmd1bWVudHMgYXJlIHNldCBhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIG1hbmFnZWQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIGl0cyBpbXBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgLSBjb3VsZCB0aGVyZSBiZSBhbnkgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdW5maWx0ZXJlZCB0cmFjZXBvaW50cz8gQWxzbywgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlbGF0ZWQgdG8gc29tZSBpbnN0cnVtZW50YXRpb24gc2V0dXAuIEkgd2lsbCBiZSBsb29raW5nIGZvcjpcblxuKiAgICoqQXJndW1lbnQgVmFsaWRhdGlvbioqOiBXaGF0IGlucHV0IHZhbGlkYXRpb24gaXMgZG9uZSBvbiB0aGUgdHJhY2Vwb2ludCBuYW1lLCB0aGUgaGFuZGxlciBmdW5jdGlvbiwgYW5kIHRoZSBwcm9iZSBkYXRhIHN0cnVjdHVyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzP1xuKiAgICoqUmVzb3VyY2UgQWxsb2NhdGlvbioqOiBIb3cgYXJlIHJlc291cmNlcyBtYW5hZ2VkIGFyb3VuZCBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gPyBJcyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHJhY2UgY29uZGl0aW9ucz9cbiogICAqKkVycm9yIEhhbmRsaW5nKio6IElzIGVycm9yIGhhbmRsaW5nIHJvYnVzdD8gV2hhdCBoYXBwZW5zIGlmIGBicGZfcmF3X3RyYWNlcG9pbnRfb3BlbmAgZmFpbHM/IElzIHRoZXJlIGdyYWNlZnVsIGRlZ3JhZGF0aW9uIG9yIHBhbmljPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGFuZCBwcm9wYWdhdGUgdXAgdGhlIGNhbGwgc3RhY2ssIHNvIHRoZSBwcm9ncmFtIGRvZXMgbm90IGNyYXNoLlxuKiAgICoqS2VybmVsIENvbnRleHQqKjogSSdtIGNvbnNpZGVyaW5nIHdoYXQgY29udGV4dCB0aGlzIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJcyBpdCB1c2VyIHNwYWNlPyBLZXJuZWwgc3BhY2U/IFdoYXQgYXJlIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgY2FsbGVyPyBUaGlzIG1hdHRlcnMgdG8gdHJhY2Vwb2ludCBhY2Nlc3MgYW5kIHBvdGVudGlhbCBleHBsb2l0cy5cbiogICAqKkNvbmN1cnJlbmN5Kio6IElmIHRoZXJlJ3MgYW55IG11bHRpdGhyZWFkaW5nIGluIHRoZSB2aWNpbml0eSwgaG93IGlzIHRoZSB0cmFjZXBvaW50IGFjY2VzcyBoYW5kbGVkPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uIHdoZW4gbXVsdGlwbGUgdGhyZWFkcyBhcmUgaW52b2x2ZWQgaW4gdHJhY2luZz9cbiogICAqKlRyYWNlcG9pbnQgVXNhZ2UqKjogSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0J3MgaGFwcGVuaW5nLiBJJ20gYWxzbyBwbGFubmluZyB0byBpbnNwZWN0IHRoZSB0cmFjZXBvaW50IGhhbmRsZXIgZnVuY3Rpb24gYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gSXMgdGhlIGhhbmRsZXIgcGVyZm9ybWluZyBhbnkgcmlza3kgb3BlcmF0aW9ucz9cblxuTXkgYW5hbHlzaXMgbmVlZHMgdG8gYmUgY29tcHJlaGVuc2l2ZSwgZW5zdXJpbmcgbm8gc3RvbmUgaXMgdW50dXJuZWQuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0gYW5kIGFudGljaXBhdGUgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCdzIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0ZWxsIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE2OjE4LjA5NTYxMjQ5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQyMDpcXHRcXG40NDIxOlxcdFxcdHJldHVybiBicGZfbGlua19zZXR0bGUoXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG40NDIyOlxcdFxcbjQ0MjM6XFx0b3V0X3B1dF9idHA6XFxuNDQyNDpcXHRcXHRicGZfcHV0X3Jhd190cmFjZXBvaW50KGJ0cCk7XFxuNDQyNTpcXHRcXHRyZXR1cm4gZXJyO1xcbjQ0MjY6XFx0fVxcbjQ0Mjc6XFx0XFxuNDQyODpcXHQjZGVmaW5lIEJQRl9SQVdfVFJBQ0VQT0lOVF9PUEVOX0xBU1RfRklFTEQgcmF3X3RyYWNlcG9pbnQuY29va2llXFxuNDQyOTpcXHRcXG40NDMwOlxcdHN0YXRpYyBpbnQgYnBmX3Jhd190cmFjZXBvaW50X29wZW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuNDQzMTpcXHR7XFxuNDQzMjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuNDQzMzpcXHRcXHR2b2lkIF9fdXNlciAqdHBfbmFtZTtcXG40NDM0OlxcdFxcdF9fdTY0IGNvb2tpZTtcXG40NDM1OlxcdFxcdGludCBmZDtcXG40NDM2OlxcdFxcbjQ0Mzc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX1JBV19UUkFDRVBPSU5UX09QRU4pKVxcbjQ0Mzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDQzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6MTguMDk1OTY0NzcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTE0NjU3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIFRyYWNlcG9pbnQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGVzZSByYXcgdHJhY2Vwb2ludHMgYXJlIHNldCB1cC4gSXQgbG9va3MgbGlrZSBgYnBmX3Jhd190cmFjZXBvaW50X29wZW5gIGlzIHByb2JhYmx5IGFsd2F5cyBhdmFpbGFibGUgYXMgbG9uZyBhcyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBmbGlwcGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgY29uc2lzdGVudCBmcm9tIGEgc3lzdGVtIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludC5cblxuQnV0IGhhbmcgb24uLi4gSSBzZWUgYSBgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludGAgY2FsbCBpbiB0aGUgY29kZS4gSSByZW1lbWJlciB0aGUgYG9wZW5gIGJ1dCB3aGVyZSBleGFjdGx5IGlzIHRoZSBjb3JyZXNwb25kaW5nIGBwdXRgIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWNsYXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgdW5kZXJzdGFuZCBob3cgaXQgY2xlYW5zIHVwIHJlc291cmNlcyBhbmQgd2hhdCBpdCdzIGRvaW5nIG9uIHRoZSBiYWNrZW5kLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgcHJvcGVyIHRyYWNlcG9pbnQgbWFuYWdlbWVudCBhbmQgcHJldmVudCBhbnkgbGluZ2VyaW5nIGlzc3Vlcy4gSSBuZWVkIHRvIGJlIHN1cmUgaXQncyBkb2luZyB3aGF0IEkgZXhwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAxNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6NDYuNjEwNjI0OTgyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI1OTg5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3B1dF9yYXdfdHJhY2Vwb2ludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTM5MDg9c3RhdGljIHZvaWQgYnBmX3Jhd190cF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzkxMy1cXHRicGZfcHJvYmVfdW5yZWdpc3RlcihyYXdfdHAtXFx1MDAzZWJ0cCwgcmF3X3RwKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozOTE0OlxcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQocmF3X3RwLVxcdTAwM2VidHApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM5MTUtfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM5My1cXHRpZiAocHJvZy1cXHUwMDNlc2xlZXBhYmxlIFxcdTAwMjZcXHUwMDI2ICF0cmFjZXBvaW50X2lzX2ZhdWx0YWJsZShidHAtXFx1MDAzZXRwKSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzOTQ6XFx0XFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzOTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NDIzLW91dF9wdXRfYnRwOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0MjQ6XFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0MjUtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg5Mj1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA2OS1cXHRcXHRcXHRcXHR0bmFtZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MDcwOlxcdFxcdFxcdGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoYnRwKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNzEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkwNzQtXFx0XFx0XFx0XFx0XFx0dHJhY2Vfc3ltYm9sKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkwNzU6XFx0XFx0YnBmX3B1dF9yYXdfdHJhY2Vwb2ludChidHApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTA3Ni1cXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMDgyPXN0cnVjdCBicGZfcmF3X2V2ZW50X21hcCAqYnBmX2dldF9yYXdfdHJhY2Vwb2ludChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIwOTMtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIwOTQ6dm9pZCBicGZfcHV0X3Jhd190cmFjZXBvaW50KHN0cnVjdCBicGZfcmF3X2V2ZW50X21hcCAqYnRwKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMDk1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6NDYuOTIzMjI5NzcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTU0NTk2MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBUcmFjZXBvaW50IEFjdGl2YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgaXRzIGZ1bmN0aW9uIGBicGZfcHV0X3Jhd190cmFjZXBvaW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byBhY3R1YWxseSAqZW5hYmxlKiB0aGlzIGNvZGU/IEkga25vdyB0aGlzIGFyZWEgZGVhbHMgd2l0aCBCUEYtYmFzZWQgdHJhY2Vwb2ludHMsIGJ1dCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVuYWJsaW5nIGZsYWcgaW4gdGhlIGtlcm5lbCBjb25maWcuIElzIGl0IGEgc3BlY2lmaWMgQlBGLXJlbGF0ZWQgb3B0aW9uPyBJcyBpdCB0aWVkIHRvIGEgYnJvYWRlciB0cmFjaW5nIGZyYW1ld29yayBzZXR0aW5nPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHNvIEkgY2FuIHRoZW4gc2VlIGhvdyB0aGlzIHRyYWNlcG9pbnQgZnVuY3Rpb25hbGl0eSBmaXRzIGluIHRoZSBncmVhdGVyIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgY29uZmlnIGRlcGVuZGVuY3kgaXMgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgdGhlIGZlYXR1cmUgYW5kIHRyb3VibGVzaG9vdGluZyBhbnkgaXNzdWVzIHRoYXQgY29tZSB1cC4gTGV0IG1lIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjcm9zcy1yZWZlcmVuY2VzIHRvIGZpbmQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gZmxhZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNzowOS44Nzc4Mjk1OTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk1MjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjEwLjAyNTc4ODE1OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI1NzY0NzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqT24gQlBGIFRyYWNlcG9pbnQgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb21waWxhdGlvbiBhbmQgSSdtIHByZXR0eSBzdXJlIEkgbmVlZCB0byBlbmFibGUgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCdzIHRoZSBrZXkgdG8gZ2V0dGluZyBgYnBmX3RyYWNlLm9gIGxpbmtlZCBwcm9wZXJseS4gTm93LCBpZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzICpkaXNhYmxlZCosIHRoZW4gYGJwZl9wdXRfcmF3X3RyYWNlcG9pbnRgLi4uIHllYWgsIEknZCBiZXQgYSBwcmV0dHkgZ29vZCBzdW0gdGhhdCBmdW5jdGlvbiBpcyBqdXN0IGRlZmluZWQgYXMgYW4gZW1wdHkgaW5saW5lIGZ1bmN0aW9uLCBvciBtYXliZSBldmVuIGNvbXBsZXRlbHkgc3RyaXBwZWQgb3V0IGJ5IHRoZSBjb21waWxlci4gTm8gcmVhbCBydW50aW1lIG92ZXJoZWFkLCBidXQgYWxzbyBjb21wbGV0ZWx5IHVzZWxlc3MgaW4gdGhlIHJlc3VsdGluZyBiaW5hcnkuIE1ha2VzIHNlbnNlLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCBzbyB0aGF0IEkgY2FuIGxpbmsgdGhlIG5lY2Vzc2FyeSBCUEYgZXZlbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjI3LjI4MzQzNzM2NloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0MTkwMzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wdXRfcmF3X3RyYWNlcG9pbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTc6MjcuMzQ0ODYzOTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcxMTg0Mjk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFRyYWNlcG9pbnRzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRyYWNlcG9pbnRzIGFyZSBiZWluZyBoYW5kbGVkIGF0IHRoZSBCUEYgbGV2ZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBrZXJuZWwtbGV2ZWwgdHJhY2luZyBtZWNoYW5pc20sIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIGNvcmUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBCUEYgYW5kIHRyYWNpbmcuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRob3NlIGJ1aWxkaW5nIGJsb2NrcyB3b3VsZCBiZSBgaW5jbHVkZS9saW51eC9icGZfdHJhY2UuaGAsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIgd2l0aGluIHRoZSBrZXJuZWwncyBpbmNsdWRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGlmIEknbSBzbGlnaHRseSBvZmYgb24gdGhlIGV4YWN0IGZpbGUgbmFtZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIGhvdyB0aGVzZSB0cmFjZXBvaW50cyBhcmUgZGVmaW5lZCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGVtLCBhbmQgd2hhdCByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGludGVyZXN0IGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBMZXQncyBzZWUgd2hhdCB0aGF0IGhlYWRlciByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY0NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjM2LjA1NjcxMDc4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMjc5MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wdXRfcmF3X3RyYWNlcG9pbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03ODI9c3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpicGZfZ2V0X3Jhd190cmFjZXBvaW50KGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzgzOnZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCk7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03ODQtaW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04MjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODI3LX1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjgyODpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cClcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTgyOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjM2LjI1ODk5NTI3NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDgxNTg0NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgQlBGIEV2ZW50cyBhbmQgQnVmZmVyIEFjY2VzcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgcmF3IHRyYWNlcG9pbnRzIGFyZSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oYC4gUmlnaHQsIG1ha2VzIHNlbnNlLiBBbmQsIGFzIGV4cGVjdGVkLCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIHRoZSBrZXkgdG8gYWN0dWFsbHkgdXNpbmcgdGhlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgZW5hYmxpbmcgdGhhdCBhbHNvIGFmZmVjdHMgaG93IHRoZSB2ZXJpZmllciBkZWFscyB3aXRoIGJ1ZmZlciBhY2Nlc3MuIExldCdzIHRyYWNlIGl0IGJhY2suXG5cblRoZSBmdW5jdGlvbiBgX19jaGVja19idWZmZXJfYWNjZXNzYCBzb3VuZHMgcmVsZXZhbnQsIHNvIEknbGwgc2VlIHdoZXJlIGl0J3MgdXNlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGRpcmVjdGx5IGNhbGxlZCBieSBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gIGBjaGVja19idWZmZXJfYWNjZXNzYCwgaW4gdHVybiwgaXMgdXNlZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2Agd2hpY2ggaGFuZGxlcyBhIHZhcmlldHkgb2YgcG9pbnRlciB0eXBlcywgaW5jbHVkaW5nIGBQVFJfVE9fTUFQX1ZBTFVFYCwgYFBUUl9UT19NQVBfS0VZYCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXJzLiBXYWl0LCBJIHNlZSBgUFRSX1RPX0JVRmAgaW4gdGhhdCBsaXN0LCBzbyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgaXMgYWxzbyBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggcmVndWxhciBidWZmZXJzLCBub3QganVzdCB0cmFjZXBvaW50IGRhdGE/IFRoaXMgaXMgZ29vZCB0byBrbm93LCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgdGhlIGNvbm5lY3Rpb24gaXMuXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIGNhbGxzIHRvIGBjaGVja19idWZmZXJfYWNjZXNzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoIGRpZmZlcmVudCBjb250ZXh0cywgaW5jbHVkaW5nIGJ1ZmZlcnMuIFRoYXQncyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCB0aGUgaW5zdGFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNzo0NC43NDA1ODI5MDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTU5OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2J1ZmZlcl9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01MjcyPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTMyNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTMyNjpzdGF0aWMgaW50IF9fY2hlY2tfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzI3LVxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpidWZfaW5mbyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01Mzc3PXN0YXRpYyBpbnQgY2hlY2tfdHBfYnVmZmVyX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzODMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzODQ6XFx0ZXJyID0gX19jaGVja19idWZmZXJfYWNjZXNzKGVudiwgXFxcInRyYWNlcG9pbnRcXFwiLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIFxcdTAwMjZhY2Nlc3NfZW5kKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM4NS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzOTM6c3RhdGljIGludCBjaGVja19idWZmZXJfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUzOTQtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTQwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTQwMzpcXHRlcnIgPSBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3MoZW52LCBidWZfaW5mbywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBcXHUwMDI2YWNjZXNzX2VuZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0MDQtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDk4PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMzMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMzMzpcXHRcXHRlcnIgPSBjaGVja19idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBmYWxzZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMzNC1cXHRcXHRcXHRcXHRcXHQgIG1heF9hY2Nlc3MpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3NjE9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MDktXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODEwOlxcdFxcdHJldHVybiBjaGVja19idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgMCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMS1cXHRcXHRcXHRcXHRcXHQgICBhY2Nlc3Nfc2l6ZSwgemVyb19zaXplX2FsbG93ZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE3OjQ0Ljc5OTE0ODA5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTIyODE1Njc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIHdpdGhpbiBgY2hlY2tfbWVtX2FjY2Vzc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AuIEl0IGxvb2tzIGxpa2UgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlLCBvciBtYXliZSB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucywgdW5kZXIgd2hpY2ggYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGlzIGJlaW5nIGludm9rZWQgKndpdGhpbiogdGhlIGJyb2FkZXIgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uIHBlcmZvcm1lZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2AuIEknbSBwcm9iYWJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiB0aGVyZSdzIGFueSBjb250ZXh0IEkgY2FuIGdsZWFuIGZyb20gKmhvdyogYW5kICp3aGVuKiBpdCdzIGNhbGxlZC4gQXJlIHRoZXJlIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGJlaW5nIHByb3RlY3RlZCwgcGFydGljdWxhciBhY2Nlc3MgdHlwZXMgYmVpbmcgc2NydXRpbml6ZWQgKHJlYWRzLCB3cml0ZXMsIGV0Yy4pLCBvciBwZXJoYXBzIGVycm9yIGNvbmRpdGlvbnMgYmVpbmcgdHJpZ2dlcmVkPyBLbm93aW5nIHRoYXQgbGlua2FnZSB3aWxsIGhlbHAgY2xhcmlmeSBob3cgbWVtb3J5IGFjY2Vzc2VzLCBnZW5lcmFsbHksIGFyZSBiZWluZyB2YWxpZGF0ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIHNlY3VyaXR5IGNoZWNrPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTg6MDYuMDI3MzA4MTEyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzkxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzMjA6XFx0XFx0XFx0dTMyICptYXhfYWNjZXNzO1xcbjYzMjE6XFx0XFxuNjMyMjpcXHRcXHRcXHRpZiAocmRvbmx5X21lbSkge1xcbjYzMjM6XFx0XFx0XFx0XFx0aWYgKHQgPT0gQlBGX1dSSVRFKSB7XFxuNjMyNDpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGNhbm5vdCB3cml0ZSBpbnRvICVzXFxcXG5cXFwiLFxcbjYzMjU6XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXFx1MDAzZXR5cGUpKTtcXG42MzI2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjYzMjc6XFx0XFx0XFx0XFx0fVxcbjYzMjg6XFx0XFx0XFx0XFx0bWF4X2FjY2VzcyA9IFxcdTAwMjZlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X3Jkb25seV9hY2Nlc3M7XFxuNjMyOTpcXHRcXHRcXHR9IGVsc2Uge1xcbjYzMzA6XFx0XFx0XFx0XFx0bWF4X2FjY2VzcyA9IFxcdTAwMjZlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbWF4X3Jkd3JfYWNjZXNzO1xcbjYzMzE6XFx0XFx0XFx0fVxcbjYzMzI6XFx0XFxuNjMzMzpcXHRcXHRcXHRlcnIgPSBjaGVja19idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplLCBmYWxzZSxcXG42MzM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgbWF4X2FjY2Vzcyk7XFxuNjMzNTpcXHRcXG42MzM2OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgKHJkb25seV9tZW0gfHwgdCA9PSBCUEZfUkVBRCkpXFxuNjMzNzpcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbjYzMzg6XFx0XFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gUFRSX1RPX0FSRU5BKSB7XFxuNjMzOTpcXHRcXHRcXHRpZiAodCA9PSBCUEZfUkVBRCBcXHUwMDI2XFx1MDAyNiB2YWx1ZV9yZWdubyBcXHUwMDNlPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxODowNi4wMjg1NDk4NTJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODI4OTEzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyBgcmRvbmx5X21lbWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGhyYXNlIGByZG9ubHlfbWVtYCBqdXN0IHBvcHBlZCB1cCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGl0IHNpZ25pZmllcyBpbiB0aGlzIGNvbnRleHQuIFJhdGhlciB0aGFuIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0byBnZXQgdGhlIHByZWNpc2UgZGVmaW5pdGlvbiwgc28gSSdsbCByZXdpbmQgYSBiaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uY2VwdCBpbiBkZXRhaWwsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGdldCB0aGUgZnVsbCBzY29wZSBieSByZS1yZWFkaW5nIHRoZSByZWxldmFudCBwYXJ0cywgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IGFsbCBtYWtlcyBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE4OjE5LjMxMTQ0Mzg4M1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MjkwOlxcdFxcdFxcdFxcdFxcdHZhbHVlX3JlZ25vKTtcXG42MjkxOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjYyOTI6XFx0XFx0XFx0fVxcbjYyOTM6XFx0XFxuNjI5NDpcXHRcXHRcXHRlcnIgPSBjaGVja19mbG93X2tleXNfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcXG42Mjk1OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG42Mjk2OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxuNjI5NzpcXHRcXHR9IGVsc2UgaWYgKHR5cGVfaXNfc2tfcG9pbnRlcihyZWctXFx1MDAzZXR5cGUpKSB7XFxuNjI5ODpcXHRcXHRcXHRpZiAodCA9PSBCUEZfV1JJVEUpIHtcXG42Mjk5OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgY2Fubm90IHdyaXRlIGludG8gJXNcXFxcblxcXCIsXFxuNjMwMDpcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZ190eXBlX3N0cihlbnYsIHJlZy1cXHUwMDNldHlwZSkpO1xcbjYzMDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuNjMwMjpcXHRcXHRcXHR9XFxuNjMwMzpcXHRcXHRcXHRlcnIgPSBjaGVja19zb2NrX2FjY2VzcyhlbnYsIGluc25faWR4LCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQpO1xcbjYzMDQ6XFx0XFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG42MzA1OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxuNjMwNjpcXHRcXHR9IGVsc2UgaWYgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fVFBfQlVGRkVSKSB7XFxuNjMwNzpcXHRcXHRcXHRlcnIgPSBjaGVja190cF9idWZmZXJfYWNjZXNzKGVudiwgcmVnLCBhcmdubywgb2ZmLCBzaXplKTtcXG42MzA4OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG42MzA5OlxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XFxuNjMxMDpcXHRcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG42MzExOlxcdFxcdFxcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIHtcXG42MzEyOlxcdFxcdFxcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxcbjYzMTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdmFsdWVfcmVnbm8pO1xcbjYzMTQ6XFx0XFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkge1xcbjYzMTU6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXFxuNjMxNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZV9yZWdubyk7XFxuNjMxNzpcXHRcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG42MzE4OlxcdFxcdFxcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIHtcXG42MzE5OlxcdFxcdFxcdGJvb2wgcmRvbmx5X21lbSA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctXFx1MDAzZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxODoxOS4zMTI0OTUxMDNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyOTQ3MTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gQnVmZmVyIEFjY2VzcyBDaGVja3MqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB3ZSdyZSBpbiB0aGUgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gYFBUUl9UT19CVUZgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBJcyB0aGlzIHVzYWdlIHNwZWNpZmljIHRvIGBicGZfZHlucHRyYCBvciBwZXJoYXBzIHNvbWV0aGluZyBhbmFsb2dvdXMgdG8gaXQ/IEkgbmVlZCB0byBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLiBPa2F5LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCB2ZXJpZnkgd2hhdCBgUFRSX1RPX0JVRmAgYWN0dWFsbHkgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQuIExldCBtZSB0cmFjZSB0aGF0IGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuIEdvdHRhIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBidWZmZXIgaXMgYmVpbmcgYWNjZXNzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWNjZXNzIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE4OjI4LjI0MTk2OTE5N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyNzg0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBUUl9UT19CVUZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz02ODQ4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY5NzAtXFx0XFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlKTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjY5NzE6XFx0XFx0aWYgKGN0eF9hcmdfaW5mby1cXHUwMDNlb2Zmc2V0ID09IG9mZiBcXHUwMDI2XFx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2J0Zi5jLTY5NzItXFx0XFx0ICAgIChmbGFnIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jPTM5OT1jb25zdCBjaGFyICpyZWdfdHlwZV9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvbG9nLmMtNDIwLVxcdFxcdFtQVFJfVE9fQVJFTkFdXFx0XFx0PSBcXFwiYXJlbmFcXFwiLFxcbmtlcm5lbC9icGYvbG9nLmM6NDIxOlxcdFxcdFtQVFJfVE9fQlVGXVxcdFxcdD0gXFxcImJ1ZlxcXCIsXFxua2VybmVsL2JwZi9sb2cuYy00MjItXFx0XFx0W1BUUl9UT19GVU5DXVxcdFxcdD0gXFxcImZ1bmNcXFwiLFxcbi0tXFxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbWFwX2VsZW1fcmVnX2luZm8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTgwLVxcdFxcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0sIGtleSksXFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjE4MTpcXHRcXHQgIFBUUl9UT19CVUYgfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFkgfSxcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTgyLVxcdFxcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0sIHZhbHVlKSxcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTgzOlxcdFxcdCAgUFRSX1RPX0JVRiB8IFBUUl9NQVlCRV9OVUxMIH0sXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTE4NC1cXHR9LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz01MDc9c3RhdGljIGJvb2wgcmVnc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtNjEyLVxcdGNhc2UgUFRSX1RPX01FTTpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjYxMzpcXHRjYXNlIFBUUl9UT19CVUY6XFxua2VybmVsL2JwZi9zdGF0ZXMuYy02MTQtXFx0Y2FzZSBQVFJfVE9fVFBfQlVGRkVSOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMzMDc9c3RhdGljIGJvb2wgaXNfc3BpbGxhYmxlX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzIyLVxcdGNhc2UgUFRSX1RPX0JURl9JRDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMzpcXHRjYXNlIFBUUl9UT19CVUY6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjQtXFx0Y2FzZSBQVFJfVE9fTUVNOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwOTg9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzE2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlX3JlZ25vKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjMxNzpcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjMxOC1cXHRcXHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXFx1MDAzZXR5cGUpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc2MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICAgemVyb19zaXplX2FsbG93ZWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Nzk4OlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc5OS1cXHRcXHRpZiAodHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBtZW1fdHlwZXMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzc3NS1cXHRcXHRQVFJfVE9fTUVNIHwgTUVNX1JJTkdCVUYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3NzY6XFx0XFx0UFRSX1RPX0JVRixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzc3Ny1cXHRcXHRQVFJfVE9fQlRGX0lEIHwgUFRSX1RSVVNURUQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAyNz1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDY5LVxcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MDcwOlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODA3MTpcXHRjYXNlIFBUUl9UT19CVUYgfCBNRU1fUkRPTkxZOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDcyLVxcdGNhc2UgUFRSX1RPX0FSRU5BOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNjczPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzczNS1cXHRjYXNlIFBUUl9UT19NRU06XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzM2OlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3MzctXFx0Y2FzZSBQVFJfVE9fRlVOQzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTg6MjguNjE0NzYyMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY0MDE0NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFBvaW50ZXIgVHlwZXMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoZSB1c2FnZSBvZiBwb2ludGVyIHR5cGVzIGluIEJQRiwgc3BlY2lmaWNhbGx5IGBQVFJfVE9fQlVGYCBhbmQgYFBUUl9UT19UUF9CVUZGRVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgUFRSX1RPX0JVRmAgaXMgcmVsZXZhbnQgdG8gYGJwZl9pdGVyYCwgbGlrZSB0aGUgcmVnaXN0cmF0aW9uIGluZm8gaW4gYGJwZl9tYXBfZWxlbV9yZWdfaW5mb2AuIFRoaXMgbWVhbnMgdGhlIGBjaGVja19idWZmZXJfYWNjZXNzYCBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBpbiB0aGUgcGF0aCBmb3IgYGJwZl9pdGVyYCBwcm9ncmFtcy4gT24gdGhlIG90aGVyIGhhbmQsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCBpcyB0cmlnZ2VyZWQgYnkgYFBUUl9UT19UUF9CVUZGRVJgLCBhbmQgdGhhdCBwb2ludGVyIHR5cGUgaXMgZGlyZWN0bHkgdGllZCB0byBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRWAgYW5kIGBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UYC5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVGAgaGFzIGEgaGFyZCBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQlBGX0VWRU5UU2AuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGBicGZfdHJhY2UuY2AgZGVhbHMgd2l0aCByYXcgdHJhY2Vwb2ludHMsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHRoZXJlIGZvciBjb25maXJtYXRpb24uIFllcywgY29uZmlybWVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19CUEZfRVZFTlRTYCB0byBwcm9wZXJseSB0ZXN0IHRoZSBgUFRSX1RPX1RQX0JVRkZFUmAgcGF0aC5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBjaXJjbGUgYmFjayB0byBgUFRSX1RPX0JVRmAgYW5kIGBicGZfaXRlcmAuIERvZXMgYGJwZl9pdGVyYCBoYXZlIGl0cyBvd24gY29uZmlnIHJlcXVpcmVtZW50cz8gVGhpcyBpcyBpbXBvcnRhbnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgaW4gYGtlcm5lbC9icGYvYnBmX2l0ZXIuY2AgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTg6NDQuMjU0OTA4ODk4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU1MjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlci5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT05PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxODo0NC4zMTU0Njg5MTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MDQ0Mzg1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBGdW5jdGlvbmFsaXR5IGFuZCBUZXN0IFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQlBGIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQgbmVlZHMgdGVzdGluZy4gIGBicGZfaXRlci5vYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCBtZWFuaW5nIHRoZSBgUFRSX1RPX0JVRmAgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUganVzdCB3aXRoIHRoYXQgY29uZmlndXJhdGlvbi4gQnV0LCB0byB0ZXN0IGBQVFJfVE9fVFBfQlVGRkVSYCwgSSdsbCBuZWVkIGBDT05GSUdfQlBGX0VWRU5UU2AgZW5hYmxlZC4gIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIEknbGwgYWRkIGBCUEZfRVZFTlRTYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIEkgY2FuIHRlc3QgdGhlIGZ1bGwgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMuIEknbSBmb2N1c2luZyBvbiB0aGUgYnVmZmVyIGFjY2VzcyBjaGVja3MsIHNwZWNpZmljYWxseSB0aGUgYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgYnlwYXNzIGZvciBuZWdhdGl2ZSBgdmFyX29mZmAgdmFsdWVzIGluIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24uIFRoZSB2ZXJpZmllciBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGEgbmVnYXRpdmUgYHN0YXJ0YCBhZnRlciB0aGUgYWRkaXRpb24sIHdoaWNoIGlzIGdvb2QuXG5gYGBjXG5cdHZhcl9vZmYgPSAoczY0KXJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHZhcl9vZmYsIChzNjQpb2ZmLCBcdTAwMjZzdGFydCkpIHtcblx0XHR2ZXJib3NlKGVudixcblx0XHRcdFwiJXMgaW52YWxpZCAlcyBidWZmZXIgYWNjZXNzOiBvZmY9JWQsIHZhcl9vZmY9JWxsZFxcblwiLFxuXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidWZfaW5mbywgb2ZmLCB2YXJfb2ZmKTtcblx0XHRyZXR1cm4gLUVBQ0NFUztcblx0fVxuXG5cdGlmIChzdGFydCBcdTAwM2MgMCkge1xuXHRcdHZlcmJvc2UoZW52LFxuXHRcdFx0XCIlcyBpbnZhbGlkIG5lZ2F0aXZlICVzIGJ1ZmZlciBvZmZzZXQ6IG9mZj0lZCwgdmFyX29mZj0lbGxkXFxuXCIsXG5cdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ1Zl9pbmZvLCBvZmYsIHZhcl9vZmYpO1xuXHRcdHJldHVybiAtRUFDQ0VTO1xuXHR9XG5cblx0aWYgKHN0YXJ0IFx1MDAzZSBVMzJfTUFYIHx8IHNpemUgXHUwMDNjIDAgfHxcblx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdygodTMyKXN0YXJ0LCAodTMyKXNpemUsIGFjY2Vzc19lbmQpKSB7XG5cdFx0dmVyYm9zZShlbnYsXG5cdFx0XHRcIiVzIGludmFsaWQgJXMgYnVmZmVyIGFjY2Vzczogb2ZmPSVsbGQsIHNpemU9JWRcXG5cIixcblx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnVmX2luZm8sIHN0YXJ0LCBzaXplKTtcblx0XHRyZXR1cm4gLUVBQ0NFUztcblx0fVxuYGBgXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBmb3IgdGVzdGluZyBhcmUgYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYC4gIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZXNlIGFyZSBpbmxpbmVkLiBUaGV5IGFyZSBhbGwgc3RhdGljIHdoaWNoIG1lYW5zIHRoZXkgY291bGQgYmUgaW5saW5lZCwgYnV0IGlmIHRoZXkgYXJlIG5vdCBmdWxseSBpbmxpbmVkLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogdGhlbS4gQW5kIGlmIG5vdCwgaXQgd2lsbCBqdXN0IGZ1enogdGhlIGNhbGxlciBgY2hlY2tfbWVtX2FjY2Vzc2AsIHNvIGl0IHdpbGwgc3RpbGwgYmUgdXNlZnVsLiBJJ2xsIHN0aWNrIHdpdGggdGhvc2UgdGhyZWUgZm9yIG5vdy5cblxuTGV0J3MgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXNpZGUgZnJvbSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCwgYW55dGhpbmcgZWxzZSBpbnZvbHZlZD9cblxuT2theSwgbGV0J3MgZXhwbG9yZSB3aGVyZSB0aGVzZSBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AgdmFyaWFudHMgYXJlIHVzZWQuIEFoLCBgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3NgIGFsc28gdXNlcyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIEdvb2QgdG8ga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTk6MTQuMDE5OTExNTc2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEyNzgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19oZWxwZXJfbWVtX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MTU9c3RhdGljIGludCBjaGVja19zdGFja19yYW5nZV9pbml0aWFsaXplZChcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzYwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzYxOnN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc2Mi1cXHRcXHRcXHRcXHQgICBpbnQgYWNjZXNzX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGFjY2Vzc190eXBlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY4NTE9c3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODk0LVxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg5NTpcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODk2LVxcdFxcdFxcdFxcdCAgICAgIGFjY2Vzc190eXBlLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjkwOD1zdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTM0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTM1OlxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTM2OlxcdGVyciA9IGVyciA/OiBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MzctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIyND1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODMzNy1cXHRcXHRrZXlfc2l6ZSA9IG1ldGEtXFx1MDAzZW1hcC5wdHItXFx1MDAzZWtleV9zaXplO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MzM4OlxcdFxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdub19mcm9tX3JlZyhyZWdubyksIGtleV9zaXplLCBCUEZfUkVBRCwgZmFsc2UsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzM5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODM2NC1cXHRcXHRtZXRhLVxcdTAwM2VyYXdfbW9kZSA9IGFyZ190eXBlIFxcdTAwMjYgTUVNX1VOSU5JVDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODM2NTpcXHRcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm9fZnJvbV9yZWcocmVnbm8pLCBtZXRhLVxcdTAwM2VtYXAucHRyLVxcdTAwM2V2YWx1ZV9zaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MzY2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGFyZ190eXBlIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQwOC1cXHRcXHRpZiAoYXJnX3R5cGUgXFx1MDAyNiBNRU1fRklYRURfU0laRSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NDA5OlxcdFxcdFxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdub19mcm9tX3JlZyhyZWdubyksIGZuLVxcdTAwM2Vhcmdfc2l6ZVthcmddLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGFyZ190eXBlIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyNzA9Z2V0X2tmdW5jX3B0cl9hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlcixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1OC1cXHQvKiBUaGlzIGlzIHRoZSBjYXRjaCBhbGwgYXJndW1lbnQgdHlwZSBvZiByZWdpc3RlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTk6XFx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MuIEhvd2V2ZXIsIHdlIG9ubHkgYWxsb3cgd2hlbiBhcmd1bWVudCB0eXBlIGlzXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzYwLVxcdCAqIHBvaW50ZXIgdG8gc2NhbGFyLCBvciBzdHJ1Y3QgY29tcG9zZWQgKHJlY3Vyc2l2ZWx5KSBvZiBzY2FsYXJzLiBXaGVuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE5OjE0LjA4NjA0NzE2WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTg0MzM3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBIZWxwZXIgQXJndW1lbnQgVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyB3ZSB2YWxpZGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIEJQRiBoZWxwZXJzLiBJdCdzIGNsZWFyIHRoYXQgYGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIHdoaWNoIG1lYW5zIGBjaGVja19idWZmZXJfYWNjZXNzYCBwcm9iYWJseSBnZXRzIGEgbG90IG9mIHVzZSwgYW5kIG5vdCBqdXN0IGZvciB0aGUgb2J2aW91cyBjYXNlcyBsaWtlIGBQVFJfVE9fQlVGYCBhbmQgYFBUUl9UT19UUF9CVUZGRVJgLiBIbW0sIGl0IGp1c3Qgc3RydWNrIG1lOiBgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3NgICppdHNlbGYqIGNhbGxzIGBjaGVja19idWZmZXJfYWNjZXNzYCB3aGVuIGRlYWxpbmcgd2l0aCBgUFRSX1RPX0JVRmAuIFJpZ2h0LiBTZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AgZGlyZWN0bHkgYW5kIHNlZSBleGFjdGx5IGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxOToxOC4yNDQ0ODQ0NThaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NzYwOlxcdFxcbjY3NjE6XFx0c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbjY3NjI6XFx0XFx0XFx0XFx0XFx0ICAgaW50IGFjY2Vzc19zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhY2Nlc3NfdHlwZSxcXG42NzYzOlxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgemVyb19zaXplX2FsbG93ZWQsXFxuNjc2NDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuNjc2NTpcXHR7XFxuNjc2NjpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuNjc2NzpcXHRcXHR1MzIgKm1heF9hY2Nlc3M7XFxuNjc2ODpcXHRcXG42NzY5OlxcdFxcdHN3aXRjaCAoYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSkpIHtcXG42NzcwOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVDpcXG42NzcxOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVF9NRVRBOlxcbjY3NzI6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX3BhY2tldF9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcXG42NzczOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHplcm9fc2l6ZV9hbGxvd2VkKTtcXG42Nzc0OlxcdFxcdGNhc2UgUFRSX1RPX01BUF9LRVk6XFxuNjc3NTpcXHRcXHRcXHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XFxuNjc3NjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGNhbm5vdCB3cml0ZSBpbnRvICVzXFxcXG5cXFwiLFxcbjY3Nzc6XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXFx1MDAzZXR5cGUpKTtcXG42Nzc4OlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjY3Nzk6XFx0XFx0XFx0fVxcbjY3ODA6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX21lbV9yZWdpb25fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgMCwgYWNjZXNzX3NpemUsXFxuNjc4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcmVnLVxcdTAwM2VtYXBfcHRyLVxcdTAwM2VrZXlfc2l6ZSwgZmFsc2UpO1xcbjY3ODI6XFx0XFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxcbjY3ODM6XFx0XFx0XFx0aWYgKGNoZWNrX21hcF9hY2Nlc3NfdHlwZShlbnYsIHJlZywgMCwgYWNjZXNzX3NpemUsIGFjY2Vzc190eXBlKSlcXG42Nzg0OlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjY3ODU6XFx0XFx0XFx0cmV0dXJuIGNoZWNrX21hcF9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCAwLCBhY2Nlc3Nfc2l6ZSxcXG42Nzg2OlxcdFxcdFxcdFxcdFxcdFxcdHplcm9fc2l6ZV9hbGxvd2VkLCBBQ0NFU1NfSEVMUEVSKTtcXG42Nzg3OlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG42Nzg4OlxcdFxcdFxcdGlmICh0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVxcdTAwM2V0eXBlKSkge1xcbjY3ODk6XFx0XFx0XFx0XFx0aWYgKGFjY2Vzc190eXBlID09IEJQRl9XUklURSkge1xcbjY3OTA6XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBjYW5ub3Qgd3JpdGUgaW50byAlc1xcXFxuXFxcIixcXG42NzkxOlxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVxcdTAwM2V0eXBlKSk7XFxuNjc5MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG42NzkzOlxcdFxcdFxcdFxcdH1cXG42Nzk0OlxcdFxcdFxcdH1cXG42Nzk1OlxcdFxcdFxcdHJldHVybiBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIDAsXFxuNjc5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYWNjZXNzX3NpemUsIHJlZy1cXHUwMDNlbWVtX3NpemUsXFxuNjc5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgemVyb19zaXplX2FsbG93ZWQpO1xcbjY3OTg6XFx0XFx0Y2FzZSBQVFJfVE9fQlVGOlxcbjY3OTk6XFx0XFx0XFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXFx1MDAzZXR5cGUpKSB7XFxuNjgwMDpcXHRcXHRcXHRcXHRpZiAoYWNjZXNzX3R5cGUgPT0gQlBGX1dSSVRFKSB7XFxuNjgwMTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGNhbm5vdCB3cml0ZSBpbnRvICVzXFxcXG5cXFwiLFxcbjY4MDI6XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXFx1MDAzZXR5cGUpKTtcXG42ODAzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjY4MDQ6XFx0XFx0XFx0XFx0fVxcbjY4MDU6XFx0XFxuNjgwNjpcXHRcXHRcXHRcXHRtYXhfYWNjZXNzID0gXFx1MDAyNmVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfcmRvbmx5X2FjY2VzcztcXG42ODA3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNjgwODpcXHRcXHRcXHRcXHRtYXhfYWNjZXNzID0gXFx1MDAyNmVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VtYXhfcmR3cl9hY2Nlc3M7XFxuNjgwOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE5OjE4LjI0NTMwNDE2OFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM0MDg2MzA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgQnVmZmVyIEFjY2VzcyBDaGVja3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzYCBzcGVjaWZpY2FsbHkgdXNlcyBgY2hlY2tfYnVmZmVyX2FjY2Vzc2Agd2hlbiBkZWFsaW5nIHdpdGggYFBUUl9UT19CVUZgLiBTbywgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgIGlzLCBhdCBpdHMgY29yZSwgZGVzaWduZWQgZm9yIGhhbmRsaW5nIGBQVFJfVE9fQlVGYCBhY2Nlc3Nlcy4gU2ltaWxhcmx5LCBgY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc2AgaXMgY2xlYXJseSB0YXJnZXRlZCBmb3IgYFBUUl9UT19UUF9CVUZGRVJgLiBJbnRlcmVzdGluZ2x5LCBib3RoIHRoZXNlIGZ1bmN0aW9ucyB1bHRpbWF0ZWx5IHJlbHkgb24gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuXG5cblRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgX19jaGVja19idWZmZXJfYWNjZXNzYCwgYGNoZWNrX3RwX2J1ZmZlcl9hY2Nlc3NgLCBhbmQgYGNoZWNrX2J1ZmZlcl9hY2Nlc3NgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBidWZmZXIgYWNjZXNzIGNoZWNrcy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0VWRU5UU2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBgQ09ORklHX1RSQUNJTkdgIGlzIGFsc28gbmVjZXNzYXJ5LiBgQ09ORklHX0JQRl9FVkVOVFNgIHVzdWFsbHkgZGVwZW5kcyBvbiBgQ09ORklHX1RSQUNJTkdgLCBidXQgSSBjYW4ganVzdCBsaXN0IGBCUEZfRVZFTlRTYCBmb3Igbm93LiBMZXQgbWUgY29uc3VsdCBga2VybmVsL3RyYWNlL0tjb25maWdgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBgQlBGX0VWRU5UU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTk6MzYuNTg2MTY5ODAxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjI0MTM3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctODU0LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTk6MzYuOTA4NTg4MDI5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODE0NTIzMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBWZXJpZmllciBCb3VuZHMgQ2hlY2sgQnlwYXNzKipcblxuT2theSwgc28gYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGl0J3MgY2xlYXIgdGhhdCBmb2N1c2luZyBvbiBgQlBGX0VWRU5UU2AgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIHRoZSBjb25maWd1cmF0aW9uLiBMZXQgbWUgc3VtbWFyaXplIG15IHRoaW5raW5nIGhlcmUuIFdlJ3ZlIGdvdCBhIGNyaXRpY2FsIGJvdW5kcyBjaGVja2luZyBieXBhc3MgZml4IGluIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBuZWVkcyB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5UaGUgaGlnaC1sZXZlbCBzdW1tYXJ5IGlzOlxuKiAgIFdlJ3JlIGRlZmluaXRlbHkgZnV6emluZyB0aGlzLCBzbyBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuXG4qICAgVGhlIHByaW1hcnkgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdGFyZ2V0IHdpdGggb3VyIGZ1enppbmcgZWZmb3J0cywgYW5kIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLCBhcmU6XG4gICAgKiAgIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgXG4gICAgKiAgIGBjaGVja190cF9idWZmZXJfYWNjZXNzYFxuICAgICogICBgY2hlY2tfYnVmZmVyX2FjY2Vzc2BcbiogICBUaGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBkdXJpbmcgZnV6emluZyBhcmU6XG4gICAgKiAgIGBCUEZfU1lTQ0FMTGBcbiAgICAqICAgYEJQRl9FVkVOVFNgXG5cblRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBhIGJvdW5kcyBjaGVja2luZyBieXBhc3Mgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSB2dWxuZXJhYmlsaXR5IGFsbG93cyBuZWdhdGl2ZSB2YXJpYWJsZSBvZmZzZXRzIHRvIGJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIHRoZSBpbnRlbmRlZCBidWZmZXIgYm91bmRhcmllcywgYWZmZWN0aW5nIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgcGF0Y2ggaXRzZWxmIGltcGxlbWVudHMgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3Mgd2l0aGluIGBfX2NoZWNrX2J1ZmZlcl9hY2Nlc3NgLCB3aGljaCBpcyBhIGNvcmUgdmVyaWZpZXIgZnVuY3Rpb24uIFRoaXMgY2FsbHMgZm9yIGZ1enppbmcgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIG9yIHNpbWlsYXIgYnlwYXNzZXMuXG5cbkkgZG91YmxlLWNoZWNrZWQgdG8gY29uZmlybSB0aGF0IHRoZSBsaXN0ZWQgZnVuY3Rpb25zIHdlcmUgdGhlIG9ubHkgb25lcyB0aGF0IHdlcmUgbW9kaWZpZWQsIGFuZCB0aGF0J3MgY29ycmVjdDogYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AsIGBjaGVja190cF9idWZmZXJfYWNjZXNzYCwgYW5kIGBjaGVja19idWZmZXJfYWNjZXNzYCB3ZXJlIGFsbCBpbXBhY3RlZC5cblxuVGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBhbmQgZG9jdW1lbnQgb3VyIHBsYW5uZWQgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MTgsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE5OjU2LjcyMzExNDc0NloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzE5NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfYnVmZmVyX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hlY2tfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfdHBfYnVmZmVyX2FjY2Vzc1wiLFxuICAgIFwiY2hlY2tfYnVmZmVyX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGNoZWNraW5nIGJ5cGFzcyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIG5lZ2F0aXZlIHZhcmlhYmxlIG9mZnNldHMgY291bGQgYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgZm9yIHRyYWNlcG9pbnQgYnVmZmVycyBhbmQgb3RoZXIgYnVmZmVyIHR5cGVzLiBUaGUgY2hhbmdlcyBhZGQgb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIG9mZnNldCBjaGVja3MgaW4gYF9fY2hlY2tfYnVmZmVyX2FjY2Vzc2AuIFRoaXMgaXMgYSBjb3JlIHZlcmlmaWVyIHNlY3VyaXR5IGZpeCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3Igc2ltaWxhciBieXBhc3NlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[1] Phase: Succeeded StartedAt: 2026-07-07 13:20:08 +0000 UTC FinishedAt: 2026-07-07 13:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 13:20:08 +0000 UTC FinishedAt: 2026-07-07 13:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2] Phase: Succeeded StartedAt: 2026-07-07 13:20:08 +0000 UTC FinishedAt: 2026-07-07 17:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 13:20:08 +0000 UTC FinishedAt: 2026-07-07 17:49:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 13:20:08 +0000 UTC FinishedAt: 2026-07-07 13:20:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 13:20:08 +0000 UTC FinishedAt: 2026-07-07 13:20:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpvnvz/series-workflowpvnvz-convert-artifact-2053839052/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 13:20:18 +0000 UTC FinishedAt: 2026-07-07 13:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 13:20:18 +0000 UTC FinishedAt: 2026-07-07 13:50:04 +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:*f38103f7-2c78-4fd1-940c-6eba0b5154cb,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-workflowpvnvz/series-workflowpvnvz-convert-artifact-2053839052/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": "8adaa11e-16fe-4768-9d1a-c7d9c276fbee", "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-workflowpvnvz/series-workflowpvnvz-build-action-1882789626/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 13:20:18 +0000 UTC FinishedAt: 2026-07-07 13:49:54 +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:*f38103f7-2c78-4fd1-940c-6eba0b5154cb,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-workflowpvnvz/series-workflowpvnvz-convert-artifact-2053839052/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": "8adaa11e-16fe-4768-9d1a-c7d9c276fbee", "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-workflowpvnvz/series-workflowpvnvz-build-action-1882789626/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 13:50:04 +0000 UTC FinishedAt: 2026-07-07 13:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 13:50:04 +0000 UTC FinishedAt: 2026-07-07 13:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 13:50:04 +0000 UTC FinishedAt: 2026-07-07 13:50:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 13:50:04 +0000 UTC FinishedAt: 2026-07-07 13:50:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpvnvz/series-workflowpvnvz-convert-artifact-262870283/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 13:50:25 +0000 UTC FinishedAt: 2026-07-07 13:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 13:50:25 +0000 UTC FinishedAt: 2026-07-07 13:52:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8adaa11e-16fe-4768-9d1a-c7d9c276fbee,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-workflowpvnvz/series-workflowpvnvz-build-action-1882789626/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-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 13:52:39 +0000 UTC FinishedAt: 2026-07-07 13:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 13:52:39 +0000 UTC FinishedAt: 2026-07-07 13:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 13:52:39 +0000 UTC FinishedAt: 2026-07-07 14:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 13:52:39 +0000 UTC FinishedAt: 2026-07-07 14:45:34 +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:*f38103f7-2c78-4fd1-940c-6eba0b5154cb,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-workflowpvnvz/series-workflowpvnvz-convert-artifact-262870283/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": "987f072b-1005-48c3-972c-8c700b0e1eb2", "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-workflowpvnvz/series-workflowpvnvz-build-action-2932192175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 13:52:39 +0000 UTC FinishedAt: 2026-07-07 14:45:10 +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:*f38103f7-2c78-4fd1-940c-6eba0b5154cb,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-workflowpvnvz/series-workflowpvnvz-convert-artifact-262870283/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": "987f072b-1005-48c3-972c-8c700b0e1eb2", "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-workflowpvnvz/series-workflowpvnvz-build-action-2932192175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 14:45:34 +0000 UTC FinishedAt: 2026-07-07 14:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 14:45:34 +0000 UTC FinishedAt: 2026-07-07 14:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 14:45:34 +0000 UTC FinishedAt: 2026-07-07 14:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 14:45:34 +0000 UTC FinishedAt: 2026-07-07 14:47:15 +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:*987f072b-1005-48c3-972c-8c700b0e1eb2,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-workflowpvnvz/series-workflowpvnvz-build-action-2932192175/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-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 14:47:25 +0000 UTC FinishedAt: 2026-07-07 17:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 14:47:25 +0000 UTC FinishedAt: 2026-07-07 17:49:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"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:*8adaa11e-16fe-4768-9d1a-c7d9c276fbee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*987f072b-1005-48c3-972c-8c700b0e1eb2,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-workflowpvnvz/series-workflowpvnvz-build-action-1882789626/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-workflowpvnvz/series-workflowpvnvz-build-action-2932192175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 14:47:25 +0000 UTC FinishedAt: 2026-07-07 14:47:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 14:47:25 +0000 UTC FinishedAt: 2026-07-07 14:47:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"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-workflowpvnvz/series-workflowpvnvz-convert-artifact-588091300/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 14:47:25 +0000 UTC FinishedAt: 2026-07-07 14:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 14:47:25 +0000 UTC FinishedAt: 2026-07-07 14:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 14:47:25 +0000 UTC FinishedAt: 2026-07-07 14:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 14:47:35 +0000 UTC FinishedAt: 2026-07-07 17:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpvnvz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__check_buffer_access","check_tp_buffer_access","check_buffer_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"12091470c6b4c1c14b2de12dcbae2ada6cb6d20b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS"],"series_id":"4f1e6afd-19a1-45b0-860d-375aa90d3bf9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 14:47:35 +0000 UTC FinishedAt: 2026-07-07 17:48:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8adaa11e-16fe-4768-9d1a-c7d9c276fbee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*987f072b-1005-48c3-972c-8c700b0e1eb2,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-workflowpvnvz/series-workflowpvnvz-build-action-1882789626/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-workflowpvnvz/series-workflowpvnvz-build-action-2932192175/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-workflowpvnvz/series-workflowpvnvz-convert-artifact-588091300/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,}