Name: series-workflowzt98c Phase: Running StartedAt: 2026-07-08 10:18:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[0] Phase: Succeeded StartedAt: 2026-07-08 10:18:22 +0000 UTC FinishedAt: 2026-07-08 10:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 10:18:22 +0000 UTC FinishedAt: 2026-07-08 10:39:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "IPV6_FOU", "IPV6_FOU_TUNNEL", "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IPGRE_BROADCAST", "IPV6_GRE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "IPV6_FOU", "IPV6_FOU_TUNNEL", "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IPGRE_BROADCAST", "IPV6_GRE" ], "series_id": "3b495335-fc34-4368-954b-95670cc744d9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__udp4_lib_mcast_deliver", "__udp6_lib_mcast_deliver" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRV9CUk9BRENBU1QmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXImIzM0OywKICAgICYjMzQ7X191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIFVEUCBtdWx0aWNhc3QgcGFja2V0cyBlbmNhcHN1bGF0ZWQgaW4gRk9VIHdlcmUgbm90IHByb3Blcmx5IHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIGJ1dCB3ZXJlIGluc3RlYWQgY29uc3VtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIChVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5KS4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJlc3VibWlzc2lvbiBwYXRoIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDJjNDNmNTA1Yjk3YWY0ZTJlZjcwMzk5YjMxNmUwZTM0MTFiNTk4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTA6MzU6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuY1xuaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcC5jXG5AQCAtMjQ3Niw2ICYjNDM7MjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90O1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRib29sIHVzZV9oYXNoMjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aGFzaDJfYW55ID0gMDtcbiBcdGhhc2gyID0gMDtcbkBAIC0yNTIwLDggJiM0MzsyNTIxLDkgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKSBcdTAwM2UgMClcbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0cmV0ID0gdWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gLXJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuY1xuaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtOTQ5LDYgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGhhc2gyX2FueSA9IDA7XG4gXHRoYXNoMiA9IDA7XG5AQCAtOTk4LDggJiM0Mzs5OTksOSBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRpZiAoZmlyc3QpIHtcbi1cdFx0aWYgKHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uN2U5YWU5MzdjZmZhN2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTM5LDYgJiM0MzszOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXG4gXHRmaWJfdGVzdHMuc2ggXFxcbiBcdGZpbl9hY2tfbGF0LnNoIFxcXG4mIzQzO1x0Zm91X21jYXN0X2VuY2FwLnNoIFxcXG4gXHRmcV9iYW5kX3BrdGxpbWl0LnNoIFxcXG4gXHRncmVfZ3NvLnNoIFxcXG4gXHRncmVfaXB2Nl9sbGFkZHIuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ1xuaW5kZXggZTFjZTM1YzJhYmJlZjMuLjk2ZmZmY2E2NTQ3YzlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ1xuQEAgLTM4LDYgJiM0MzszOCw4IEBAIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW1cbiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tXG4gQ09ORklHX0lQX1NDVFA9bVxuIENPTkZJR19JUFY2PXlcbiYjNDM7Q09ORklHX0lQVjZfRk9VPW1cbiYjNDM7Q09ORklHX0lQVjZfRk9VX1RVTk5FTD1tXG4gQ09ORklHX0lQVjZfR1JFPW1cbiBDT05GSUdfSVBWNl9JTEE9bVxuIENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MDIxMGQzOWZiYTMzZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxuQEAgLTAsMCAmIzQzOzEsMTcyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcbiYjNDM7IyB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC5cbiYjNDM7I1xuJiM0MzsjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXG4mIzQzOyMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0XG4mIzQzOyMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxuJiM0MzsjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXG4mIzQzOyMgdHVubmVsIHdpdGggYSBtdWx0aWNhc3QgcmVtb3RlIGFkZHJlc3MgYW5kIHNlbmRpbmcgcGluZyB0aHJvdWdoIGl0LlxuJiM0MzsjXG4mIzQzOyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcbiYjNDM7IyB0aGUgdW5pY2FzdCBwYXRoICh1ZHBbNl1fdW5pY2FzdF9yY3Zfc2tiKSwgc28gd2UgZGlzYWJsZSBpdCB0byBmb3JjZVxuJiM0MzsjIHBhY2tldHMgdGhyb3VnaCB0aGUgbXVsdGljYXN0IGRlbGl2ZXJ5IGZ1bmN0aW9uLlxuJiM0MztcbiYjNDM7c291cmNlIGxpYi5zaFxuJiM0MztcbiYjNDM7TlNFTkRFUj1cJiMzNDtcJiMzNDtcbiYjNDM7TlJFQ1Y9XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MztGT1VfUE9SVDQ9NDc5N1xuJiM0MztGT1VfUE9SVDY9NDc5OFxuJiM0MztNQ0FTVDQ9MjM5LjAuMC4xXG4mIzQzO01DQVNUNj1mZjBlOjoxXG4mIzQzO1xuJiM0MztUVU40X1M9MTkyLjE2OC45OS4xXG4mIzQzO1RVTjRfUj0xOTIuMTY4Ljk5LjJcbiYjNDM7VFVONl9TPTIwMDE6ZGI4Ojk5OjoxXG4mIzQzO1RVTjZfUj0yMDAxOmRiODo5OTo6MlxuJiM0MztcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRjbGVhbnVwX2FsbF9uc1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7c2V0dXBfY29tbW9uKCkge1xuJiM0MztcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcbiYjNDM7XG4mIzQzO1x0IyBDcmVhdGUgdmV0aCBwYWlyIGRpcmVjdGx5IGluc2lkZSBuYW1lc3BhY2VzIHRvIGF2b2lkIG5hbWVcbiYjNDM7XHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cbiYjNDM7XHRpcCBsaW5rIGFkZCB2ZXRoX3MgbmV0bnMgXCYjMzQ7JE5TRU5ERVJcJiMzNDsgdHlwZSB2ZXRoIFxcXG4mIzQzO1x0XHRwZWVyIG5hbWUgdmV0aF9yIG5ldG5zIFwmIzM0OyROUkVDVlwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBsaW5rIHNldCB2ZXRoX3MgdXBcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzZXQgdmV0aF9yIHVwXG4mIzQzO1xuJiM0MztcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyROUkVDVlwmIzM0OyBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXBfaXB2NCgpIHtcbiYjNDM7XHQjIElQdjQgRk9VIChDT05GSUdfTkVUX0ZPVSkgaXMgYnVpbHQgaW4gb24ga2VybmVscyBjb25maWd1cmVkIGZvclxuJiM0MztcdCMgdGhlc2UgdGVzdHMsIHNvIG5vIG1vZHVsZSBsb2FkIGlzIG5lZWRlZCBoZXJlLlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB2ZXRoX3NcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgMTAuMC4wLjIvMjQgZGV2IHZldGhfclxuJiM0MztcbiYjNDM7XHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRNQ0FTVDQvMzJcJiMzNDsgZGV2IHZldGhfciBhdXRvam9pblxuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfc1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfclxuJiM0MztcbiYjNDM7XHQjIFNlbmRlcjogR1JFVEFQIHdpdGggRk9VIGVuY2FwIChubyBGT1UgbGlzdGVuZXIgbmVlZGVkIG9uIFRYIHNpZGUpXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNFwmIzM0OyBsb2NhbCAxMC4wLjAuMSBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDRcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IFwmIzM0OyRNQ0FTVDRcJiMzNDtcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBsaW5rIHNldCBlb3VkcDQgdXBcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBhZGRyIGFkZCBcJiMzNDskVFVONF9TLzI0XCYjMzQ7IGRldiBlb3VkcDRcbiYjNDM7XG4mIzQzO1x0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICYjNDM7IEdSRVRBUFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5SRUNWXCYjMzQ7IGlwIGZvdSBhZGQgcG9ydCBcJiMzNDskRk9VX1BPUlQ0XCYjMzQ7IGlwcHJvdG8gNDdcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNFwmIzM0OyBsb2NhbCAxMC4wLjAuMiBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDRcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IFwmIzM0OyRNQ0FTVDRcJiMzNDtcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzZXQgZW91ZHA0IHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU40X1IvMjRcJiMzNDsgZGV2IGVvdWRwNFxuJiM0MztcbiYjNDM7XHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcbiYjNDM7XHQjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuXG4mIzQzO1x0bG9jYWwgcmVjdl9tYWNcbiYjNDM7XHRyZWN2X21hYz0kKGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIHNob3cgZW91ZHA0IHwgYXdrICYjMzk7L2V0aGVyL3twcmludCAkMn0mIzM5OylcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBuZWlnaCBhZGQgXCYjMzQ7JFRVTjRfUlwmIzM0OyBsbGFkZHIgXCYjMzQ7JHJlY3ZfbWFjXCYjMzQ7IGRldiBlb3VkcDRcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXBfaXB2NigpIHtcbiYjNDM7XHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IG9yIHRoZSBmb3U2IG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLlxuJiM0MztcdFsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRtb2Rwcm9iZSAtcSBmb3U2IHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIDIwMDE6ZGI4OjoxLzY0IGRldiB2ZXRoX3Mgbm9kYWRcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjIvNjQgZGV2IHZldGhfciBub2RhZFxuJiM0MztcbiYjNDM7XHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRNQ0FTVDYvMTI4XCYjMzQ7IGRldiB2ZXRoX3IgYXV0b2pvaW5cbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcbiYjNDM7XG4mIzQzO1x0IyBTZW5kZXI6IGlwNmdyZXRhcCB3aXRoIEZPVSBlbmNhcFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcXFxuJiM0MztcdFx0cmVtb3RlIFwmIzM0OyRNQ0FTVDZcJiMzNDsgbG9jYWwgMjAwMTpkYjg6OjEgXFxcbiYjNDM7XHRcdGVuY2FwIGZvdSBlbmNhcC1zcG9ydCBcJiMzNDskRk9VX1BPUlQ2XCYjMzQ7IGVuY2FwLWRwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgXFxcbiYjNDM7XHRcdGtleSA0MlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGxpbmsgc2V0IGVvdWRwNiB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU42X1MvNjRcJiMzNDsgZGV2IGVvdWRwNiBub2RhZFxuJiM0MztcbiYjNDM7XHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICYjNDM7IGlwNmdyZXRhcFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5SRUNWXCYjMzQ7IGlwIGZvdSBhZGQgcG9ydCBcJiMzNDskRk9VX1BPUlQ2XCYjMzQ7IGlwcHJvdG8gNDcgLTZcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNlwmIzM0OyBsb2NhbCAyMDAxOmRiODo6MiBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNlwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IDQyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2V0IGVvdWRwNiB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBhZGRyIGFkZCBcJiMzNDskVFVONl9SLzY0XCYjMzQ7IGRldiBlb3VkcDYgbm9kYWRcbiYjNDM7XG4mIzQzO1x0IyBTdGF0aWMgbmVpZ2ggb24gc2VuZGVyOiBuZWlnaGJvciBkaXNjb3ZlcnkgY2Fubm90IHRyYXZlcnNlIHRoZVxuJiM0MztcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbiYjNDM7XHRsb2NhbCByZWN2X21hY1xuJiM0MztcdHJlY3ZfbWFjPSQoaXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJiMzOTsvZXRoZXIve3ByaW50ICQyfSYjMzk7KVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IG5laWdoIGFkZCBcJiMzNDskVFVONl9SXCYjMzQ7IGxsYWRkciBcJiMzNDskcmVjdl9tYWNcJiMzNDsgZGV2IGVvdWRwNlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztnZXRfcnhfcGFja2V0cygpIHtcbiYjNDM7XHRsb2NhbCBkZXY9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IC1zIGxpbmsgc2hvdyBcJiMzNDskZGV2XCYjMzQ7IHwgYXdrICYjMzk7L1JYOi97Z2V0bGluZTsgcHJpbnQgJDJ9JiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cnVuX3BpbmdfdGVzdCgpIHtcbiYjNDM7XHRsb2NhbCBmYW1pbHk9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBkc3Q9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCBuYW1lPVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1x0bG9jYWwgY291bnQ9MTAwXG4mIzQzO1x0bG9jYWwgcnhfYmVmb3JlIHJ4X2FmdGVyIHJ4X2RlbHRhXG4mIzQzO1xuJiM0MztcdCMgV2FybXVwOiBsZXQgYW55IGluaXRpYWwgYnJvYWRjYXN0L05EIHRyYWZmaWMgc2V0dGxlXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlNFTkRFUlwmIzM0OyBwaW5nIFwmIzM0OyRmYW1pbHlcJiMzNDsgLWMgMSAtVyAxIFwmIzM0OyRkc3RcJiMzNDsgXFxcbiYjNDM7XHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdHNsZWVwIDFcbiYjNDM7XG4mIzQzO1x0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXCYjMzQ7JGRldlwmIzM0OylcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyROU0VOREVSXCYjMzQ7IHBpbmcgXCYjMzQ7JGZhbWlseVwmIzM0OyAtaSAwLjAxIC1jICRjb3VudCAtVyAxIFwmIzM0OyRkc3RcJiMzNDsgXFxcbiYjNDM7XHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdHNsZWVwIDFcbiYjNDM7XHRyeF9hZnRlcj0kKGdldF9yeF9wYWNrZXRzIFwmIzM0OyRkZXZcJiMzNDspXG4mIzQzO1xuJiM0MztcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDskcnhfZGVsdGFcJiMzNDsgLWdlIFwmIzM0OyRjb3VudFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRSRVQ9JGtzZnRfcGFzc1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdFJFVD0ka3NmdF9mYWlsXG4mIzQzO1x0ZmlcbiYjNDM7XHRsb2dfdGVzdCBcJiMzNDskbmFtZSAocmVjZWl2ZWQgJHJ4X2RlbHRhLyRjb3VudClcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXBfY29tbW9uXG4mIzQzO3NldHVwX2lwdjRcbiYjNDM7cnVuX3BpbmdfdGVzdCAtNCBlb3VkcDQgXCYjMzQ7JFRVTjRfUlwmIzM0OyBcJiMzNDtGT1UvR1JFVEFQIElQdjQgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCYjMzQ7XG4mIzQzO1xuJiM0MztpZiBzZXR1cF9pcHY2OyB0aGVuXG4mIzQzO1x0cnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgXCYjMzQ7JFRVTjZfUlwmIzM0OyBcJiMzNDtGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRsb2dfdGVzdF9za2lwIFwmIzM0O0ZPVS9pcDZncmV0YXAgSVB2NiBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXRcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2V4aXQgXCYjMzQ7JEVYSVRfU1RBVFVTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7SVBWNl9GT1UmIzM0OywKICAgICYjMzQ7SVBWNl9GT1VfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0JST0FEQ0FTVCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZSBub3QgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgYnV0IHdlcmUgaW5zdGVhZCBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgKFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkpLiBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmVzdWJtaXNzaW9uIHBhdGggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyYzQzZjUwNWI5N2FmNGUyZWY3MDM5OWIzMTZlMGUzNDExYjU5ODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDEwOjM1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCA1OTI0OGE1OTM1OGNhNS4uZDNkZGNiZmM4NDc3MWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcC5jCkBAIC0yNDc2LDYgJiM0MzsyNDc2LDcgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90OwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCWJvb2wgdXNlX2hhc2gyOwomIzQzOwlpbnQgcmV0OwogCiAJaGFzaDJfYW55ID0gMDsKIAloYXNoMiA9IDA7CkBAIC0yNTIwLDggJiM0MzsyNTIxLDkgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0KIAogCWlmIChmaXJzdCkgewotCQlpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgJmd0OyAwKQotCQkJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJCXJldCA9IHVkcF9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpOwomIzQzOwkJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIC1yZXQ7CiAJfSBlbHNlIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCV9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSUdOT1JFRE1VTFRJKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtOTQ5LDYgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJYm9vbCB1c2VfaGFzaDI7CiYjNDM7CWludCByZXQ7CiAKIAloYXNoMl9hbnkgPSAwOwogCWhhc2gyID0gMDsKQEAgLTk5OCw4ICYjNDM7OTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0KIAogCWlmIChmaXJzdCkgewotCQlpZiAodWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKSAmZ3Q7IDApCi0JCQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJcmV0ID0gdWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCV9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCkBAIC0zOSw2ICYjNDM7MzksNyBAQCBURVNUX1BST0dTIDo9IFwKIAlmaWJfcnVsZV90ZXN0cy5zaCBcCiAJZmliX3Rlc3RzLnNoIFwKIAlmaW5fYWNrX2xhdC5zaCBcCiYjNDM7CWZvdV9tY2FzdF9lbmNhcC5zaCBcCiAJZnFfYmFuZF9wa3RsaW1pdC5zaCBcCiAJZ3JlX2dzby5zaCBcCiAJZ3JlX2lwdjZfbGxhZGRyLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnCmluZGV4IGUxY2UzNWMyYWJiZWYzLi45NmZmZmNhNjU0N2M5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnCkBAIC0zOCw2ICYjNDM7MzgsOCBAQCBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfU0NUUD1tCiBDT05GSUdfSVBWNj15CiYjNDM7Q09ORklHX0lQVjZfRk9VPW0KJiM0MztDT05GSUdfSVBWNl9GT1VfVFVOTkVMPW0KIENPTkZJR19JUFY2X0dSRT1tCiBDT05GSUdfSVBWNl9JTEE9bQogQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcwMjEwZDM5ZmJhMzNkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaApAQCAtMCwwICYjNDM7MSwxNzIgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IHRoYXQgVURQIGVuY2Fwc3VsYXRpb24gKEZPVSkgY29ycmVjdGx5IGhhbmRsZXMgcGFja2V0IHJlc3VibWl0CiYjNDM7IyB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC4KJiM0MzsjCiYjNDM7IyBXaGVuIGEgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXQgYXJyaXZlcyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQLAomIzQzOyMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0CiYjNDM7IyBpdCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSByYXRoZXIgdGhhbiBjb25zdW1pbmcgaXQuCiYjNDM7IyBUaGlzIHRlc3QgdmVyaWZpZXMgYm90aCBJUHY0IGFuZCBJUHY2IHBhdGhzIGJ5IGNyZWF0aW5nIGEgRk9VL0dSRVRBUAomIzQzOyMgdHVubmVsIHdpdGggYSBtdWx0aWNhc3QgcmVtb3RlIGFkZHJlc3MgYW5kIHNlbmRpbmcgcGluZyB0aHJvdWdoIGl0LgomIzQzOyMKJiM0MzsjIFRoZSBlYXJseSBkZW11eCBvcHRpbWl6YXRpb24gY2FuIG1hc2sgdGhpcyBpc3N1ZSBieSByb3V0aW5nIHBhY2tldHMgdmlhCiYjNDM7IyB0aGUgdW5pY2FzdCBwYXRoICh1ZHBbNl1fdW5pY2FzdF9yY3Zfc2tiKSwgc28gd2UgZGlzYWJsZSBpdCB0byBmb3JjZQomIzQzOyMgcGFja2V0cyB0aHJvdWdoIHRoZSBtdWx0aWNhc3QgZGVsaXZlcnkgZnVuY3Rpb24uCiYjNDM7CiYjNDM7c291cmNlIGxpYi5zaAomIzQzOwomIzQzO05TRU5ERVI9JiMzNDsmIzM0OwomIzQzO05SRUNWPSYjMzQ7JiMzNDsKJiM0MzsKJiM0MztGT1VfUE9SVDQ9NDc5NwomIzQzO0ZPVV9QT1JUNj00Nzk4CiYjNDM7TUNBU1Q0PTIzOS4wLjAuMQomIzQzO01DQVNUNj1mZjBlOjoxCiYjNDM7CiYjNDM7VFVONF9TPTE5Mi4xNjguOTkuMQomIzQzO1RVTjRfUj0xOTIuMTY4Ljk5LjIKJiM0MztUVU42X1M9MjAwMTpkYjg6OTk6OjEKJiM0MztUVU42X1I9MjAwMTpkYjg6OTk6OjIKJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOwljbGVhbnVwX2FsbF9ucwomIzQzO30KJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO3NldHVwX2NvbW1vbigpIHsKJiM0MzsJc2V0dXBfbnMgTlNFTkRFUiBOUkVDVgomIzQzOwomIzQzOwkjIENyZWF0ZSB2ZXRoIHBhaXIgZGlyZWN0bHkgaW5zaWRlIG5hbWVzcGFjZXMgdG8gYXZvaWQgbmFtZQomIzQzOwkjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS4KJiM0MzsJaXAgbGluayBhZGQgdmV0aF9zIG5ldG5zICYjMzQ7JE5TRU5ERVImIzM0OyB0eXBlIHZldGggXAomIzQzOwkJcGVlciBuYW1lIHZldGhfciBuZXRucyAmIzM0OyROUkVDViYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBsaW5rIHNldCB2ZXRoX3MgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNldCB2ZXRoX3IgdXAKJiM0MzsKJiM0MzsJIyBTYW1lIHN5c2N0bCBjb250cm9scyBlYXJseSBkZW11eCBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LgomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JE5SRUNWJiMzNDsgc3lzY3RsIC13cSBuZXQuaXB2NC5pcF9lYXJseV9kZW11eD0wCiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2lwdjQoKSB7CiYjNDM7CSMgSVB2NCBGT1UgKENPTkZJR19ORVRfRk9VKSBpcyBidWlsdCBpbiBvbiBrZXJuZWxzIGNvbmZpZ3VyZWQgZm9yCiYjNDM7CSMgdGhlc2UgdGVzdHMsIHNvIG5vIG1vZHVsZSBsb2FkIGlzIG5lZWRlZCBoZXJlLgomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgYWRkciBhZGQgMTAuMC4wLjEvMjQgZGV2IHZldGhfcwomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3IKJiM0MzsKJiM0MzsJIyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlcgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkICYjMzQ7JE1DQVNUNC8zMiYjMzQ7IGRldiB2ZXRoX3IgYXV0b2pvaW4KJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgcm91dGUgYWRkIDIzOS4wLjAuMC84IGRldiB2ZXRoX3IKJiM0MzsKJiM0MzsJIyBTZW5kZXI6IEdSRVRBUCB3aXRoIEZPVSBlbmNhcCAobm8gRk9VIGxpc3RlbmVyIG5lZWRlZCBvbiBUWCBzaWRlKQomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDQmIzM0OyBsb2NhbCAxMC4wLjAuMSBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgXAomIzQzOwkJa2V5ICYjMzQ7JE1DQVNUNCYjMzQ7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBsaW5rIHNldCBlb3VkcDQgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGFkZHIgYWRkICYjMzQ7JFRVTjRfUy8yNCYjMzQ7IGRldiBlb3VkcDQKJiM0MzsKJiM0MzsJIyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICYjNDM7IEdSRVRBUAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JE5SRUNWJiMzNDsgaXAgZm91IGFkZCBwb3J0ICYjMzQ7JEZPVV9QT1JUNCYjMzQ7IGlwcHJvdG8gNDcKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXAomIzQzOwkJcmVtb3RlICYjMzQ7JE1DQVNUNCYjMzQ7IGxvY2FsIDEwLjAuMC4yIFwKJiM0MzsJCWVuY2FwIGZvdSBlbmNhcC1zcG9ydCAmIzM0OyRGT1VfUE9SVDQmIzM0OyBlbmNhcC1kcG9ydCAmIzM0OyRGT1VfUE9SVDQmIzM0OyBcCiYjNDM7CQlrZXkgJiMzNDskTUNBU1Q0JiMzNDsKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNldCBlb3VkcDQgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBhZGRyIGFkZCAmIzM0OyRUVU40X1IvMjQmIzM0OyBkZXYgZW91ZHA0CiYjNDM7CiYjNDM7CSMgU3RhdGljIG5laWdoIG9uIHNlbmRlcjogQVJQIHJlcGxpZXMgY2Fubm90IHRyYXZlcnNlIHRoZQomIzQzOwkjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuCiYjNDM7CWxvY2FsIHJlY3ZfbWFjCiYjNDM7CXJlY3ZfbWFjPSQoaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNob3cgZW91ZHA0IHwgYXdrICYjMzk7L2V0aGVyL3twcmludCAkMn0mIzM5OykKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IG5laWdoIGFkZCAmIzM0OyRUVU40X1ImIzM0OyBsbGFkZHIgJiMzNDskcmVjdl9tYWMmIzM0OyBkZXYgZW91ZHA0CiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2lwdjYoKSB7CiYjNDM7CSMgU2tpcCBjbGVhbmx5IGlmIElQdjYgb3IgdGhlIGZvdTYgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUuCiYjNDM7CVsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CW1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBhZGRyIGFkZCAyMDAxOmRiODo6MS82NCBkZXYgdmV0aF9zIG5vZGFkCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjIvNjQgZGV2IHZldGhfciBub2RhZAomIzQzOwomIzQzOwkjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgJiMzNDskTUNBU1Q2LzEyOCYjMzQ7IGRldiB2ZXRoX3IgYXV0b2pvaW4KJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IC02IHJvdXRlIGFkZCBmZjAwOjovOCBkZXYgdmV0aF9zCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3IKJiM0MzsKJiM0MzsJIyBTZW5kZXI6IGlwNmdyZXRhcCB3aXRoIEZPVSBlbmNhcAomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDYmIzM0OyBsb2NhbCAyMDAxOmRiODo6MSBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgXAomIzQzOwkJa2V5IDQyCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBsaW5rIHNldCBlb3VkcDYgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGFkZHIgYWRkICYjMzQ7JFRVTjZfUy82NCYjMzQ7IGRldiBlb3VkcDYgbm9kYWQKJiM0MzsKJiM0MzsJIyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyIChJUHY2KSAmIzQzOyBpcDZncmV0YXAKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUkVDViYjMzQ7IGlwIGZvdSBhZGQgcG9ydCAmIzM0OyRGT1VfUE9SVDYmIzM0OyBpcHByb3RvIDQ3IC02CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDYmIzM0OyBsb2NhbCAyMDAxOmRiODo6MiBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgXAomIzQzOwkJa2V5IDQyCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgJiMzNDskVFVONl9SLzY0JiMzNDsgZGV2IGVvdWRwNiBub2RhZAomIzQzOwomIzQzOwkjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlCiYjNDM7CSMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC4KJiM0MzsJbG9jYWwgcmVjdl9tYWMKJiM0MzsJcmVjdl9tYWM9JChpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJiMzOTsvZXRoZXIve3ByaW50ICQyfSYjMzk7KQomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbmVpZ2ggYWRkICYjMzQ7JFRVTjZfUiYjMzQ7IGxsYWRkciAmIzM0OyRyZWN2X21hYyYjMzQ7IGRldiBlb3VkcDYKJiM0Mzt9CiYjNDM7CiYjNDM7Z2V0X3J4X3BhY2tldHMoKSB7CiYjNDM7CWxvY2FsIGRldj0mIzM0OyQxJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyAtcyBsaW5rIHNob3cgJiMzNDskZGV2JiMzNDsgfCBhd2sgJiMzOTsvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0mIzM5OwomIzQzO30KJiM0MzsKJiM0MztydW5fcGluZ190ZXN0KCkgewomIzQzOwlsb2NhbCBmYW1pbHk9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZHN0PSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDQmIzM0OwomIzQzOwlsb2NhbCBjb3VudD0xMDAKJiM0MzsJbG9jYWwgcnhfYmVmb3JlIHJ4X2FmdGVyIHJ4X2RlbHRhCiYjNDM7CiYjNDM7CSMgV2FybXVwOiBsZXQgYW55IGluaXRpYWwgYnJvYWRjYXN0L05EIHRyYWZmaWMgc2V0dGxlCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlNFTkRFUiYjMzQ7IHBpbmcgJiMzNDskZmFtaWx5JiMzNDsgLWMgMSAtVyAxICYjMzQ7JGRzdCYjMzQ7IFwKJiM0MzsJCSZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJc2xlZXAgMQomIzQzOwomIzQzOwlyeF9iZWZvcmU9JChnZXRfcnhfcGFja2V0cyAmIzM0OyRkZXYmIzM0OykKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROU0VOREVSJiMzNDsgcGluZyAmIzM0OyRmYW1pbHkmIzM0OyAtaSAwLjAxIC1jICRjb3VudCAtVyAxICYjMzQ7JGRzdCYjMzQ7IFwKJiM0MzsJCSZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJc2xlZXAgMQomIzQzOwlyeF9hZnRlcj0kKGdldF9yeF9wYWNrZXRzICYjMzQ7JGRldiYjMzQ7KQomIzQzOwomIzQzOwlyeF9kZWx0YT0kKChyeF9hZnRlciAtIHJ4X2JlZm9yZSkpCiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskcnhfZGVsdGEmIzM0OyAtZ2UgJiMzNDskY291bnQmIzM0OyBdOyB0aGVuCiYjNDM7CQlSRVQ9JGtzZnRfcGFzcwomIzQzOwllbHNlCiYjNDM7CQlSRVQ9JGtzZnRfZmFpbAomIzQzOwlmaQomIzQzOwlsb2dfdGVzdCAmIzM0OyRuYW1lIChyZWNlaXZlZCAkcnhfZGVsdGEvJGNvdW50KSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2NvbW1vbgomIzQzO3NldHVwX2lwdjQKJiM0MztydW5fcGluZ190ZXN0IC00IGVvdWRwNCAmIzM0OyRUVU40X1ImIzM0OyAmIzM0O0ZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXQmIzM0OwomIzQzOwomIzQzO2lmIHNldHVwX2lwdjY7IHRoZW4KJiM0MzsJcnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgJiMzNDskVFVONl9SJiMzNDsgJiMzNDtGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0JiMzNDsKJiM0MztlbHNlCiYjNDM7CWxvZ190ZXN0X3NraXAgJiMzNDtGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2V4aXQgJiMzNDskRVhJVF9TVEFUVVMmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVEUCBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC91ZHAuY2AgYW5kIGBuZXQvaXB2Ni91ZHAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiAgRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbmQgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGljYXN0LgoKUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybmVkIGEgcG9zaXRpdmUgdmFsdWUgKGltcGx5aW5nIGFuIGVycm9yLCBJIGFzc3VtZSksIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHdvdWxkIGp1c3QgYGNvbnN1bWVfc2tiKHNrYilgLiBOb3csIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJldGAgdmFyaWFibGUgYW5kIGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUuIElmIGByZXRgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCAqcmV0dXJucyogYSBuZWdhdGVkIGByZXRgIChpbiBJUHY0KSBvciBqdXN0IGByZXRgIChpbiBJUHY2KS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nLgoKVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIHByb3BhZ2F0ZSBlcnJvciBjb25kaXRpb25zIGZyb20gdGhlIHF1ZXVpbmcgc3RhZ2UgdXAgdG8gdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBsYXllci4gSSYjMzk7bSBndWVzc2luZyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgc2lsZW50bHkgZHJvcHBpbmcgcGFja2V0cyBpbiBlcnJvciBjYXNlcywgYW5kIHRoaXMgcGF0Y2ggYWltcyB0byBtYWtlIHRoZSBlcnJvciBoYW5kbGluZyBtb3JlIGV4cGxpY2l0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHdlIHByb3BhZ2F0aW5nIHRoZXNlIGVycm9yIGNvZGVzPyAgV2hhdCBkbyB0aGVzZSBlcnJvciBjb2RlcyByZXByZXNlbnQ/IEl04oCZcyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGF0IHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYnV0IHdoYXRldmVyIHRoZXkgYXJlLCB0aGUgcGF0Y2ggaXMgY2xlYXJseSB0cnlpbmcgdG8gc2lnbmFsIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwgdGhhbiBhIHNpbXBsZSBkaXNjYXJkLgoKTGV0IG1lIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBhcmUgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyYjMzk7IHJldHVybiB2YWx1ZXMgYXJlIHVzZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYz0yNDQ4PWJvb2wgdWRwX3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjQ2NC0gKi9cbm5ldC9pcHY0L3VkcC5jOjI0NjU6c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdWRwLmMtMjQ2Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgdWRwaGRyICAqdWgsXG4tLVxubmV0L2lwdjQvdWRwLmM9MjU5MT1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI2NDktXHRpZiAocnQtXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpXG5uZXQvaXB2NC91ZHAuYzoyNjUwOlx0XHRyZXR1cm4gX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKG5ldCwgc2tiLCB1aCwgc2FkZHIsIGRhZGRyKTtcbm5ldC9pcHY0L3VkcC5jLTI2NTEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaC03LSMgV2hlbiBhIEZPVS1lbmNhcHN1bGF0ZWQgcGFja2V0IGFycml2ZXMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2g6ODojIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcigpIC8gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKCkgbXVzdCByZXN1Ym1pdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaC05LSMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGVjb2RpbmcgdGhlIFVEUCBSZWNlaXZlIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIGRvd24gdGhpcyBtdWx0aWNhc3QgZGVsaXZlcnkgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJldHVybiB2YWx1ZSBvZiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyBjcml0aWNhbCwgcmlnaHQ/IFRoYXQmIzM5O3Mgd2hhdCBgdWRwX3JjdmAgaXMgcGFzc2luZyBiYWNrLiBSaWdodCwgYHVkcF9yY3ZgIGlzIHRoZSBJUHY0IFVEUCByZWNlaXZlIGhhbmRsZXIsIHNvIGl0IG1ha2VzIHNlbnNlIGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBIb2xkIG9uLi4uIEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGtpbmQgb2YgdHlwZSBgdWRwX3JjdmAgcmV0dXJucy4uLiBJdCByZXR1cm5zIGFuIGBpbnRgLiBPa2F5LCBnb3QgaXQuCgpUaW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZzogSSBuZWVkIHRvIG9wZW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCBgdWRwX3JjdmAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIEkmIzM5O2xsIHNlZSBob3cgdGhhdCByZXR1cm4gdmFsdWUgaXMgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZsb3cgaXMgZXNzZW50aWFsIHRvIG9wdGltaXplIFVEUCBwZXJmb3JtYW5jZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgYGludGAgc2lnbmlmaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB1ZHBfcmN2XFwoc3RydWN0IHNrX2J1ZmYgXFwqc2tiXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3VkcC5oPTQyMj12b2lkIHVkcDRfaHdjc3VtKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QpO1xuaW5jbHVkZS9uZXQvdWRwLmg6NDIzOmludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvdWRwLmgtNDI0LWludCB1ZHBfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTI1Njk9c3RhdGljIGludCB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNTkwLVxubmV0L2lwdjQvdWRwLmM6MjU5MTppbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdWRwLmMtMjU5Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgVURQIFJlY2VpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgdGhlIHJlY2VpdmluZyBlbmQgb2YgYSBVRFAgZGF0YWdyYW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGB1ZHBfcmN2YCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGV4YW1pbmUgaW4gYG5ldC9pcHY0L3VkcC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yLCBtb3JlIGFjY3VyYXRlbHksIHRoZSBwcmVkaWN0YWJsZSBwcm9jZXNzKSBvZiBoYW5kbGluZyBpbmNvbWluZyBVRFAgcGFja2V0cyByZWFsbHkgYmVnaW5zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZmxvdyBjb250cm9sLi4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTkxOlx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjI1OTI6XHR7XG4yNTkzOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTtcbjI1OTQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4yNTk1Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xuMjU5NjpcdFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcbjI1OTc6XHRcdF9fYmUzMiBzYWRkciwgZGFkZHI7XG4yNTk4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbjI1OTk6XHRcdGJvb2wgcmVmY291bnRlZDtcbjI2MDA6XHRcdGludCBkcm9wX3JlYXNvbjtcbjI2MDE6XHRcbjI2MDI6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4yNjAzOlx0XG4yNjA0Olx0XHQvKlxuMjYwNTpcdFx0ICogIFZhbGlkYXRlIHRoZSBwYWNrZXQuXG4yNjA2Olx0XHQgKi9cbjI2MDc6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG4yNjA4Olx0XHRcdGdvdG8gZHJvcDtcdFx0LyogTm8gc3BhY2UgZm9yIGhlYWRlci4gKi9cbjI2MDk6XHRcbjI2MTA6XHRcdHVoICAgPSB1ZHBfaGRyKHNrYik7XG4yNjExOlx0XHR1bGVuID0gbnRvaHModWgtXHUwMDNlbGVuKTtcbjI2MTI6XHRcdHNhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4yNjEzOlx0XHRkYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMjYxNDpcdFxuMjYxNTpcdFx0aWYgKHVsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4yNjE2Olx0XHRcdGdvdG8gc2hvcnRfcGFja2V0O1xuMjYxNzpcdFxuMjYxODpcdFx0aWYgKHVsZW4gXHUwMDNjIHNpemVvZigqdWgpKVxuMjYxOTpcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjA6XHRcbjI2MjE6XHRcdGlmICh1bGVuIFx1MDAzYyBza2ItXHUwMDNlbGVuKSB7XG4yNjIyOlx0XHRcdGlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCB1bGVuKSlcbjI2MjM6XHRcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjQ6XHRcbjI2MjU6XHRcdFx0dWggPSB1ZHBfaGRyKHNrYik7XG4yNjI2Olx0XHR9XG4yNjI3Olx0XG4yNjI4Olx0XHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXG4yNjI5Olx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjI2MzA6XHRcbjI2MzE6XHRcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cdTAwM2Vzb3VyY2UsIGRhZGRyLCB1aC1cdTAwM2VkZXN0LFxuMjYzMjpcdFx0XHRcdCAgICAgXHUwMDI2cmVmY291bnRlZCwgdWRwX2VoYXNoZm4pO1xuMjYzMzpcdFx0aWYgKElTX0VSUihzaykpXG4yNjM0Olx0XHRcdGdvdG8gbm9fc2s7XG4yNjM1Olx0XG4yNjM2Olx0XHRpZiAoc2spIHtcbjI2Mzc6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMjYzODpcdFx0XHRpbnQgcmV0O1xuMjYzOTpcdFxuMjY0MDpcdFx0XHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcbjI2NDE6XHRcdFx0XHR1ZHBfc2tfcnhfZHN0X3NldChzaywgZHN0KTtcbjI2NDI6XHRcbjI2NDM6XHRcdFx0cmV0ID0gdWRwX3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XG4yNjQ0Olx0XHRcdGlmIChyZWZjb3VudGVkKVxuMjY0NTpcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbjI2NDY6XHRcdFx0cmV0dXJuIHJldDtcbjI2NDc6XHRcdH1cbjI2NDg6XHRcbjI2NDk6XHRcdGlmIChydC1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcbjI2NTA6XHRcdFx0cmV0dXJuIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgdWgsIHNhZGRyLCBkYWRkcik7XG4yNjUxOlx0XG4yNjUyOlx0XHRzayA9IF9fdWRwNF9saWJfbG9va3VwX3NrYihza2IsIHVoLVx1MDAzZXNvdXJjZSwgdWgtXHUwMDNlZGVzdCk7XG4yNjUzOlx0XHRpZiAoc2spXG4yNjU0Olx0XHRcdHJldHVybiB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcbjI2NTU6XHRub19zazpcbjI2NTY6XHRcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxuMjY1NzpcdFx0XHRnb3RvIGRyb3A7XG4yNjU4Olx0XHRuZl9yZXNldF9jdChza2IpO1xuMjY1OTpcdFxuMjY2MDpcdFx0LyogTm8gc29ja2V0LiBEcm9wIHBhY2tldCBzaWxlbnRseSwgaWYgY2hlY2tzdW0gaXMgd3JvbmcgKi9cbjI2NjE6XHRcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4yNjYyOlx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjI2NjM6XHRcbjI2NjQ6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcbjI2NjU6XHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfTk9QT1JUUyk7XG4yNjY2Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xuMjY2NzpcdFxuMjY2ODpcdFx0LypcbjI2Njk6XHRcdCAqIEhtbS4gIFdlIGdvdCBhbiBVRFAgcGFja2V0IHRvIGEgcG9ydCB0byB3aGljaCB3ZVxuMjY3MDpcdFx0ICogZG9uJiMzOTt0IHdhbm5hIGxpc3Rlbi4gIElnbm9yZSBpdC5cbjI2NzE6XHRcdCAqL1xuMjY3MjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbjI2NzM6XHRcdHJldHVybiAwO1xuMjY3NDpcdFxuMjY3NTpcdHNob3J0X3BhY2tldDpcbjI2NzY6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEw7XG4yNjc3Olx0XHRuZXRfZGJnX3JhdGVsaW1pdGVkKFwmIzM0O1VEUDogc2hvcnQgcGFja2V0OiBGcm9tICVwSTQ6JXUgJWQvJWQgdG8gJXBJNDoldVxcblwmIzM0OyxcbjI2Nzg6XHRcdFx0XHQgICAgXHUwMDI2c2FkZHIsIG50b2hzKHVoLVx1MDAzZXNvdXJjZSksXG4yNjc5Olx0XHRcdFx0ICAgIHVsZW4sIHNrYi1cdTAwM2VsZW4sXG4yNjgwOlx0XHRcdFx0ICAgIFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cdTAwM2VkZXN0KSk7XG4yNjgxOlx0XHRnb3RvIGRyb3A7XG4yNjgyOlx0XG4yNjgzOlx0Y3N1bV9lcnJvcjpcbjI2ODQ6XHRcdC8qXG4yNjg1Olx0XHQgKiBSRkMxMTIyOiBPSy4gIERpc2NhcmRzIHRoZSBiYWQgcGFja2V0IHNpbGVudGx5IChhcyBmYXIgYXNcbjI2ODY6XHRcdCAqIHRoZSBuZXR3b3JrIGlzIGNvbmNlcm5lZCwgYW55d2F5KSBhcyBwZXIgNC4xLjMuNCAoTVVTVCkuXG4yNjg3Olx0XHQgKi9cbjI2ODg6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1VEUF9DU1VNO1xuMjY4OTpcdFx0bmV0X2RiZ19yYXRlbGltaXRlZChcJiMzNDtVRFA6IGJhZCBjaGVja3N1bS4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbiAlZFxcblwmIzM0OyxcbjI2OTA6XHRcdFx0XHQgICAgXHUwMDI2c2FkZHIsIG50b2hzKHVoLVx1MDAzZXNvdXJjZSksIFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cdTAwM2VkZXN0KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgUmVjZWl2ZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHVkcF9yY3ZgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCBqdXN0IHJldHVybnMgd2hhdGV2ZXIgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZ2l2ZXMgaXQuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpcyBgdWRwX3JjdmAgYWN0dWFsbHkgKmNhbGxlZCo/IFJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzb21ldGhpbmcgbGlrZSBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Vg4oCmIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIHRoYXQgZ2VuZXJhbCB2aWNpbml0eS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KCk15IG5leHQgbW92ZSBpcyB0byBkaXZlIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYHVkcF9yY3ZgLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSB3aXRoIHRoYXQgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBjaGVja2luZz8gRmxvdyBjb250cm9sPyBJcyBpdCBjcml0aWNhbCBmb3IgcHJvcGVyIG11bHRpY2FzdCBkZWxpdmVyeT8gVW5kZXJzdGFuZGluZyB0aGUgYHVkcF9yY3ZgIGNhbGwgY2hhaW4gYW5kIGhvdyB0aGUgcmV0dXJuIHZhbHVlIGlzIGhhbmRsZWQgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIFVEUCByZWNlaXZlIHBhdGguIFRoaXMgbG9va3MgbGlrZSB0aGUgcGxhY2UgdG8gZm9jdXMgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRwX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC91ZHAuaD00MjI9dm9pZCB1ZHA0X2h3Y3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0KTtcbmluY2x1ZGUvbmV0L3VkcC5oOjQyMzppbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3VkcC5oLTQyNC1pbnQgdWRwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcbi0tXG5pbmNsdWRlL25ldC91ZHAuaD01Nzc9dm9pZCB1ZHB2Nl9lbmNhcF9lbmFibGUodm9pZCk7XG4tLVxuaW5jbHVkZS9uZXQvdWRwLmgtNTc5LVxuaW5jbHVkZS9uZXQvdWRwLmg6NTgwOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnVkcF9yY3Zfc2VnbWVudChzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC91ZHAuaC01ODEtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaXB2NClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTg4Mj1zdGF0aWMgaW50IF9faW5pdCBpbmV0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTkyNS1cdG5ldF9ob3RkYXRhLnVkcF9wcm90b2NvbCA9IChzdHJ1Y3QgbmV0X3Byb3RvY29sKSB7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTkyNjpcdFx0LmhhbmRsZXIgPVx0dWRwX3Jjdixcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTI3LVx0XHQuZXJyX2hhbmRsZXIgPVx0dWRwX2Vycixcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTE1MD1ib29sIGlwX2NhbGxfcmFfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTE4Ni1cbm5ldC9pcHY0L2lwX2lucHV0LmM6MTg3OklORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKikpO1xubmV0L2lwdjQvaXBfaW5wdXQuYy0xODgtSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jPTE4OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtMjA2LVx0XHR9XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIwNzpcdFx0cmV0ID0gSU5ESVJFQ1RfQ0FMTF8yKGlwcHJvdC1cdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMDgtXHRcdFx0XHQgICAgICBza2IpO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTE1MTA9dm9pZCB1ZHBfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTE1MjYtLyogYWxsIGhlYWQgc3RhdGVzIChkc3QsIHNrLCBuZiBjb25udHJhY2spIGV4Y2VwdCBza2IgZXh0ZW5zaW9ucyBhcmVcbm5ldC9pcHY0L3VkcC5jOjE1Mjc6ICogY2xlYXJlZCBieSB1ZHBfcmN2KCkuXG5uZXQvaXB2NC91ZHAuYy0xNTI4LSAqXG4tLVxubmV0L2lwdjQvdWRwLmM9MjQyMz1zdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDMyLVx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcbm5ldC9pcHY0L3VkcC5jOjI0MzM6XHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIHRydWUpO1xubmV0L2lwdjQvdWRwLmMtMjQzNC1cdHNrYl9saXN0X3dhbGtfc2FmZShzZWdzLCBza2IsIG5leHQpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yNTY5PXN0YXRpYyBpbnQgdWRwX3VuaWNhc3RfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwLmMtMjU5MC1cbm5ldC9pcHY0L3VkcC5jOjI1OTE6aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3VkcC5jLTI1OTIte1xuLS1cbm5ldC9pcHY2L3VkcC5jPTg3Nz1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTg4NS1cdF9fc2tiX3B1c2goc2tiLCAtc2tiX21hY19vZmZzZXQoc2tiKSk7XG5uZXQvaXB2Ni91ZHAuYzo4ODY6XHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIGZhbHNlKTtcbm5ldC9pcHY2L3VkcC5jLTg4Ny1cdHNrYl9saXN0X3dhbGtfc2FmZShzZWdzLCBza2IsIG5leHQpIHtcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTgxNj1zdGF0aWMgaW50IHNjdHBfY3RsX3NvY2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy04MzktXG5uZXQvc2N0cC9wcm90b2NvbC5jOjg0MDpzdGF0aWMgaW50IHNjdHBfdWRwX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg0MS17XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz04NDk9aW50IHNjdHBfdWRwX3NvY2tfc3RhcnQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmMtODY1LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSAxO1xubmV0L3NjdHAvcHJvdG9jb2wuYzo4NjY6XHR0dW5jZmcuZW5jYXBfcmN2ID0gc2N0cF91ZHBfcmN2O1xubmV0L3NjdHAvcHJvdG9jb2wuYy04NjctXHR0dW5jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IHNjdHBfdWRwX3Y0X2Vycjtcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg4Ny1cdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcbm5ldC9zY3RwL3Byb3RvY29sLmM6ODg4Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IHNjdHBfdWRwX3Jjdjtcbm5ldC9zY3RwL3Byb3RvY29sLmMtODg5LVx0dHVuY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBzY3RwX3VkcF92Nl9lcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyBVRFAgUGFja2V0IFJlLVN1Ym1pc3Npb24gTG9naWMqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gVGhpcyBgdWRwX3F1ZXVlX3Jjdl9za2JgIGZ1bmN0aW9uLi4uIGl0IHNlZW1zIHRvIGJlIHJldHVybmluZyBhIHBvc2l0aXZlIHZhbHVlIHdoZW4gaXQgKmVuY2Fwc3VsYXRlcyogdGhlIGluY29taW5nIHBhY2tldCBhbmQgbmVlZHMgaXQgdG8gYmUgcmVzdWJtaXR0ZWQuIFRoYXQmIzM5O3MuLi4gaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LgoKUmlnaHQsIHNvIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L3VkcC5jYCBhbmQgZGlnIGludG8gYHVkcF9xdWV1ZV9yY3Zfc2tiYC4gSSBuZWVkIHRvIHNlZSAqZXhhY3RseSogd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgcG9zaXRpdmUgcmV0dXJuLCB3aGF0IGNvbmRpdGlvbnMgYXJlIGJlaW5nIGNoZWNrZWQsIGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB0byB0aGUgcGFja2V0IHdoZW4gaXQmIzM5O3MgZmxhZ2dlZCBmb3IgcmVzdWJtaXNzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBoZXJlIGFuZCBob3cgaXQmIzM5O3MgYWZmZWN0aW5nIHRoZSBub3JtYWwgZGF0YWdyYW0gcHJvY2Vzc2luZy4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgcGVyZm9ybWFuY2UgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgYmVoYXZpb3VyIGlzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiXFwoc3RydWN0IHNvY2sgXFwqc2ssIHN0cnVjdCBza19idWZmIFxcKnNrYlxcKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYz0yMzUwPXN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDIyLVxubmV0L2lwdjQvdWRwLmM6MjQyMzpzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3VkcC5jLTI0MjQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgVURQIFJlY2VpdmUgUXVldWUgRnVuY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdWRwX3F1ZXVlX3Jjdl9za2JgLiBBbHdheXMgZ29vZCB0byByZWZyZXNoIHRoZSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHBhdGgsIGFuZCB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgbnVhbmNlcy4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgaGVyZSwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgcGF0dGVybnM6IFNLQiBoYW5kbGluZywgc29ja2V0IGxvY2sgYWNxdWlzaXRpb24sIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiByZWFzc2VtYmx5IG9yIG9mZmxvYWQgY29uc2lkZXJhdGlvbnMsIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVjZWl2ZSBxdWV1ZSBpdHNlbGYsIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGNvbnRleHQgdmVyc3VzIHRhc2tsZXQgY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcmFjZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgdXBkYXRlcy4gVGhpcyBpcyB3aGVyZSB0aG9zZSBzdWJ0bGUgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBhbmQgbG9jayBoaWVyYXJjaHkgdmlvbGF0aW9ucyB0ZW5kIHRvIHNuZWFrIGluLiBJIGV4cGVjdCB0byBzZWUgc29tZSBjbGV2ZXIgdHJpY2tzIGZvciBoYW5kbGluZyBVRFAmIzM5O3MgY29ubmVjdGlvbmxlc3MgbmF0dXJlIGFuZCBwb3NzaWJseSBzb21lIG9wdGltaXphdGlvbnMgbGV2ZXJhZ2luZyB0aGluZ3MgbGlrZSBjaGVja3N1bSBvZmZsb2FkLCBSU1MsIG9yIGV2ZW4gaGFyZHdhcmUgcmVjZWl2ZSBmaWx0ZXJzIGlmIHRoZSBOSUMgc3VwcG9ydHMgdGhlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MjM6XHRzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjI0MjQ6XHR7XG4yNDI1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwgKnNlZ3M7XG4yNDI2Olx0XHRpbnQgcmV0O1xuMjQyNzpcdFxuMjQyODpcdFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcbjI0Mjk6XHRcdFx0cmV0dXJuIHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcbjI0MzA6XHRcbjI0MzE6XHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHVkcF9za2JfY2IpIFx1MDAzZSBTS0JfR1NPX0NCX09GRlNFVCk7XG4yNDMyOlx0XHRfX3NrYl9wdXNoKHNrYiwgLXNrYl9tYWNfb2Zmc2V0KHNrYikpO1xuMjQzMzpcdFx0c2VncyA9IHVkcF9yY3Zfc2VnbWVudChzaywgc2tiLCB0cnVlKTtcbjI0MzQ6XHRcdHNrYl9saXN0X3dhbGtfc2FmZShzZWdzLCBza2IsIG5leHQpIHtcbjI0MzU6XHRcdFx0X19za2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xuMjQzNjpcdFxuMjQzNzpcdFx0XHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XG4yNDM4Olx0XHRcdHJldCA9IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcbjI0Mzk6XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbjI0NDA6XHRcdFx0XHRpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBza2IsIHJldCk7XG4yNDQxOlx0XHR9XG4yNDQyOlx0XHRyZXR1cm4gMDtcbjI0NDM6XHR9XG4yNDQ0Olx0XG4yNDQ1Olx0LyogRm9yIFRDUCBzb2NrZXRzLCBza19yeF9kc3QgaXMgcHJvdGVjdGVkIGJ5IHNvY2tldCBsb2NrXG4yNDQ2Olx0ICogRm9yIFVEUCwgd2UgdXNlIHhjaGcoKSB0byBndWFyZCBhZ2FpbnN0IGNvbmN1cnJlbnQgY2hhbmdlcy5cbjI0NDc6XHQgKi9cbjI0NDg6XHRib29sIHVkcF9za19yeF9kc3Rfc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuMjQ0OTpcdHtcbjI0NTA6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm9sZDtcbjI0NTE6XHRcbjI0NTI6XHRcdGlmIChkc3RfaG9sZF9zYWZlKGRzdCkpIHtcbjI0NTM6XHRcdFx0b2xkID0gdW5yY3VfcG9pbnRlcih4Y2hnKFx1MDAyNnNrLVx1MDAzZXNrX3J4X2RzdCwgUkNVX0lOSVRJQUxJWkVSKGRzdCkpKTtcbjI0NTQ6XHRcdFx0ZHN0X3JlbGVhc2Uob2xkKTtcbjI0NTU6XHRcdFx0cmV0dXJuIG9sZCAhPSBkc3Q7XG4yNDU2Olx0XHR9XG4yNDU3Olx0XHRyZXR1cm4gZmFsc2U7XG4yNDU4Olx0fVxuMjQ1OTpcdFxuMjQ2MDpcdC8qXG4yNDYxOlx0ICpcdE11bHRpY2FzdHMgYW5kIGJyb2FkY2FzdHMgZ28gdG8gZWFjaCBsaXN0ZW5lci5cbjI0NjI6XHQgKlxuMjQ2MzpcdCAqXHROb3RlOiBjYWxsZWQgb25seSBmcm9tIHRoZSBCSCBoYW5kbGVyIGNvbnRleHQuXG4yNDY0Olx0ICovXG4yNDY1Olx0c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjQ2NjpcdFx0XHRcdFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcbjI0Njc6XHRcdFx0XHRcdCAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkcilcbjI0Njg6XHR7XG4yNDY5Olx0XHRzdHJ1Y3QgdWRwX3RhYmxlICp1ZHB0YWJsZSA9IG5ldC1cdTAwM2VpcHY0LnVkcF90YWJsZTtcbjI0NzA6XHRcdHVuc2lnbmVkIGludCBoYXNoMiwgaGFzaDJfYW55LCBvZmZzZXQ7XG4yNDcxOlx0XHR1bnNpZ25lZCBzaG9ydCBobnVtID0gbnRvaHModWgtXHUwMDNlZGVzdCk7XG4yNDcyOlx0XHRzdHJ1Y3Qgc29jayAqc2ssICpmaXJzdCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTM5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyBVRFAgUGFja2V0IEhhbmRsaW5nKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlc2UgVURQIHBhY2tldHMuIFNwZWNpZmljYWxseSwgSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IGB1ZHBfcXVldWVfcmN2X29uZV9za2JgIGhhdmluZyBzb21lIHNwZWNpYWwgYmVoYXZpb3IgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLiBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHBhY2tldCAqbmVlZHMqIHRvIGJlIHJlc3VibWl0dGVkLCBwcmVzdW1hYmx5IGJlY2F1c2UgaXQmIzM5O3MgZW5jYXBzdWxhdGVkIGluIHNvbWUgZmFzaGlvbi4gU28sIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSBleGFjdGx5IGhvdyBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCB3b3Jrcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaXRzIHJldHVybiB2YWx1ZSBzZW1hbnRpY3MsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IHJldHVybnMgcG9zaXRpdmUsIGFuZCB3aGF0IHRoYXQgcG9zaXRpdmUgdmFsdWUgc2lnbmlmaWVzIGluIHRlcm1zIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LiBFc3NlbnRpYWxseSwgSSBuZWVkIGEgZGV0YWlsZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHBhY2tldHMgYXJlIG1hbmFnZWQgdXBzdHJlYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNTA6XHRzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4yMzUxOlx0e1xuMjM1MjpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbjIzNTM6XHRcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xuMjM1NDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuMjM1NTpcdFxuMjM1NjpcdFx0LypcbjIzNTc6XHRcdCAqXHRDaGFyZ2UgaXQgdG8gdGhlIHNvY2tldCwgZHJvcHBpbmcgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwuXG4yMzU4Olx0XHQgKi9cbjIzNTk6XHRcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuMjM2MDpcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcbjIzNjE6XHRcdFx0Z290byBkcm9wO1xuMjM2MjpcdFx0fVxuMjM2MzpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbjIzNjQ6XHRcbjIzNjU6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnVkcF9lbmNhcF9uZWVkZWRfa2V5KSBcdTAwMjZcdTAwMjZcbjIzNjY6XHRcdCAgICBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfdHlwZSkpIHtcbjIzNjc6XHRcdFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuMjM2ODpcdFxuMjM2OTpcdFx0XHQvKlxuMjM3MDpcdFx0XHQgKiBUaGlzIGlzIGFuIGVuY2Fwc3VsYXRpb24gc29ja2V0IHNvIHBhc3MgdGhlIHNrYiB0b1xuMjM3MTpcdFx0XHQgKiB0aGUgc29ja2V0JiMzOTtzIHVkcF9lbmNhcF9yY3YoKSBob29rLiBPdGhlcndpc2UsIGp1c3RcbjIzNzI6XHRcdFx0ICogZmFsbCB0aHJvdWdoIGFuZCBwYXNzIHRoaXMgdXAgdGhlIFVEUCBzb2NrZXQuXG4yMzczOlx0XHRcdCAqIHVwLVx1MDAzZWVuY2FwX3JjdigpIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZTpcbjIzNzQ6XHRcdFx0ICogPTAgaWYgc2tiIHdhcyBzdWNjZXNzZnVsbHkgcGFzc2VkIHRvIHRoZSBlbmNhcFxuMjM3NTpcdFx0XHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXG4yMzc2Olx0XHRcdCAqIFx1MDAzZTAgaWYgc2tiIHNob3VsZCBiZSBwYXNzZWQgb24gdG8gVURQLlxuMjM3NzpcdFx0XHQgKiBcdTAwM2MwIGlmIHNrYiBzaG91bGQgYmUgcmVzdWJtaXR0ZWQgYXMgcHJvdG8gLU5cbjIzNzg6XHRcdFx0ICovXG4yMzc5Olx0XG4yMzgwOlx0XHRcdC8qIGlmIHdlJiMzOTtyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXG4yMzgxOlx0XHRcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cdTAwM2VlbmNhcF9yY3YpO1xuMjM4MjpcdFx0XHRpZiAoZW5jYXBfcmN2KSB7XG4yMzgzOlx0XHRcdFx0aW50IHJldDtcbjIzODQ6XHRcbjIzODU6XHRcdFx0XHQvKiBWZXJpZnkgY2hlY2tzdW0gYmVmb3JlIGdpdmluZyB0byBlbmNhcCAqL1xuMjM4NjpcdFx0XHRcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4yMzg3Olx0XHRcdFx0XHRnb3RvIGNzdW1fZXJyb3I7XG4yMzg4Olx0XG4yMzg5Olx0XHRcdFx0cmV0ID0gZW5jYXBfcmN2KHNrLCBza2IpO1xuMjM5MDpcdFx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4yMzkxOlx0XHRcdFx0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lOREFUQUdSQU1TKTtcbjIzOTI6XHRcdFx0XHRcdHJldHVybiAtcmV0O1xuMjM5MzpcdFx0XHRcdH1cbjIzOTQ6XHRcdFx0fVxuMjM5NTpcdFxuMjM5NjpcdFx0XHQvKiBGQUxMVEhST1VHSCAtLSBpdCYjMzk7cyBhIFVEUCBQYWNrZXQgKi9cbjIzOTc6XHRcdH1cbjIzOTg6XHRcbjIzOTk6XHRcdHByZWZldGNoKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgVURQIE11bHRpY2FzdCBEZWxpdmVyeSBQYXRoKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgcmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgaWYgYGVuY2FwX3JjdmAgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLiBUaGF0IG5lZ2F0aXZlIHZhbHVlIGZyb20gYGVuY2FwX3JjdmAgc2lnbmlmaWVzIHRoYXQgdGhlIGBza2JgIG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wsIHNheSwgYC1OYC4gU28gd2hlbiBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCByZXR1cm5zIGEgdmFsdWUsIGxldCYjMzk7cyBjYWxsIGl0IGAtcmV0YCwgIHRoYXQgdmFsdWUsIHdoZW4gcmUtaW50ZXJwcmV0ZWQsIGlzIGFjdHVhbGx5ICpwb3NpdGl2ZSogYW5kIGluZGljYXRlcyBhIHJlc3VibWlzc2lvbiBpcyBuZWVkZWQgZm9yIHByb3RvY29sIGByZXRgLgoKTm93LCBkaWdnaW5nIGEgYml0IGRlZXBlciBpbnRvIGB1ZHBfcXVldWVfcmN2X3NrYmAsIEkgc2VlIHRoYXQgaXQgdXNlcyBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCBpZiB0aGUgR1NPIGlzbiYjMzk7dCB1bmV4cGVjdGVkLiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0ICBgdWRwX3F1ZXVlX3Jjdl9za2JgIGl0c2VsZiByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUgaWYgdGhlIHBhY2tldCBtdXN0IGJlIHJlc3VibWl0dGVkLgoKTG9va2luZyBhdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBuZXh0LiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIGl0IGFwcGVhcnMgdG8gcmV0dXJuIGAtcmV0YCB3aGVuIGB1ZHBfcXVldWVfcmN2X3NrYmAgcmV0dXJucyBhIHBvc2l0aXZlIGByZXRgLiBUaGlzIG1lYW5zIHRoYXQgaWYgcmVzdWJtaXNzaW9uIGlzIHJlcXVpcmVkIChpbmRpY2F0ZWQgYnkgYHVkcF9xdWV1ZV9yY3Zfc2tiYCByZXR1cm5pbmcgYCZndDsgMGApLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuIEZpbmFsbHksIGB1ZHBfcmN2YCBpdHNlbGYgcmV0dXJucyB3aGF0ZXZlciBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyB1bmRlcnN0YW5kaW5nLCBzbyBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGluIGBuZXQvaXB2NC9pcF9pbnB1dC5jYCB0byBzZWUgaG93IHRoZSB3aG9sZSBwcm9jZXNzIGZpdHMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg5Olx0dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcbiAxOTA6XHR7XG4gMTkxOlx0XHRjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sICppcHByb3Q7XG4gMTkyOlx0XHRpbnQgcmF3LCByZXQ7XG4gMTkzOlx0XG4gMTk0Olx0cmVzdWJtaXQ6XG4gMTk1Olx0XHRyYXcgPSByYXdfbG9jYWxfZGVsaXZlcihza2IsIHByb3RvY29sKTtcbiAxOTY6XHRcbiAxOTc6XHRcdGlwcHJvdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X3Byb3Rvc1twcm90b2NvbF0pO1xuIDE5ODpcdFx0aWYgKGlwcHJvdCkge1xuIDE5OTpcdFx0XHRpZiAoIWlwcHJvdC1cdTAwM2Vub19wb2xpY3kpIHtcbiAyMDA6XHRcdFx0XHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuIDIwMTpcdFx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsXG4gMjAyOlx0XHRcdFx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XG4gMjAzOlx0XHRcdFx0XHRyZXR1cm47XG4gMjA0Olx0XHRcdFx0fVxuIDIwNTpcdFx0XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gMjA2Olx0XHRcdH1cbiAyMDc6XHRcdFx0cmV0ID0gSU5ESVJFQ1RfQ0FMTF8yKGlwcHJvdC1cdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxuIDIwODpcdFx0XHRcdFx0ICAgICAgc2tiKTtcbiAyMDk6XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDIxMDpcdFx0XHRcdHByb3RvY29sID0gLXJldDtcbiAyMTE6XHRcdFx0XHRnb3RvIHJlc3VibWl0O1xuIDIxMjpcdFx0XHR9XG4gMjEzOlx0XHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7XG4gMjE0Olx0XHR9IGVsc2Uge1xuIDIxNTpcdFx0XHRpZiAoIXJhdykge1xuIDIxNjpcdFx0XHRcdGlmICh4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiAyMTc6XHRcdFx0XHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5VTktOT1dOUFJPVE9TKTtcbiAyMTg6XHRcdFx0XHRcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILFxuIDIxOTpcdFx0XHRcdFx0XHQgIElDTVBfUFJPVF9VTlJFQUNILCAwKTtcbiAyMjA6XHRcdFx0XHR9XG4gMjIxOlx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9OT1BST1RPKTtcbiAyMjI6XHRcdFx0fSBlbHNlIHtcbiAyMjM6XHRcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xuIDIyNDpcdFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gMjI1Olx0XHRcdH1cbiAyMjY6XHRcdH1cbiAyMjc6XHR9XG4gMjI4Olx0XG4gMjI5Olx0c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAyMzA6XHR7XG4gMjMxOlx0XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuIDIzMjpcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xuIDIzMzpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNKTtcbiAyMzQ6XHRcdFx0cmV0dXJuIDA7XG4gMjM1Olx0XHR9XG4gMjM2Olx0XG4gMjM3Olx0XHRza2JfY2xlYXJfZGVsaXZlcnlfdGltZShza2IpO1xuIDIzODpcdFx0X19za2JfcHVsbChza2IsIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjU4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQcm90b2NvbCBEZWxpdmVyeSBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGNoZWNrcyBpZiB0aGUgcmV0dXJuIHZhbHVlLCBgcmV0YCwgaXMgbGVzcyB0aGFuIHplcm8uIElmIGl0ICppcyosIHRoZW4gaXQmIzM5O3MgaW50ZXJwcmV0aW5nIHRoYXQgbmVnYXRpdmUgdmFsdWUuIFRoZSBjb2RlIHNldHMgYHByb3RvY29sYCB0byB0aGUgKmFic29sdXRlIHZhbHVlKiBvZiBgcmV0YCwgZWZmZWN0aXZlbHkgaW52ZXJ0aW5nIGl0LCBhbmQgdGhlbiBqdW1wcyB0byB0aGUgYHJlc3VibWl0YCBsYWJlbC4gU28sIGlmIGEgZnVuY3Rpb24gbGlrZSBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCB3ZXJlIHRvIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLCBzcGVjaWZpY2FsbHkgYSBuZWdhdGl2ZSB2YWx1ZSB0aGF0JiMzOTtzIHRoZSBuZWdhdGl2ZSBvZiBhIHBvc2l0aXZlIHByb3RvY29sIG51bWJlciAobWVhbmluZyBpdCByZXR1cm5zIGAtcmV0YCwgd2hlcmUgYHJldCAmZ3Q7IDBgIGlzIHRoZSBwcm90b2NvbCBudW1iZXIpLCB0aGF0IG5lZ2F0aXZlIHJldHVybiB3aWxsIGNvcnJlY3RseSB0cmlnZ2VyIHRoZSByZXN1Ym1pc3Npb24gcGF0aCB3aXRoaW4gYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4gVGhlIHdob2xlIHN5c3RlbSBzZWVtcyB3ZWxsIGRlc2lnbmVkLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGlzIGlzIGNvbnNpc3RlbnQgYWNyb3NzIElQdjQgYW5kIElQdjYuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBJUHY2IGVxdWl2YWxlbnQsIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIEkgaGF2ZSB0byBjb25maXJtIHRoaXMgc2FtZSBsb2dpYyBob2xkcyB0cnVlIGZvciBJUHY2IHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwdjYuaD0xMDg3PWludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9pcHY2Lmg6MTA4ODp2b2lkIGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEwODktXHRcdFx0ICAgICAgYm9vbCBoYXZlX2ZpbmFsKTtcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0zOTg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNDAyLSAqL1xubmV0L2lwdjYvaXA2X2lucHV0LmM6NDAzOnZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDQtXHRcdFx0ICAgICAgYm9vbCBoYXZlX2ZpbmFsKVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTMzLVx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjUzNDpcdGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShuZXQsIHNrYiwgMCwgZmFsc2UpO1xubmV0L2lwdjYvaXA2X2lucHV0LmMtNTM1LVxuLS1cbm5ldC9pcHY2L3VkcC5jPTg3Nz1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTg5Mi1cdFx0aWYgKHJldCBcdTAwM2UgMClcbm5ldC9pcHY2L3VkcC5jOjg5MzpcdFx0XHRpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3UoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgc2tiLCByZXQsXG5uZXQvaXB2Ni91ZHAuYy04OTQtXHRcdFx0XHRcdFx0IHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YDoKCioqQW5hbHl6aW5nIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgc2l0dWF0ZWQuICYjMzQ7aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1JiMzNDsuLi4gdGhpcyBzY3JlYW1zIElQdjYgcHJvdG9jb2wgZGVsaXZlcnksIGxpa2VseSBpbnZvbHZpbmcgUmVhZC1Db3B5IFVwZGF0ZSAoUkNVKSBmb3IgY29uY3VycmVuY3kgc2FmZXR5LiBLbm93aW5nIHRoZSBjb250ZXh0IGlzIGNydWNpYWwsIHNvIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSB0YWdnaW5nIHRoaXMgYXMgYSBjb3JlIG5ldHdvcmsgZnVuY3Rpb24sIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgcmVjZXB0aW9uIG9yIGZvcndhcmRpbmcgYXQgYSBwcmV0dHkgZnVuZGFtZW50YWwgbGV2ZWwuIFRoZSAmIzM0O1JDVSYjMzQ7IHBhcnQgaXMgYSBnb29kIHNpZ24g4oCTIGl0IHN1Z2dlc3RzIHRoZXkgYXJlIHRyeWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IGFsbG93aW5nIGNvbmN1cnJlbnQgcmVhZHMsIHdoaWxlIHVwZGF0ZXMgKGFuZCBtb2RpZmljYXRpb25zKSBhcmUgaGFuZGxlZCBpbiBhIHNlcGFyYXRlIHBoYXNlZCBtYW5uZXIgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24uIE1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSAqaG93KiB0aGV5JiMzOTtyZSB1c2luZyBSQ1UsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwcm90ZWN0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzLiBJcyBpdCBhIHF1ZXVlLCBoYXNoIHRhYmxlLCBhIGxvb2t1cD8gTGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDM6XHR2b2lkIGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLFxuIDQwNDpcdFx0XHRcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcbiA0MDU6XHR7XG4gNDA2Olx0XHRpbnQgZXh0aGRyX2NudCA9IElQNkNCKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlNLQl9IT1BCWUhPUCA/IDEgOiAwO1xuIDQwNzpcdFx0Y29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sICppcHByb3Q7XG4gNDA4Olx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIDQwOTpcdFx0dW5zaWduZWQgaW50IG5ob2ZmO1xuIDQxMDpcdFx0U0tCX0RSKHJlYXNvbik7XG4gNDExOlx0XHRib29sIHJhdztcbiA0MTI6XHRcbiA0MTM6XHRcdC8qXG4gNDE0Olx0XHQgKlx0UGFyc2UgZXh0ZW5zaW9uIGhlYWRlcnNcbiA0MTU6XHRcdCAqL1xuIDQxNjpcdFxuIDQxNzpcdHJlc3VibWl0OlxuIDQxODpcdFx0aWRldiA9IGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpO1xuIDQxOTpcdFx0bmhvZmYgPSBJUDZDQihza2IpLVx1MDAzZW5ob2ZmO1xuIDQyMDpcdFx0aWYgKCFoYXZlX2ZpbmFsKSB7XG4gNDIxOlx0XHRcdGlmICghcHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSkpXG4gNDIyOlx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQyMzpcdFx0XHRuZXh0aGRyID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYilbbmhvZmZdO1xuIDQyNDpcdFx0fVxuIDQyNTpcdFxuIDQyNjpcdHJlc3VibWl0X2ZpbmFsOlxuIDQyNzpcdFx0cmF3ID0gcmF3Nl9sb2NhbF9kZWxpdmVyKHNrYiwgbmV4dGhkcik7XG4gNDI4Olx0XHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfcHJvdG9zW25leHRoZHJdKTtcbiA0Mjk6XHRcdGlmIChpcHByb3QpIHtcbiA0MzA6XHRcdFx0aW50IHJldDtcbiA0MzE6XHRcbiA0MzI6XHRcdFx0aWYgKGhhdmVfZmluYWwpIHtcbiA0MzM6XHRcdFx0XHRpZiAoIShpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSkge1xuIDQzNDpcdFx0XHRcdFx0LyogT25jZSB3ZSYjMzk7dmUgc2VlbiBhIGZpbmFsIHByb3RvY29sIGRvbiYjMzk7dFxuIDQzNTpcdFx0XHRcdFx0ICogYWxsb3cgZW5jYXBzdWxhdGlvbiBvbiBhbnkgbm9uLWZpbmFsXG4gNDM2Olx0XHRcdFx0XHQgKiBvbmVzLiBUaGlzIGFsbG93cyBmb28gaW4gVURQIGVuY2Fwc3VsYXRpb25cbiA0Mzc6XHRcdFx0XHRcdCAqIHRvIHdvcmsuXG4gNDM4Olx0XHRcdFx0XHQgKi9cbiA0Mzk6XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0NDA6XHRcdFx0XHR9XG4gNDQxOlx0XHRcdH0gZWxzZSBpZiAoaXBwcm90LVx1MDAzZWZsYWdzIFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkge1xuIDQ0MjpcdFx0XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XG4gNDQzOlx0XHRcdFx0aW50IHNkaWYgPSBpbmV0Nl9zZGlmKHNrYik7XG4gNDQ0Olx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiA0NDU6XHRcbiA0NDY6XHRcdFx0XHQvKiBPbmx5IGRvIHRoaXMgb25jZSBmb3IgZmlyc3QgZmluYWwgcHJvdG9jb2wgKi9cbiA0NDc6XHRcdFx0XHRoYXZlX2ZpbmFsID0gdHJ1ZTtcbiA0NDg6XHRcbiA0NDk6XHRcbiA0NTA6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA0NTE6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA0NTI6XHRcdFx0XHRoZHIgPSBpcHY2X2hkcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgdGVsbGluZyBteXNlbGYgdG8gYWN0dWFsbHkgKnJlYWQqIHRoZSByZXN0IG9mIHRoZSBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBmdW5jdGlvbi4gTm8gc2tpbW1pbmcsIG5vIGFzc3VtcHRpb25zLCBqdXN0IGEgdGhvcm91Z2gsIGxpbmUtYnktbGluZSBleGFtaW5hdGlvbi4gVGhpcyBpc24mIzM5O3QgdGhlIGtpbmQgb2YgZnVuY3Rpb24geW91IGNhbiBqdXN0IGdsYW5jZSBhdDsgdGhlcmUgYXJlIGxpa2VseSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGFuZCB0aW1pbmcgaXNzdWVzIGluIHBsYXkgdGhhdCByZXF1aXJlIGEgZGVlcCB1bmRlcnN0YW5kaW5nLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBkaWcgaW4gYW5kIHJlYWxseSAqdW5kZXJzdGFuZCogd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgSVB2NiBwcm90b2NvbCBzdGFjay4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IFJDVS1yZWxhdGVkIGZ1bmN0aW9ucyBjYW4gaGF2ZSBjb21wbGV4IGxvY2tpbmcgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY29uc2lkZXJhdGlvbnMsIHNvIEkmIzM5O20gYnJhY2luZyBteXNlbGYgZm9yIHRoYXQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTM6XHRcbiA0NTQ6XHRcdFx0XHQvKiBza2ItXHUwMDNlZGV2IHBhc3NlZCBtYXkgYmUgbWFzdGVyIGRldiBmb3IgdnJmcy4gKi9cbiA0NTU6XHRcdFx0XHRpZiAoc2RpZikge1xuIDQ1NjpcdFx0XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBzZGlmKTtcbiA0NTc6XHRcdFx0XHRcdGlmICghZGV2KVxuIDQ1ODpcdFx0XHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4gNDU5Olx0XHRcdFx0fSBlbHNlIHtcbiA0NjA6XHRcdFx0XHRcdGRldiA9IHNrYi1cdTAwM2VkZXY7XG4gNDYxOlx0XHRcdFx0fVxuIDQ2MjpcdFxuIDQ2MzpcdFx0XHRcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFx1MDAyNmhkci1cdTAwM2VkYWRkcikgXHUwMDI2XHUwMDI2XG4gNDY0Olx0XHRcdFx0ICAgICFpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgXHUwMDI2aGRyLVx1MDAzZWRhZGRyLFxuIDQ2NTpcdFx0XHRcdFx0XHRcdCBcdTAwMjZoZHItXHUwMDNlc2FkZHIpIFx1MDAyNlx1MDAyNlxuIDQ2NjpcdFx0XHRcdCAgICAhaXB2Nl9pc19tbGQoc2tiLCBuZXh0aGRyLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpKSB7XG4gNDY3Olx0XHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5BRERSRVJST1JTKTtcbiA0Njg6XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0Njk6XHRcdFx0XHR9XG4gNDcwOlx0XHRcdH1cbiA0NzE6XHRcdFx0aWYgKCEoaXBwcm90LVx1MDAzZWZsYWdzIFx1MDAyNiBJTkVUNl9QUk9UT19OT1BPTElDWSkpIHtcbiA0NzI6XHRcdFx0XHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuIDQ3MzpcdFx0XHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFhGUk1fUE9MSUNZKTtcbiA0NzQ6XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0NzU6XHRcdFx0XHR9XG4gNDc2Olx0XHRcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiA0Nzc6XHRcdFx0fVxuIDQ3ODpcdFxuIDQ3OTpcdFx0XHRyZXQgPSBJTkRJUkVDVF9DQUxMXzIoaXBwcm90LVx1MDAzZWhhbmRsZXIsIHRjcF92Nl9yY3YsIHVkcHY2X3JjdixcbiA0ODA6XHRcdFx0XHRcdCAgICAgIHNrYik7XG4gNDgxOlx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiA0ODI6XHRcdFx0XHRpZiAoaXBwcm90LVx1MDAzZWZsYWdzIFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkge1xuIDQ4MzpcdFx0XHRcdFx0LyogTm90IGFuIGV4dGVuc2lvbiBoZWFkZXIsIG1vc3QgbGlrZWx5IFVEUFxuIDQ4NDpcdFx0XHRcdFx0ICogZW5jYXBzdWxhdGlvbi4gVXNlIHJldHVybiB2YWx1ZSBhcyBuZXh0aGRyXG4gNDg1Olx0XHRcdFx0XHQgKiBwcm90b2NvbCBub3QgbmhvZmYgKHdoaWNoIHByZXN1bWFibHkgaXNcbiA0ODY6XHRcdFx0XHRcdCAqIG5vdCBzZXQgYnkgaGFuZGxlcikuXG4gNDg3Olx0XHRcdFx0XHQgKi9cbiA0ODg6XHRcdFx0XHRcdG5leHRoZHIgPSByZXQ7XG4gNDg5Olx0XHRcdFx0XHRnb3RvIHJlc3VibWl0X2ZpbmFsO1xuIDQ5MDpcdFx0XHRcdH0gZWxzZSB7XG4gNDkxOlx0XHRcdFx0XHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCYjNDM7JiM0MzsgXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpIHtcbiA0OTI6XHRcdFx0XHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIElQVjZfVE9PX01BTllfRVhUSERSUyk7XG4gNDkzOlx0XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0OTQ6XHRcdFx0XHRcdH1cbiA0OTU6XHRcdFx0XHRcdGdvdG8gcmVzdWJtaXQ7XG4gNDk2Olx0XHRcdFx0fVxuIDQ5NzpcdFx0XHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gNDk4Olx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7XG4gNDk5Olx0XHRcdH1cbiA1MDA6XHRcdH0gZWxzZSB7XG4gNTAxOlx0XHRcdGlmICghcmF3KSB7XG4gNTAyOlx0XHRcdFx0aWYgKHhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUHY2IFBhY2tldCBEZWxpdmVyeSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQdjYgY29kZSBhbmQgc29tZXRoaW5nJiMzOTtzIGNhdWdodCBteSBleWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBoYXMgdGhpcyBleHBlY3RhdGlvbjogaXQgbmVlZHMgYHJldCAmZ3Q7IDBgIHRvIHRyaWdnZXIgYSByZXN1Ym1pdC4gSW50ZXJlc3RpbmcuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGlzIGByZXRgIGNvbWVzIGZyb20uIEFoYSEgVGhlIGZ1bmN0aW9uIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIHJldHVybnMgdGhpcyBgcmV0YCB2YWx1ZS4gVGhpcyBzdWdnZXN0cyB0aGF0IGByZXRgIGlzIGNvbWluZyBmcm9tIGEgZG93bnN0cmVhbSBmdW5jdGlvbiwgYW5kIGluIHBhcnRpY3VsYXIsIHRoYXQgdGhpcyBgcmV0YCB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIHJlc3VibWl0IGlzIHJlcXVpcmVkLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmYWN0b3JzIGltcGFjdCB0aGlzIHJldHVybiB2YWx1ZS4KCk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHJldGAgdmFsdWUgaXMuIEl0IGFwcGVhcnMgdG8gYmUgdGllZCB0byBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd29ya3MuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2Ni91ZHAuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgdWRwdjZfcXVldWVfcmN2X3NrYmAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBxdWV1ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODc3Olx0c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA4Nzg6XHR7XG4gODc5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwgKnNlZ3M7XG4gODgwOlx0XHRpbnQgcmV0O1xuIDg4MTpcdFxuIDg4MjpcdFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcbiA4ODM6XHRcdFx0cmV0dXJuIHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xuIDg4NDpcdFxuIDg4NTpcdFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcbiA4ODY6XHRcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgZmFsc2UpO1xuIDg4NzpcdFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xuIDg4ODpcdFx0XHRfX3NrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gODg5Olx0XG4gODkwOlx0XHRcdHVkcF9wb3N0X3NlZ21lbnRfZml4X2NzdW0oc2tiKTtcbiA4OTE6XHRcdFx0cmV0ID0gdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG4gODkyOlx0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4gODkzOlx0XHRcdFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KGRldl9uZXQoc2tiLVx1MDAzZWRldiksIHNrYiwgcmV0LFxuIDg5NDpcdFx0XHRcdFx0XHRcdCB0cnVlKTtcbiA4OTU6XHRcdH1cbiA4OTY6XHRcdHJldHVybiAwO1xuIDg5NzpcdH1cbiA4OTg6XHRcbiA4OTk6XHRzdGF0aWMgYm9vbCBfX3VkcF92Nl9pc19tY2FzdF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIDkwMDpcdFx0XHRcdFx0ICAgX19iZTE2IGxvY19wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLFxuIDkwMTpcdFx0XHRcdFx0ICAgX19iZTE2IHJtdF9wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLFxuIDkwMjpcdFx0XHRcdFx0ICAgaW50IGRpZiwgaW50IHNkaWYsIHVuc2lnbmVkIHNob3J0IGhudW0pXG4gOTAzOlx0e1xuIDkwNDpcdFx0Y29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuIDkwNTpcdFxuIDkwNjpcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuIDkwNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTA4Olx0XG4gOTA5Olx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2V1ZHBfcG9ydF9oYXNoICE9IGhudW0gfHxcbiA5MTA6XHRcdCAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYgfHxcbiA5MTE6XHRcdCAgICAoaW5ldC1cdTAwM2VpbmV0X2Rwb3J0IFx1MDAyNlx1MDAyNiBpbmV0LVx1MDAzZWluZXRfZHBvcnQgIT0gcm10X3BvcnQpIHx8XG4gOTEyOlx0XHQgICAgKCFpcHY2X2FkZHJfYW55KFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSBcdTAwMjZcdTAwMjZcbiA5MTM6XHRcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2c2stXHUwMDNlc2tfdjZfZGFkZHIsIHJtdF9hZGRyKSkgfHxcbiA5MTQ6XHRcdCAgICAhdWRwX3NrX2JvdW5kX2Rldl9lcShuZXQsIFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpLCBkaWYsIHNkaWYpIHx8XG4gOTE1Olx0XHQgICAgKCFpcHY2X2FkZHJfYW55KFx1MDAyNnNrLVx1MDAzZXNrX3Y2X3Jjdl9zYWRkcikgXHUwMDI2XHUwMDI2XG4gOTE2Olx0XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNnNrLVx1MDAzZXNrX3Y2X3Jjdl9zYWRkciwgbG9jX2FkZHIpKSlcbiA5MTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDkxODpcdFx0aWYgKCFpbmV0Nl9tY19jaGVjayhzaywgbG9jX2FkZHIsIHJtdF9hZGRyKSlcbiA5MTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDkyMDpcdFx0cmV0dXJuIHRydWU7XG4gOTIxOlx0fVxuIDkyMjpcdFxuIDkyMzpcdHN0YXRpYyB2b2lkIHVkcDZfY3N1bV96ZXJvX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4gOTI0Olx0e1xuIDkyNTpcdFx0LyogUkZDIDI0NjAgc2VjdGlvbiA4LjEgc2F5cyB0aGF0IHdlIFNIT1VMRCBsb2dcbiA5MjY6XHRcdCAqIHRoaXMgZXJyb3IuIFdlbGwsIGl0IGlzIHJlYXNvbmFibGUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipVRFB2NiBSZXN1Ym1pc3Npb24gTG9naWMgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBjbGlja2VkLiBJIHdhcyBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIHRoZSBJUHY2IFVEUCBjb2RlLCBidXQgSSB0aGluayBJIHJlbWVtYmVyIHNvbWV0aGluZyBpbXBvcnRhbnQuIFdhc24mIzM5O3QgaXQgdGhlIGNhc2UgdGhhdCBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGJlaGF2ZXMgbGlrZSBpdHMgSVB2NCBjb3VudGVycGFydCwgc3BlY2lmaWNhbGx5IHJldHVybmluZyBhIHZhbHVlICpncmVhdGVyIHRoYW4gemVybyogaWYgdGhlIFNLQiBuZWVkcyB0byBiZSByZXN1Ym1pdHRlZD8gSXQmIzM5O3MgdGhhdCBpbmRpY2F0b3Igd2UmIzM5O3JlIGFmdGVyLCByaWdodD8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCYjMzk7cyByZXR1cm4gdmFsdWUgaXMgdGhlIGtleSBzaWduYWwgd2UmIzM5O3JlIGxvb2tpbmcgZm9yLCBqdXN0IGFzIGl0IGlzIGluIHRoZSBJUHY0IGltcGxlbWVudGF0aW9uLiBCZXR0ZXIgdG8gYmUgcHJlY2lzZSBhbmQgcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uIHRvIGVsaW1pbmF0ZSBhbnkgYW1iaWd1aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiXFwoc3RydWN0IHNvY2sgXFwqc2ssIHN0cnVjdCBza19idWZmIFxcKnNrYlxcKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYz03NzI9c3RhdGljIGludCBfX3VkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTgwNS1cbm5ldC9pcHY2L3VkcC5jOjgwNjpzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3VkcC5jLTgwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIHJlY2VpdmluZyBhIHNpbmdsZSBTS0IgKFNvY2tldCBCdWZmZXIpIHdpdGhpbiB0aGUgSVB2NiBVRFAgY29udGV4dC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgd2hhdCBJIGV4cGVjdCB0byBmaW5kLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljOiB0aGUgaW50YWtlIG9mIHRoZSBkYXRhLCBhbnkgY3J1Y2lhbCBjaGVja3Mgb24gdGhlIHBhY2tldCBoZWFkZXJzIChzb3VyY2UvZGVzdGluYXRpb24gcG9ydHMsIGxlbmd0aHMsIGNoZWNrc3VtcyDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyksIGFuZCBob3cgaXQmIzM5O3MgdGhlbiBxdWV1ZWQgb3IgcHJvY2Vzc2VkIGZ1cnRoZXIgd2l0aGluIHRoZSBJUHY2IFVEUCBzdGFjay4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMg4oCTIGFyZSB0aGVyZSBsb2NrcyBpbnZvbHZlZCwgYXJlIHRoaW5ncyBhdG9taWM/IFNpbmNlIGl0JiMzOTtzIGEgJiMzNDtxdWV1ZSYjMzQ7IGZ1bmN0aW9uLCBJIGFzc3VtZSB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmUsIGxpa2VseSBhIGxpbmtlZCBsaXN0IG9yIHNpbWlsYXIsIGludm9sdmVkIGluIGhvbGRpbmcgcGFja2V0cyB0aGF0IGhhdmVuJiMzOTt0IGJlZW4gZnVsbHkgaGFuZGxlZCB5ZXQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmUgKGxpa2VseSBgc3RydWN0IHNvY2tgKSBhbmQgd2hhdCByb2xlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWlnaHQgcGxheSBoZXJlLCBpZiBhbnkuIEkmIzM5O2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBxdWV1ZSBpcyBmdWxsPyBXaGF0IGlmIGNoZWNrc3VtIHZhbGlkYXRpb24gZmFpbHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEkgY2FuIGlkZW50aWZ5IHF1aWNrbHksIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBpc3N1ZXMgd2l0aCBtYWxmb3JtZWQgcGFja2V0cz8gQW5kIGZpbmFsbHksIGdpdmVuIHRoaXMgaXMgSVB2NiwgSSB3aWxsIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IGNhcGFiaWxpdGllcy4gTXkgZXhwZXJ0IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQsIGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGJhZGx5IGltcGxlbWVudGVkLCB0aGVuIHRoZSB3aG9sZSBzeXN0ZW0gd2lsbCBiZSBleHBvc2VkIHRvIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDY6XHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA4MDc6XHR7XG4gODA4Olx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuIDgwOTpcdFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4gODEwOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gODExOlx0XG4gODEyOlx0XHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiA4MTM6XHRcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG4gODE0Olx0XHRcdGdvdG8gZHJvcDtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gODE3Olx0XG4gODE4Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZ1ZHB2Nl9lbmNhcF9uZWVkZWRfa2V5KSBcdTAwMjZcdTAwMjZcbiA4MTk6XHRcdCAgICBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfdHlwZSkpIHtcbiA4MjA6XHRcdFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIDgyMTpcdFxuIDgyMjpcdFx0XHQvKlxuIDgyMzpcdFx0XHQgKiBUaGlzIGlzIGFuIGVuY2Fwc3VsYXRpb24gc29ja2V0IHNvIHBhc3MgdGhlIHNrYiB0b1xuIDgyNDpcdFx0XHQgKiB0aGUgc29ja2V0JiMzOTtzIHVkcF9lbmNhcF9yY3YoKSBob29rLiBPdGhlcndpc2UsIGp1c3RcbiA4MjU6XHRcdFx0ICogZmFsbCB0aHJvdWdoIGFuZCBwYXNzIHRoaXMgdXAgdGhlIFVEUCBzb2NrZXQuXG4gODI2Olx0XHRcdCAqIHVwLVx1MDAzZWVuY2FwX3JjdigpIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZTpcbiA4Mjc6XHRcdFx0ICogPTAgaWYgc2tiIHdhcyBzdWNjZXNzZnVsbHkgcGFzc2VkIHRvIHRoZSBlbmNhcFxuIDgyODpcdFx0XHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXG4gODI5Olx0XHRcdCAqIFx1MDAzZTAgaWYgc2tiIHNob3VsZCBiZSBwYXNzZWQgb24gdG8gVURQLlxuIDgzMDpcdFx0XHQgKiBcdTAwM2MwIGlmIHNrYiBzaG91bGQgYmUgcmVzdWJtaXR0ZWQgYXMgcHJvdG8gLU5cbiA4MzE6XHRcdFx0ICovXG4gODMyOlx0XG4gODMzOlx0XHRcdC8qIGlmIHdlJiMzOTtyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXG4gODM0Olx0XHRcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cdTAwM2VlbmNhcF9yY3YpO1xuIDgzNTpcdFx0XHRpZiAoZW5jYXBfcmN2KSB7XG4gODM2Olx0XHRcdFx0aW50IHJldDtcbiA4Mzc6XHRcbiA4Mzg6XHRcdFx0XHQvKiBWZXJpZnkgY2hlY2tzdW0gYmVmb3JlIGdpdmluZyB0byBlbmNhcCAqL1xuIDgzOTpcdFx0XHRcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4gODQwOlx0XHRcdFx0XHRnb3RvIGNzdW1fZXJyb3I7XG4gODQxOlx0XG4gODQyOlx0XHRcdFx0cmV0ID0gZW5jYXBfcmN2KHNrLCBza2IpO1xuIDg0MzpcdFx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gODQ0Olx0XHRcdFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XG4gODQ1Olx0XHRcdFx0XHRyZXR1cm4gLXJldDtcbiA4NDY6XHRcdFx0XHR9XG4gODQ3Olx0XHRcdH1cbiA4NDg6XHRcbiA4NDk6XHRcdFx0LyogRkFMTFRIUk9VR0ggLS0gaXQmIzM5O3MgYSBVRFAgUGFja2V0ICovXG4gODUwOlx0XHR9XG4gODUxOlx0XG4gODUyOlx0XHRwcmVmZXRjaChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbiA4NTM6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoc2stXHUwMDNlc2tfZmlsdGVyKSBcdTAwMjZcdTAwMjZcbiA4NTQ6XHRcdCAgICB1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4gODU1Olx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVURQdjYgTXVsdGljYXN0IERlbGl2ZXJ5IFJlLWV4YW1pbmF0aW9uKioKCk9rYXksIHNvIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaGFuZHMgYmFjayBhIG5lZ2F0aXZlIHJldHVybiBjb2RlIHdoZW4gYGVuY2FwX3JjdmAgZmFpbHMsIHdoaWNoIG1lYW5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgVGhlcmVmb3JlLCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gaW1wbGllcyB0aGUgcGFja2V0IG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkLCBnb3QgaXQuIE5vdyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAgYW5kLCBzcGVjaWZpY2FsbHksIHRoYXQgaW5pdGlhbCBgaWYgKGZpcnN0KWAgYmxvY2suICBXZSBoYXZlIGByZXQgPSB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpO2AgYW5kIHRoZW4sIGNydWNpYWxseSwgYGlmIChyZXQgJmd0OyAwKSByZXR1cm4gcmV0O2AuICBSaWdodCwgdGhhdCBtZWFucyB0aGUgcmV0dXJuIGNvZGUgZGlyZWN0bHkgcHJvcGFnYXRlcyB1cHN0cmVhbS4gQnV0IHdhaXQsIHNpbmNlIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIHJldHVybnMgYHJldGAsIHdoaWNoIGNvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGVuIGl0JiMzOTtzIGRpcmVjdGx5IHJlc3VibWl0dGluZyB0aGUgcGFja2V0IHRvIHRoZSBzdGFjay4gIEkgbmVlZCB0byBjaGVjayBob3cgYHVkcHY2X3JjdmAgaGFuZGxlcyB0aGlzIGluIGBuZXQvaXB2Ni91ZHAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB1ZHB2Nl9yY3ZcXChzdHJ1Y3Qgc2tfYnVmZiBcXCpza2JcXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmM9MTAzNz1zdGF0aWMgaW50IHVkcDZfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTEwNjgtXG5uZXQvaXB2Ni91ZHAuYzoxMDY5OklORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3VkcC5jLTEwNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHVkcHY2X3JjdmAgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBJUHY2IFVEUCByZWNlaXZlciBwcm9jZXNzIHRob3JvdWdobHkuIE15IGV4cGVydGlzZSBpcyBpbiBuZXR3b3JraW5nLCBhbmQgSSYjMzk7dmUgc2VlbiBhIGxvdCBvZiBVRFAgaW1wbGVtZW50YXRpb25zLCBidXQgZXZlcnkgb25lIGhhcyBpdHMgbnVhbmNlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGZyYWdtZW50YXRpb24sIGNoZWNrc3VtIHZhbGlkYXRpb24sIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVwcGVyLWxheWVyIHByb3RvY29scy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMsIHJlYXNzZW1ibHkgb2YgZnJhZ21lbnRlZCBwYWNrZXRzIGFuZCBpZiBpdCBpbXBsZW1lbnRzIGFueSBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcy4gVGhlIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgc2hvdWxkIG1ha2UgdGhlIGZ1bmN0aW9uYWxpdHkgY2xlYXIuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93IGFuZCBjcml0aWNhbCBzZWN0aW9ucy4gSSBleHBlY3QgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHJvYnVzdCBhcHByb2FjaCB0byBwb3RlbnRpYWwgbWFsaWNpb3VzIHRyYWZmaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjk6XHRJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4xMDcwOlx0e1xuMTA3MTpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4xMDcyOlx0XHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAqZGFkZHI7XG4xMDczOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuMTA3NDpcdFx0c3RydWN0IHNvY2sgKnNrID0gTlVMTDtcbjEwNzU6XHRcdHN0cnVjdCB1ZHBoZHIgKnVoO1xuMTA3NjpcdFx0Ym9vbCByZWZjb3VudGVkO1xuMTA3NzpcdFx0dTMyIHVsZW4gPSAwO1xuMTA3ODpcdFxuMTA3OTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSlcbjEwODA6XHRcdFx0Z290byBkaXNjYXJkO1xuMTA4MTpcdFxuMTA4MjpcdFx0c2FkZHIgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyO1xuMTA4MzpcdFx0ZGFkZHIgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMTA4NDpcdFx0dWggPSB1ZHBfaGRyKHNrYik7XG4xMDg1Olx0XG4xMDg2Olx0XHR1bGVuID0gbnRvaHModWgtXHUwMDNlbGVuKTtcbjEwODc6XHRcdGlmICh1bGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuMTA4ODpcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjEwODk6XHRcbjEwOTA6XHRcdC8qIENoZWNrIGZvciBqdW1ibyBwYXlsb2FkICovXG4xMDkxOlx0XHRpZiAodWxlbiA9PSAwKVxuMTA5MjpcdFx0XHR1bGVuID0gc2tiLVx1MDAzZWxlbjtcbjEwOTM6XHRcbjEwOTQ6XHRcdGlmICh1bGVuIFx1MDAzYyBzaXplb2YoKnVoKSlcbjEwOTU6XHRcdFx0Z290byBzaG9ydF9wYWNrZXQ7XG4xMDk2Olx0XG4xMDk3Olx0XHRpZiAodWxlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikge1xuMTA5ODpcdFx0XHRpZiAocHNrYl90cmltX3Jjc3VtKHNrYiwgdWxlbikpXG4xMDk5Olx0XHRcdFx0Z290byBzaG9ydF9wYWNrZXQ7XG4xMTAwOlx0XG4xMTAxOlx0XHRcdHNhZGRyID0gXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbjExMDI6XHRcdFx0ZGFkZHIgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMTEwMzpcdFx0XHR1aCA9IHVkcF9oZHIoc2tiKTtcbjExMDQ6XHRcdH1cbjExMDU6XHRcbjExMDY6XHRcdGlmICh1ZHA2X2NzdW1faW5pdChza2IsIHVoKSlcbjExMDc6XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuMTEwODpcdFxuMTEwOTpcdFx0LyogQ2hlY2sgaWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgZS5nLiBkdWUgdG8gZWFybHkgZGVtdXggKi9cbjExMTA6XHRcdHNrID0gaW5ldDZfc3RlYWxfc29jayhuZXQsIHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBzYWRkciwgdWgtXHUwMDNlc291cmNlLCBkYWRkciwgdWgtXHUwMDNlZGVzdCxcbjExMTE6XHRcdFx0XHQgICAgICBcdTAwMjZyZWZjb3VudGVkLCB1ZHA2X2VoYXNoZm4pO1xuMTExMjpcdFx0aWYgKElTX0VSUihzaykpXG4xMTEzOlx0XHRcdGdvdG8gbm9fc2s7XG4xMTE0Olx0XG4xMTE1Olx0XHRpZiAoc2spIHtcbjExMTY6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMTExNzpcdFx0XHRpbnQgcmV0O1xuMTExODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcHJvdG9jb2wgYW5hbHlzaXMuCgoqKkRpdmluZyBCYWNrIGludG8gYHVkcHY2X3JjdmAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHN0b3AgZm9yIGEgbW9tZW50IGFuZCBnbyBiYWNrIHRvIHJlYWRpbmcgdGhlIHJlc3Qgb2YgYHVkcHY2X3JjdmAuIEnigJl2ZSBiZWVuIGFuYWx5emluZyBpdCBmb3IgYSB3aGlsZSBub3csIGFuZCBpdOKAmXMgaW1wb3J0YW50IHRvIHN0YXkgZm9jdXNlZCwgcmV2aWV3IHRoZSBjb250ZXh0LCBhbmQgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdy4gVGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZXRoaW5nIEkgbWlzc2VkIG9yIG5lZWQgdG8gcmUtZXZhbHVhdGUgaW4gbGlnaHQgb2YgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgZml0cyB3aXRoaW4gdGhlIG92ZXJhbGwgSVB2NiBVRFAgcmVjZWl2aW5nIHByb2Nlc3MuIE5lZWQgdG8gY2FyZWZ1bGx5IHJldHJhY2UgdGhlIHN0ZXBzIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IGdvdHRlbiBsb3N0IGluIHRoZSBkZXRhaWxzLCBvciBtaXNzZWQgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIGZvciBhbm90aGVyIHBhc3MgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExOTpcdFx0XHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcbjExMjA6XHRcdFx0XHR1ZHA2X3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XG4xMTIxOlx0XG4xMTIyOlx0XHRcdGlmICghdWgtXHUwMDNlY2hlY2sgXHUwMDI2XHUwMDI2ICF1ZHBfZ2V0X25vX2NoZWNrNl9yeChzaykpIHtcbjExMjM6XHRcdFx0XHRpZiAocmVmY291bnRlZClcbjExMjQ6XHRcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbjExMjU6XHRcdFx0XHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xuMTEyNjpcdFx0XHR9XG4xMTI3Olx0XG4xMTI4Olx0XHRcdHJldCA9IHVkcDZfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcbjExMjk6XHRcdFx0aWYgKHJlZmNvdW50ZWQpXG4xMTMwOlx0XHRcdFx0c29ja19wdXQoc2spO1xuMTEzMTpcdFx0XHRyZXR1cm4gcmV0O1xuMTEzMjpcdFx0fVxuMTEzMzpcdFxuMTEzNDpcdFx0LypcbjExMzU6XHRcdCAqXHRNdWx0aWNhc3QgcmVjZWl2ZSBjb2RlXG4xMTM2Olx0XHQgKi9cbjExMzc6XHRcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGRhZGRyKSlcbjExMzg6XHRcdFx0cmV0dXJuIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgc2FkZHIsIGRhZGRyKTtcbjExMzk6XHRcbjExNDA6XHRcdC8qIFVuaWNhc3QgKi9cbjExNDE6XHRcdHNrID0gX191ZHA2X2xpYl9sb29rdXBfc2tiKHNrYiwgdWgtXHUwMDNlc291cmNlLCB1aC1cdTAwM2VkZXN0KTtcbjExNDI6XHRcdGlmIChzaykge1xuMTE0MzpcdFx0XHRpZiAoIXVoLVx1MDAzZWNoZWNrIFx1MDAyNlx1MDAyNiAhdWRwX2dldF9ub19jaGVjazZfcngoc2spKVxuMTE0NDpcdFx0XHRcdGdvdG8gcmVwb3J0X2NzdW1fZXJyb3I7XG4xMTQ1Olx0XHRcdHJldHVybiB1ZHA2X3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XG4xMTQ2Olx0XHR9XG4xMTQ3Olx0bm9fc2s6XG4xMTQ4Olx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xuMTE0OTpcdFxuMTE1MDpcdFx0aWYgKCF1aC1cdTAwM2VjaGVjaylcbjExNTE6XHRcdFx0Z290byByZXBvcnRfY3N1bV9lcnJvcjtcbjExNTI6XHRcbjExNTM6XHRcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxuMTE1NDpcdFx0XHRnb3RvIGRpc2NhcmQ7XG4xMTU1Olx0XHRuZl9yZXNldF9jdChza2IpO1xuMTE1NjpcdFxuMTE1NzpcdFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbjExNTg6XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuMTE1OTpcdFxuMTE2MDpcdFx0X19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfTk9QT1JUUyk7XG4xMTYxOlx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDApO1xuMTE2MjpcdFxuMTE2MzpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG4xMTY0Olx0XHRyZXR1cm4gMDtcbjExNjU6XHRcbjExNjY6XHRzaG9ydF9wYWNrZXQ6XG4xMTY3Olx0XHRpZiAocmVhc29uID09IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKVxuMTE2ODpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMzkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFN0YWNrIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxvZ2ljLiBgdWRwdjZfcmN2YCBoYW5kcyBvZmYgaXRzIHJldHVybiB2YWx1ZSB0byBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gVGhlbiwgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAgY29ycmVjdGx5IGNoZWNrcyBpZiB0aGF0IHJldHVybiB2YWx1ZSwgYHJldGAsIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCByZXN1Ym1pdHMgdGhlIHBhY2tldCBpZiBpdCBpcy4gU28gdGhlIGZhY3QgdGhhdCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyByZXR1cm5pbmcgYSBwb3NpdGl2ZSBgcmV0YCBpcyBrZXkgYW5kIHRyaWdnZXJzIHRoZSBleHBlY3RlZCByZXN1Ym1pc3Npb24uIEdvb2QuCgpUaGlzIHBhdGNoLCBmcm9tIHdoYXQgSSBnYXRoZXIsIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBmdW5jdGlvbmFsIGRlZmljaWVuY3kgaW4gdGhlIGNvcmUgVURQIG11bHRpY2FzdCBkZWxpdmVyeSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNwZWNpZmljYWxseSwgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQcyB3ZXJlbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcGFzc2VkIGRvd24gdG8gdGhlaXIgaW5uZXIgcHJvdG9jb2xzLCBsaWtlIEdSRS4gVGhleSB3ZXJlIGdldHRpbmcgZHJvcHBlZCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIGJ1Zy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0ICphYnNvbHV0ZWx5KiB3YXJyYW50cyBzZXJpb3VzIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBuZWVkcyB0byBiZSBmdXp6ZWQuIFRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucywgb2J2aW91c2x5LCBhcmUgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBUaGVzZSBhcmUgdGhlIGNoYW5nZWQgZnVuY3Rpb25zIGFuZCBhcmUgbXkgcHJpbWFyeSB0YXJnZXRzIGZvciBgRm9jdXNTeW1ib2xzYC4KCk5leHQsIEkgbmVlZCB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmlnaHQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaGUgdGVzdCBzY3JpcHQgcmVmZXJlbmNlcyBgQ09ORklHX05FVF9GT1VgLiBIbW0sIHRoZSBzY3JpcHQgc2VlbXMgdG8gc3VnZ2VzdCBgQ09ORklHX05FVF9GT1VgIGlzIGJ1aWx0LWluLiBCdXQgdGhlIGNvbmZpZyBmaWxlIHNldHMgYENPTkZJR19JUFY2X0ZPVT1tYCBhbmQgYENPTkZJR19JUFY2X0ZPVV9UVU5ORUw9bWAuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgaG93IEZPVSBpcyBjb25maWd1cmVkIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9GT1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMjAtXG5uZXQvaXB2NC9LY29uZmlnOjMyMTpjb25maWcgTkVUX0ZPVVxubmV0L2lwdjQvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtJUDogRm9vIChJUCBwcm90b2NvbHMpIG92ZXIgVURQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMjktXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cdGJvb2wgXCYjMzQ7SVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIElQdjYgb3ZlciBVRFAgVHVubmVsIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgQ09ORklHX0lQVjZfRk9VYC4gSXQmIzM5O3MgYSBrZXkgaW5kaWNhdG9yLiBJZiB0aGlzIGlzIGVuYWJsZWQsIHRoZW4gd2UmIzM5O3JlIHNldCB1cCB0byBoYW5kbGUgSVB2NiB0cmFmZmljIGVuY2Fwc3VsYXRlZCB3aXRoaW4gVURQIHR1bm5lbHMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIG9mdGVuIGEgcHJlcmVxdWlzaXRlIGZvciBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbnMsIHBvdGVudGlhbGx5IGludm9sdmluZyBzb21ldGhpbmcgbGlrZSBJUHY2IG92ZXIgYSBuZXR3b3JrIHRoYXQgb25seSBuYXRpdmVseSBzdXBwb3J0cyBJUHY0LCBvciBwZXJoYXBzIHRvIGltcGxlbWVudCBhIFZQTiBzb2x1dGlvbi4gU28sIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGZlYXR1cmUgaXMgZW5hYmxlZC4gT3RoZXJ3aXNlLCB0aGUgYmVoYXZpb3IgSSBhbSBleHBlY3RpbmcgbWlnaHQgbm90IHdvcmsgYXMgaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X0ZPVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTIxMD1jb25maWcgSVBWNl9HUkVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQzMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGBDT05GSUdfTkVUX0ZPVWAgLSB0aGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUHY0LCByaWdodD8mIzM0OyBNeSBtZW1vcnkgaXMgam9nZ2luZywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRvIGdldCB0byB0aG9zZSBtb2RpZmllZCBjb2RlIHNlY3Rpb25zLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBVRFAgbXVsdGljYXN0IHJlY2VwdGlvbiBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LgoKTm93LCB0byB0cmlnZ2VyIHRoYXQgc3BlY2lmaWMgYHJldCAmZ3Q7IDBgIHBhdGgg4oCTIHRoZSByZXN1Ym1pc3Npb24gYXNwZWN0IOKAkyB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBhIFVEUCBlbmNhcHN1bGF0aW9uIHByb3RvY29sLiBUaGF0IHByb3RvY29sIG5lZWRzIHRvIGhhdmUgYW4gYGVuY2FwX3JjdmAgaG9vayB0aGF0IHJldHVybnMgYSB2YWx1ZSBsZXNzIHRoYW4gemVyby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LCBidXQgZnJvbSBteSBleHBlcmllbmNlLCBGT1Ugc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIGEgVURQIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgdGhhdCBiZWhhdmVzIHRoYXQgd2F5LiBUaGF0IHNvdW5kcyByaWdodCB0byBtZSwgc28gSSB0aGluayB0aGF0IEZPVSBpcyBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLgoKU28sIGxldCBtZSBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdC4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYG5ldC9pcHY0L2ZvdS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGZvdV9yZWN2X3B1bGxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBGT1UgaGFuZGxlcyByZWNlcHRpb24gYW5kIGlmIGl0cyBgZW5jYXBfcmN2YCBmdW5jdGlvbiBpcyBpbmRlZWQgdGhlIHRoaW5nIHRoYXQgaXMgcmV0dXJuaW5nIG5lZ2F0aXZlIHZhbHVlcyB0aGF0IHRyaWdnZXIgcmVzdWJtaXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3VfcmVjdl9wdWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZvdV9jb3JlLmM9NTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm91ICpmb3VfZnJvbV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTU1LVxubmV0L2lwdjQvZm91X2NvcmUuYzo1NjpzdGF0aWMgaW50IGZvdV9yZWN2X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZvdSAqZm91LCBzaXplX3QgbGVuKVxubmV0L2lwdjQvZm91X2NvcmUuYy01Ny17XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYz03Mz1zdGF0aWMgaW50IGZvdV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy03OS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6ODA6XHRpZiAoZm91X3JlY3ZfcHVsbChza2IsIGZvdSwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSlcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtODEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyMD1zdGF0aWMgaW50IGd1ZV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xNTctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjE1ODpcdFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTE1OS1cdFx0XHRnb3RvIGRyb3A7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBwcm9ncmFtbWluZywgcG9zc2libHkgZGVidWdnaW5nOgoKKipEaXZpbmcgaW50byBgZm91X3VkcF9yZWN2YCoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGZvdV91ZHBfcmVjdmAuIFRoYXQgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlbmNhcHN1bGF0ZWQgVURQIHRyYWZmaWMsIHByb2JhYmx5IHNvbWUgc29ydCBvZiB0dW5uZWwgb3Igb3ZlcmxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIHJlY2VpdmUgZW5kLiBXaGF0JiMzOTtzIHRoZSBzdGF0ZSBvZiB0aGUgc3RhY2s/IEFyZSB3ZSBkcm9wcGluZyBwYWNrZXRzPyBBcmUgd2UgaGFuZGxpbmcgdGhlIGRlY2Fwc3VsYXRpb24gY29ycmVjdGx5PyBJcyB0aGVyZSBidWZmZXIgZXhoYXVzdGlvbj8gVGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBpbmNvbWluZyBkYXRhLCBzbyBsZXQmIzM5O3Mgc3RhcnQgaGVyZS4gV2UgbmVlZCB0byBkaXNzZWN0IHRoaXMsIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCBpdHMgZXJyb3IgaGFuZGxpbmcsIGFuZCB0cmFjZSB0aGUgcGFja2V0IGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSwgbWVudGFsbHkgbWFwIG91dCB0aGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgb2JzZXJ2ZWQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZvdV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDczOlx0c3RhdGljIGludCBmb3VfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA3NDpcdHtcbiAgNzU6XHRcdHN0cnVjdCBmb3UgKmZvdSA9IGZvdV9mcm9tX3NvY2soc2spO1xuICA3NjpcdFxuICA3NzpcdFx0aWYgKCFmb3UpXG4gIDc4Olx0XHRcdHJldHVybiAxO1xuICA3OTpcdFxuICA4MDpcdFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG4gIDgxOlx0XHRcdGdvdG8gZHJvcDtcbiAgODI6XHRcbiAgODM6XHRcdHJldHVybiAtZm91LVx1MDAzZXByb3RvY29sO1xuICA4NDpcdFxuICA4NTpcdGRyb3A6XG4gIDg2Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgODc6XHRcdHJldHVybiAwO1xuICA4ODpcdH1cbiAgODk6XHRcbiAgOTA6XHRzdGF0aWMgc3RydWN0IGd1ZWhkciAqZ3VlX3JlbWNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGd1ZWhkciAqZ3VlaGRyLFxuICA5MTpcdFx0XHRcdFx0ICB2b2lkICpkYXRhLCBzaXplX3QgaGRybGVuLCB1OCBpcHByb3RvLFxuICA5MjpcdFx0XHRcdFx0ICBib29sIG5vcGFydGlhbClcbiAgOTM6XHR7XG4gIDk0Olx0XHRfX2JlMTYgKnBkID0gZGF0YTtcbiAgOTU6XHRcdHNpemVfdCBzdGFydCA9IG50b2hzKHBkWzBdKTtcbiAgOTY6XHRcdHNpemVfdCBvZmZzZXQgPSBudG9ocyhwZFsxXSk7XG4gIDk3Olx0XHRzaXplX3QgcGxlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBoZHJsZW4gJiM0MztcbiAgOTg6XHRcdCAgICBtYXhfdChzaXplX3QsIG9mZnNldCAmIzQzOyBzaXplb2YodTE2KSwgc3RhcnQpO1xuICA5OTpcdFxuIDEwMDpcdFx0aWYgKHNrYi1cdTAwM2VyZW1jc3VtX29mZmxvYWQpXG4gMTAxOlx0XHRcdHJldHVybiBndWVoZHI7XG4gMTAyOlx0XG4gMTAzOlx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBwbGVuKSlcbiAxMDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTA1Olx0XHRndWVoZHIgPSAoc3RydWN0IGd1ZWhkciAqKVx1MDAyNnVkcF9oZHIoc2tiKVsxXTtcbiAxMDY6XHRcbiAxMDc6XHRcdHNrYl9yZW1jc3VtX3Byb2Nlc3Moc2tiLCAodm9pZCAqKWd1ZWhkciAmIzQzOyBoZHJsZW4sXG4gMTA4Olx0XHRcdFx0ICAgIHN0YXJ0LCBvZmZzZXQsIG5vcGFydGlhbCk7XG4gMTA5Olx0XG4gMTEwOlx0XHRyZXR1cm4gZ3VlaGRyO1xuIDExMTpcdH1cbiAxMTI6XHRcbiAxMTM6XHRzdGF0aWMgaW50IGd1ZV9jb250cm9sX21lc3NhZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGd1ZWhkciAqZ3VlaGRyKVxuIDExNDpcdHtcbiAxMTU6XHRcdC8qIE5vIHN1cHBvcnQgeWV0ICovXG4gMTE2Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxMTc6XHRcdHJldHVybiAwO1xuIDExODpcdH1cbiAxMTk6XHRcbiAxMjA6XHRzdGF0aWMgaW50IGd1ZV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gMTIxOlx0e1xuIDEyMjpcdFx0c3RydWN0IGZvdSAqZm91ID0gZm91X2Zyb21fc29jayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTc2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVEUCBFbmNhcHN1bGF0aW9uIFByb3RvY29sIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgZm91X3VkcF9yZWN2YCBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgbmVnYXRpdmUgb2YgdGhlIEZPVSBwcm90b2NvbCBudW1iZXIuIEV4Y2VsbGVudC4gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkIHRvIGVzdGFibGlzaCB0byBtb3ZlIGZvcndhcmQuIFNvIGVuYWJsaW5nIGBORVRfRk9VYCBpbiB0aGUga2VybmVsIGNvbmZpZyBzZWVtcyBsaWtlIGEgc291bmQgY2hvaWNlIGJhc2VkIG9uIHRoaXMuCgpOb3csIGEgbW9yZSBnZW5lcmFsIHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IGFyZSB0aGVyZSBvdGhlciBVRFAgZW5jYXBzdWxhdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhbHNvIHVzZSBhIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBpbiBhIHNpbWlsYXIgd2F5IHRvIHNpZ25hbCBwcm90b2NvbCB0eXBlPyBJZiBzbywgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlbS4gQSBicm9hZCBzZWFyY2ggZm9yIGBlbmNhcF9yY3ZgIGltcGxlbWVudGF0aW9ucyBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwYXR0ZXJucy4gSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgcmV0dXJuIHZhbHVlcy4gVW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBsYW5kc2NhcGUgb2YgdGhlIGBlbmNhcF9yY3ZgIGltcGxlbWVudGF0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VuY2FwX3JjdiA9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX25ldC5jPTI1OT1zdGF0aWMgc3RydWN0IHNvY2tldCAqcnhlX3NldHVwX3VkcF90dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBfX2JlMTYgcG9ydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0yODItXHR0bmxfY2ZnLmVuY2FwX3R5cGUgPSAxO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmM6MjgzOlx0dG5sX2NmZy5lbmNhcF9yY3YgPSByeGVfdWRwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0yODQtXG4tLVxuZHJpdmVycy9uZXQvYW10LmM9Mjk3MT1zdGF0aWMgaW50IGFtdF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBhbXRfZGV2ICphbXQpXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtMjk4My1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC9hbXQuYzoyOTg0Olx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSBhbXRfcmN2O1xuZHJpdmVycy9uZXQvYW10LmMtMjk4NS1cdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IGFtdF9lcnJfbG9va3VwO1xuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz0yNTU9c3RhdGljIGludCBiYXJldWRwX3NvY2tldF9jcmVhdGUoc3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCBfX2JlMTYgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY3LVx0dHVubmVsX2NmZy5lbmNhcF90eXBlID0gMTtcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzoyNjg6XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY5LVx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gYmFyZXVkcF9lcnJfbG9va3VwO1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTAyNS1cdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEwMjY6XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBnZW5ldmVfdWRwX2VuY2FwX2Vycl9sb29rdXA7XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTQwMz1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNDMzLVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTQzNDpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzUtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTY0OD1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTY4OC1cdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE2ODk6XHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9ndHAuYy0xNjkwLVx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBndHBfZW5jYXBfZGVzdHJveTtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTM4ND1pbnQgb3Zwbl91ZHBfc29ja2V0X2F0dGFjaChzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKm92cG5fc29jaywgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM4OS1cdFx0LmVuY2FwX3R5cGUgPSBVRFBfRU5DQVBfT1ZQTklOVURQLFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYzozOTA6XHRcdC5lbmNhcF9yY3YgPSBvdnBuX3VkcF9lbmNhcF9yZWN2LFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0zOTEtXHRcdC5lbmNhcF9kZXN0cm95ID0gb3Zwbl91ZHBfZW5jYXBfZGVzdHJveSxcbi0tXG5kcml2ZXJzL25ldC9wZmNwLmM9MTU1PXN0YXRpYyBzdHJ1Y3Qgc29jayAqcGZjcF9jcmVhdGVfc29jayhzdHJ1Y3QgcGZjcF9kZXYgKnBmY3ApXG4tLVxuZHJpdmVycy9uZXQvcGZjcC5jLTE3Mi1cdHR1bmNmZy5za191c2VyX2RhdGEgPSBwZmNwO1xuZHJpdmVycy9uZXQvcGZjcC5jOjE3MzpcdHR1bmNmZy5lbmNhcF9yY3YgPSBwZmNwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9wZmNwLmMtMTc0LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSAxO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNTc3PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgaXB2Nixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzYxNC1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzYxNTpcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gdnhsYW5fcmN2O1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM2MTYtXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSB2eGxhbl9lcnJfbG9va3VwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYz0zNDg9aW50IHdnX3NvY2tldF9pbml0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCB1MTYgcG9ydClcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMtMzU0LVx0XHQuZW5jYXBfdHlwZSA9IDEsXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmM6MzU1Olx0XHQuZW5jYXBfcmN2ID0gd2dfcmVjZWl2ZVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTM1Ni1cdH07XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYz01NjY9c3RhdGljIGludCBmb3VfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZvdV9jZmcgKmNmZyxcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTYwMi1cdGNhc2UgRk9VX0VOQ0FQX0RJUkVDVDpcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6NjAzOlx0XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGZvdV91ZHBfcmVjdjtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNjA0LVx0XHR0dW5uZWxfY2ZnLmdyb19yZWNlaXZlID0gZm91X2dyb19yZWNlaXZlO1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNjA4LVx0Y2FzZSBGT1VfRU5DQVBfR1VFOlxubmV0L2lwdjQvZm91X2NvcmUuYzo2MDk6XHRcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZ3VlX3VkcF9yZWN2O1xubmV0L2lwdjQvZm91X2NvcmUuYy02MTAtXHRcdHR1bm5lbF9jZmcuZ3JvX3JlY2VpdmUgPSBndWVfZ3JvX3JlY2VpdmU7XG4tLVxubmV0L2lwdjQvdWRwLmM9MjM1MD1zdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjM4MC1cdFx0LyogaWYgd2UmIzM5O3JlIG92ZXJseSBzaG9ydCwgbGV0IFVEUCBoYW5kbGUgaXQgKi9cbm5ldC9pcHY0L3VkcC5jOjIzODE6XHRcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cdTAwM2VlbmNhcF9yY3YpO1xubmV0L2lwdjQvdWRwLmMtMjM4Mi1cdFx0aWYgKGVuY2FwX3Jjdikge1xuLS1cbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jPTcxPXZvaWQgc2V0dXBfdWRwX3R1bm5lbF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTgyLVx0dWRwX3NrKHNrKS1cdTAwM2VlbmNhcF90eXBlID0gY2ZnLVx1MDAzZWVuY2FwX3R5cGU7XG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYzo4MzpcdHVkcF9zayhzayktXHUwMDNlZW5jYXBfcmN2ID0gY2ZnLVx1MDAzZWVuY2FwX3Jjdjtcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTg0LVx0dWRwX3NrKHNrKS1cdTAwM2VlbmNhcF9lcnJfcmN2ID0gY2ZnLVx1MDAzZWVuY2FwX2Vycl9yY3Y7XG4tLVxubmV0L2lwdjYvdWRwLmM9ODA2PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTgzMy1cdFx0LyogaWYgd2UmIzM5O3JlIG92ZXJseSBzaG9ydCwgbGV0IFVEUCBoYW5kbGUgaXQgKi9cbm5ldC9pcHY2L3VkcC5jOjgzNDpcdFx0ZW5jYXBfcmN2ID0gUkVBRF9PTkNFKHVwLVx1MDAzZWVuY2FwX3Jjdik7XG5uZXQvaXB2Ni91ZHAuYy04MzUtXHRcdGlmIChlbmNhcF9yY3YpIHtcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNDM9c3RhdGljIHZvaWQgbDJ0cF90dW5uZWxfZnJlZShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNTQtXHRcdFx0V1JJVEVfT05DRSh1ZHBfc2soc2spLVx1MDAzZWVuY2FwX3R5cGUsIDApO1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTU1Olx0XHRcdHVkcF9zayhzayktXHUwMDNlZW5jYXBfcmN2ID0gTlVMTDtcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE1Ni1cdFx0XHR1ZHBfc2soc2spLVx1MDAzZWVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jPTE2NDM9aW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4MS1cdFx0XHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9MMlRQSU5VRFAsXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxNjgyOlx0XHRcdC5lbmNhcF9yY3YgPSBsMnRwX3VkcF9lbmNhcF9yZWN2LFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4My1cdFx0XHQuZW5jYXBfZXJyX3JjdiA9IGwydHBfdWRwX2VuY2FwX2Vycl9yZWN2LFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xNjI9c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cdHR1bmNmZy5lbmNhcF90eXBlID0gVURQX0VOQ0FQX1JYUlBDO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE5NDpcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTk1LVx0dHVuY2ZnLmVuY2FwX2Vycl9yY3YgPSByeHJwY19lbmNhcF9lcnJfcmN2O1xuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9ODQ5PWludCBzY3RwX3VkcF9zb2NrX3N0YXJ0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg2NS1cdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcbm5ldC9zY3RwL3Byb3RvY29sLmM6ODY2Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IHNjdHBfdWRwX3Jjdjtcbm5ldC9zY3RwL3Byb3RvY29sLmMtODY3LVx0dHVuY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBzY3RwX3VkcF92NF9lcnI7XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy04ODctXHR0dW5jZmcuZW5jYXBfdHlwZSA9IDE7XG5uZXQvc2N0cC9wcm90b2NvbC5jOjg4ODpcdHR1bmNmZy5lbmNhcF9yY3YgPSBzY3RwX3VkcF9yY3Y7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTg4OS1cdHR1bmNmZy5lbmNhcF9lcnJfbG9va3VwID0gc2N0cF91ZHBfdjZfZXJyO1xuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jPTY2Mj1zdGF0aWMgaW50IHRpcGNfdWRwX2VuYWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2JlYXJlciAqYixcbi0tXG5uZXQvdGlwYy91ZHBfbWVkaWEuYy03NzUtXHR0dW5jZmcuZW5jYXBfdHlwZSA9IDE7XG5uZXQvdGlwYy91ZHBfbWVkaWEuYzo3NzY6XHR0dW5jZmcuZW5jYXBfcmN2ID0gdGlwY191ZHBfcmVjdjtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTc3Ny1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyODEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgVURQIEVuY2Fwc3VsYXRpb24gUmVjZWl2ZXJzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBndWVfdWRwX3JlY3ZgLiBJIGtub3cgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjQvZm91X2NvcmUuY2AsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZXJlIGZvciBzdGFydGVycy4gSSByZW1lbWJlciB0aGF0JiMzOTtzIHRoZSBHZW5lcmljIFVEUCBFbmNhcHN1bGF0aW9uIHJlY2VpdmVyLiBUaGVuLCBJIG5lZWQgdG8gY29tcGFyZSB0aGF0IHRvIGBsMnRwX3VkcF9lbmNhcF9yZWN2YC4gVGhpcyBpcyBMMlRQIG92ZXIgVURQIGVuY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRyYWZmaWMgaXMgZmxvd2luZy4gSSB3aWxsIGNoZWNrIHRoZSByZWxhdGlvbnNoaXAgb2YgYm90aCwgc2luY2UgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSB3aG9sZSByZWNlaXZpbmcgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bDJ0cF91ZHBfZW5jYXBfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbDJ0cC5yc3Q9NjE5PWVuY2Fwc3VsYXRlZCBVRFAgc29ja2V0IGJ5IHNldHRpbmcgZW5jYXBfcmN2IGFuZCBlbmNhcF9kZXN0cm95XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbDJ0cC5yc3Q6NjIwOmNhbGxiYWNrcyBvbiB0aGUgVURQIHNvY2tldC4gbDJ0cF91ZHBfZW5jYXBfcmVjdiBpcyBjYWxsZWQgd2hlblxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2wydHAucnN0LTYyMS1wYWNrZXRzIGFyZSByZWNlaXZlZCBvbiB0aGUgc29ja2V0LiBsMnRwX3VkcF9lbmNhcF9kZXN0cm95IGlzIGNhbGxlZFxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jPTEwMDU9c3RhdGljIHZvaWQgbDJ0cF9zZXNzaW9uX3F1ZXVlX3B1cmdlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24pXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTAxNS0vKiBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIGhhbmRsZXIuIFNlZSBuZXQvaXB2NC91ZHAuYyBmb3IgZGV0YWlscy4gKi9cbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwMTY6aW50IGwydHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTAxNy17XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTExNC19XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMTE1OkVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdWRwX2VuY2FwX3JlY3YpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTExNi1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjQzPWludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTE2ODEtXHRcdFx0LmVuY2FwX3R5cGUgPSBVRFBfRU5DQVBfTDJUUElOVURQLFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY4MjpcdFx0XHQuZW5jYXBfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfcmVjdixcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE2ODMtXHRcdFx0LmVuY2FwX2Vycl9yY3YgPSBsMnRwX3VkcF9lbmNhcF9lcnJfcmVjdixcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yNTQ9dm9pZCBsMnRwX3JlY3ZfY29tbW9uKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjU2LVx0XHQgICAgICBpbnQgbGVuZ3RoKTtcbm5ldC9sMnRwL2wydHBfY29yZS5oOjI1NzppbnQgbDJ0cF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjU4LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9NDU3PXN0YXRpYyBpbnQgcHBwb2wydHBfYmFja2xvZ19yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTQ2MC1cbm5ldC9sMnRwL2wydHBfcHBwLmM6NDYxOlx0cmMgPSBsMnRwX3VkcF9lbmNhcF9yZWN2KHNrLCBza2IpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy00NjItXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjkwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgdHJvdWJsZXNob290aW5nL2FuYWx5emluZyBuZXR3b3JrIHRyYWZmaWMgb3IgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KCioqRGl2aW5nIGludG8gYGwydHBfdWRwX2VuY2FwX3JlY3ZgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgcHJvYmxlbSBhdCBoYW5kLi4uIHdoZXJlJiMzOTtzIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0PyBMZXQmIzM5O3MgY2hlY2sgYGwydHBfdWRwX2VuY2FwX3JlY3ZgLiYjMzQ7IFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgcmVjZWl2aW5nIEwyVFAgZW5jYXBzdWxhdGVkIHRyYWZmaWMgb3ZlciBVRFAsIHNvIHRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSByZWNlaXZlciwgdGhlIGdhdGVrZWVwZXIuIEFueXRoaW5nIGFtaXNzIHRoZXJlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGZsb3cgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB0aGUgY3VycmVudCBjb25kaXRpb25zLiBJdCBpcyBsaWtlbHkgdGhhdCB0aGUgY3VycmVudCBpc3N1ZSBsaWVzIHdpdGggdGhhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHByb2Nlc3MuIEkgd2lsbCBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbmRpY2F0aW9ucyBhcyB0byB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxNjpcdGludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwMTc6XHR7XG4xMDE4Olx0XHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uID0gTlVMTDtcbjEwMTk6XHRcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDtcbjEwMjA6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjEwMjE6XHRcdHVuc2lnbmVkIGNoYXIgKnB0ciwgKm9wdHI7XG4xMDIyOlx0XHR1MTYgaGRyZmxhZ3M7XG4xMDIzOlx0XHR1MTYgdmVyc2lvbjtcbjEwMjQ6XHRcdGludCBsZW5ndGg7XG4xMDI1Olx0XG4xMDI2Olx0XHQvKiBVRFAgaGFzIHZlcmlmaWVkIGNoZWNrc3VtICovXG4xMDI3Olx0XG4xMDI4Olx0XHQvKiBVRFAgYWx3YXlzIHZlcmlmaWVzIHRoZSBwYWNrZXQgbGVuZ3RoLiAqL1xuMTAyOTpcdFx0X19za2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG4xMDMwOlx0XG4xMDMxOlx0XHQvKiBTaG9ydCBwYWNrZXQ/ICovXG4xMDMyOlx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBMMlRQX0hEUl9TSVpFX01BWCkpXG4xMDMzOlx0XHRcdGdvdG8gcGFzcztcbjEwMzQ6XHRcbjEwMzU6XHRcdC8qIFBvaW50IHRvIEwyVFAgaGVhZGVyICovXG4xMDM2Olx0XHRvcHRyID0gc2tiLVx1MDAzZWRhdGE7XG4xMDM3Olx0XHRwdHIgPSBza2ItXHUwMDNlZGF0YTtcbjEwMzg6XHRcbjEwMzk6XHRcdC8qIEdldCBMMlRQIGhlYWRlciBmbGFncyAqL1xuMTA0MDpcdFx0aGRyZmxhZ3MgPSBudG9ocygqKF9fYmUxNiAqKXB0cik7XG4xMDQxOlx0XG4xMDQyOlx0XHQvKiBHZXQgcHJvdG9jb2wgdmVyc2lvbiAqL1xuMTA0MzpcdFx0dmVyc2lvbiA9IGhkcmZsYWdzIFx1MDAyNiBMMlRQX0hEUl9WRVJfTUFTSztcbjEwNDQ6XHRcbjEwNDU6XHRcdC8qIEdldCBsZW5ndGggb2YgTDJUUCBwYWNrZXQgKi9cbjEwNDY6XHRcdGxlbmd0aCA9IHNrYi1cdTAwM2VsZW47XG4xMDQ3Olx0XG4xMDQ4Olx0XHQvKiBJZiB0eXBlIGlzIGNvbnRyb2wgcGFja2V0LCBpdCBpcyBoYW5kbGVkIGJ5IHVzZXJzcGFjZS4gKi9cbjEwNDk6XHRcdGlmIChoZHJmbGFncyBcdTAwMjYgTDJUUF9IRFJGTEFHX1QpXG4xMDUwOlx0XHRcdGdvdG8gcGFzcztcbjEwNTE6XHRcbjEwNTI6XHRcdC8qIFNraXAgZmxhZ3MgKi9cbjEwNTM6XHRcdHB0ciAmIzQzOz0gMjtcbjEwNTQ6XHRcbjEwNTU6XHRcdGlmICh2ZXJzaW9uID09IEwyVFBfSERSX1ZFUl8yKSB7XG4xMDU2Olx0XHRcdHUxNiB0dW5uZWxfaWQsIHNlc3Npb25faWQ7XG4xMDU3Olx0XG4xMDU4Olx0XHRcdC8qIElmIGxlbmd0aCBpcyBwcmVzZW50LCBza2lwIGl0ICovXG4xMDU5Olx0XHRcdGlmIChoZHJmbGFncyBcdTAwMjYgTDJUUF9IRFJGTEFHX0wpXG4xMDYwOlx0XHRcdFx0cHRyICYjNDM7PSAyO1xuMTA2MTpcdFxuMTA2MjpcdFx0XHQvKiBFeHRyYWN0IHR1bm5lbCBhbmQgc2Vzc2lvbiBJRCAqL1xuMTA2MzpcdFx0XHR0dW5uZWxfaWQgPSBudG9ocygqKF9fYmUxNiAqKXB0cik7XG4xMDY0Olx0XHRcdHB0ciAmIzQzOz0gMjtcbjEwNjU6XHRcdFx0c2Vzc2lvbl9pZCA9IG50b2hzKCooX19iZTE2ICopcHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBsMnRwX3VkcF9lbmNhcF9yZWN2YCYjMzk7cyBDb25jbHVzaW9uKioKCk9rYXksIHRpbWUgdG8gemVybyBpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZW5kIG9mIHRoZSBgbDJ0cF91ZHBfZW5jYXBfcmVjdmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbmNvbWluZyBVRFAgZW5jYXBzdWxhdGVkIEwyVFAgdHJhZmZpYyBpcyBmaW5hbGx5IHByb2Nlc3NlZCwgb3IgaWYgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHRyaWdnZXJlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBhIHZ1bG5lcmFiaWxpdHkgKm1pZ2h0KiBleGlzdCwgb3IgaWYgdGhlIGN1cnJlbnQgY29kZSBoYW5kbGVzIGFsbCBhbnRpY2lwYXRlZCBzY2VuYXJpb3MuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGVuc3VyZSBwcm9wZXIgcGFja2V0IGhhbmRsaW5nLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBtYWxmb3JtZWQgcGFja2V0cyBhcmUgY2F1c2luZyBpc3N1ZXM/IExldCBtZSBjaGVjayBmb3IgdW5leHBlY3RlZCBlcnJvciByZXR1cm5zIGZyb20gdGhlIGxvd2VyIGxheWVycywgYW5kIGNvbnNpZGVyIHRoZWlyIGltcGxpY2F0aW9ucy4gSSBhbSBsb29raW5nIGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCBwcm9ibGVtcyBhcyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUgb2Ygd2hhdCBoYXBwZW5zIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgcmVjZWl2aW5nIHJvdXRpbmUsIGFuZCBpZiBpdCYjMzk7cyB0aGUgcmlnaHQgZmluYWwgcmVzdGluZyBwbGFjZSBmb3IgdGhlIHJlY2VpdmVkIHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjY6XHRcdFx0cHRyICYjNDM7PSAyO1xuMTA2NzpcdFxuMTA2ODpcdFx0XHRzZXNzaW9uID0gbDJ0cF92Ml9zZXNzaW9uX2dldChuZXQsIHR1bm5lbF9pZCwgc2Vzc2lvbl9pZCk7XG4xMDY5Olx0XHR9IGVsc2Uge1xuMTA3MDpcdFx0XHR1MzIgc2Vzc2lvbl9pZDtcbjEwNzE6XHRcbjEwNzI6XHRcdFx0cHRyICYjNDM7PSAyO1x0Lyogc2tpcCByZXNlcnZlZCBiaXRzICovXG4xMDczOlx0XHRcdHNlc3Npb25faWQgPSBudG9obCgqKF9fYmUzMiAqKXB0cik7XG4xMDc0Olx0XHRcdHB0ciAmIzQzOz0gNDtcbjEwNzU6XHRcbjEwNzY6XHRcdFx0c2Vzc2lvbiA9IGwydHBfdjNfc2Vzc2lvbl9nZXQobmV0LCBzaywgc2Vzc2lvbl9pZCk7XG4xMDc3Olx0XHR9XG4xMDc4Olx0XG4xMDc5Olx0XHRpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24tXHUwMDNlcmVjdl9za2IpIHtcbjEwODA6XHRcdFx0aWYgKHNlc3Npb24pXG4xMDgxOlx0XHRcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbjEwODI6XHRcbjEwODM6XHRcdFx0LyogTm90IGZvdW5kPyBQYXNzIHRvIHVzZXJzcGFjZSB0byBkZWFsIHdpdGggKi9cbjEwODQ6XHRcdFx0Z290byBwYXNzO1xuMTA4NTpcdFx0fVxuMTA4NjpcdFxuMTA4NzpcdFx0dHVubmVsID0gc2Vzc2lvbi1cdTAwM2V0dW5uZWw7XG4xMDg4Olx0XG4xMDg5Olx0XHQvKiBDaGVjayBwcm90b2NvbCB2ZXJzaW9uICovXG4xMDkwOlx0XHRpZiAodmVyc2lvbiAhPSB0dW5uZWwtXHUwMDNldmVyc2lvbikge1xuMTA5MTpcdFx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xuMTA5MjpcdFx0XHRnb3RvIGludmFsaWQ7XG4xMDkzOlx0XHR9XG4xMDk0Olx0XG4xMDk1Olx0XHRpZiAodmVyc2lvbiA9PSBMMlRQX0hEUl9WRVJfMyBcdTAwMjZcdTAwMjZcbjEwOTY6XHRcdCAgICBsMnRwX3YzX2Vuc3VyZV9vcHRfaW5fbGluZWFyKHNlc3Npb24sIHNrYiwgXHUwMDI2cHRyLCBcdTAwMjZvcHRyKSkge1xuMTA5NzpcdFx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xuMTA5ODpcdFx0XHRnb3RvIGludmFsaWQ7XG4xMDk5Olx0XHR9XG4xMTAwOlx0XG4xMTAxOlx0XHRsMnRwX3JlY3ZfY29tbW9uKHNlc3Npb24sIHNrYiwgcHRyLCBvcHRyLCBoZHJmbGFncywgbGVuZ3RoKTtcbjExMDI6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG4xMTAzOlx0XG4xMTA0Olx0XHRyZXR1cm4gMDtcbjExMDU6XHRcbjExMDY6XHRpbnZhbGlkOlxuMTEwNzpcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnR1bm5lbC1cdTAwM2VzdGF0cy5yeF9pbnZhbGlkKTtcbjExMDg6XHRcbjExMDk6XHRwYXNzOlxuMTExMDpcdFx0LyogUHV0IFVEUCBoZWFkZXIgYmFjayAqL1xuMTExMTpcdFx0X19za2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG4xMTEyOlx0XG4xMTEzOlx0XHRyZXR1cm4gMTtcbjExMTQ6XHR9XG4xMTE1Olx0RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF91ZHBfZW5jYXBfcmVjdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgUGFja2V0IFJlY2VwdGlvbioqCgpPa2F5LCBzbyBgbDJ0cF91ZHBfZW5jYXBfcmVjdmAgaXMgdGVsbGluZyBtZSBzb21ldGhpbmcgaW1wb3J0YW50LiBJdCYjMzk7cyByZXR1cm5pbmcgYSAxIGlmIGEgcGFja2V0IG5lZWRzIHRvIGJlIHBhc3NlZCB1cCB0byB1c2Vyc3BhY2UgdmlhIFVEUC4gQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJiMzOTt0KiogcmV0dXJuIGFueXRoaW5nIG5lZ2F0aXZlLiBUaGF0IGVsaW1pbmF0ZXMgc29tZSBwb3NzaWJsZSBhdmVudWVzIG9mIGludmVzdGlnYXRpb24uIFRoaXMgaXMgdXNlZnVsIGRhdGEuCgpUaGUgbmVnYXRpdmUgcmV0dXJuIHZhbHVlcywgdGhlbiwgYXJlIHByaW1hcmlseSBjb21pbmcgZnJvbSBgTkVUX0ZPVWAuIFdlIHNob3VsZCBjaGVjayBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAgdG8gZmluZCB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXJldWRwX3VkcF9lbmNhcF9yZWN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JhcmV1ZHAuYz00OT1zdHJ1Y3QgYmFyZXVkcF9kZXYge1xuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy02MC1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzo2MTpzdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTYyLXtcbi0tXG5kcml2ZXJzL25ldC9iYXJldWRwLmM9MjU1PXN0YXRpYyBpbnQgYmFyZXVkcF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgX19iZTE2IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTI2Ny1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC9iYXJldWRwLmM6MjY4Olx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSBiYXJldWRwX3VkcF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTI2OS1cdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IGJhcmV1ZHBfZXJyX2xvb2t1cDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBwcm9ncmFtbWluZzoKCioqQW5hbHl6aW5nIHRoZSBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgYSBiYXJlIFVEUCBlbmNhcHN1bGF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBsaWtlbHkgb24gdGhlIGRldGFpbHMgb2YgcmVjZWl2aW5nIFVEUCBwYWNrZXRzIHRoYXQgYXJlIHNvbWVob3cgJiMzNDtlbmNhcHN1bGF0ZWQuJiMzNDsgVGhpcyBzdWdnZXN0cyBhIHByb3RvY29sIG9yIG1lY2hhbmlzbSBvbiB0b3Agb2Ygc3RhbmRhcmQgVURQLCBhbmQgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzOiBpcyBpdCBhIHR1bm5lbCwgYSBjdXN0b20gZnJhbWluZyBmb3JtYXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJhdyBpbmNvbWluZyBkYXRhZ3JhbSBhbmQgZXh0cmFjdHMgdGhlIHJlbGV2YW50IGVuY2Fwc3VsYXRlZCBkYXRhLiBLZXkgcXVlc3Rpb25zIEkgaGF2ZSBhcmUgd2hhdCB0aGUgZXhwZWN0ZWQgZGF0YWdyYW0gc3RydWN0dXJlIGlzLCB0aGUgbWV0aG9kcyB1c2VkIHRvIGRldGVybWluZSBwYWNrZXQgYm91bmRhcmllcyBpZiBhbnksIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWFsZm9ybWVkIG9yIGluY29tcGxldGUgZGF0YS4gTXkgbmV4dCBzdGVwcyBpbnZvbHZlIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLCBkYXRhIGJ1ZmZlcnMsIGFuZCBhbnkgc3RhdGUgdmFyaWFibGVzIHVzZWQgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYmFyZXVkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MTpcdHN0YXRpYyBpbnQgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IG1ldGFkYXRhX2RzdCAqdHVuX2RzdCA9IE5VTEw7XG4gIDY0Olx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhrZXkpID0geyB9O1xuICA2NTpcdFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwO1xuICA2NjpcdFx0dW5zaWduZWQgc2hvcnQgZmFtaWx5O1xuICA2NzpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiAgNjg6XHRcdF9fYmUxNiBwcm90bztcbiAgNjk6XHRcdHZvaWQgKm9pcGg7XG4gIDcwOlx0XHRpbnQgZXJyO1xuICA3MTpcdFx0aW50IG5oO1xuICA3MjpcdFxuICA3MzpcdFx0YmFyZXVkcCA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xuICA3NDpcdFx0aWYgKCFiYXJldWRwKVxuICA3NTpcdFx0XHRnb3RvIGRyb3A7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09ICBodG9ucyhFVEhfUF9JUCkpXG4gIDc4Olx0XHRcdGZhbWlseSA9IEFGX0lORVQ7XG4gIDc5Olx0XHRlbHNlXG4gIDgwOlx0XHRcdGZhbWlseSA9IEFGX0lORVQ2O1xuICA4MTpcdFxuICA4MjpcdFx0aWYgKGJhcmV1ZHAtXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSkge1xuICA4MzpcdFx0XHRfX3U4IGlwdmVyc2lvbjtcbiAgODQ6XHRcbiAgODU6XHRcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBCQVJFVURQX0JBU0VfSExFTiwgXHUwMDI2aXB2ZXJzaW9uLFxuICA4NjpcdFx0XHRcdFx0ICBzaXplb2YoaXB2ZXJzaW9uKSkpIHtcbiAgODc6XHRcdFx0XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoYmFyZXVkcC1cdTAwM2VkZXYpO1xuICA4ODpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODk6XHRcdFx0fVxuICA5MDpcdFx0XHRpcHZlcnNpb24gXHUwMDNlXHUwMDNlPSA0O1xuICA5MTpcdFxuICA5MjpcdFx0XHRpZiAoaXB2ZXJzaW9uID09IDQpIHtcbiAgOTM6XHRcdFx0XHRwcm90byA9IGh0b25zKEVUSF9QX0lQKTtcbiAgOTQ6XHRcdFx0fSBlbHNlIGlmIChpcHZlcnNpb24gPT0gNiBcdTAwMjZcdTAwMjYgYmFyZXVkcC1cdTAwM2VtdWx0aV9wcm90b19tb2RlKSB7XG4gIDk1Olx0XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgOTY6XHRcdFx0fSBlbHNlIHtcbiAgOTc6XHRcdFx0XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoYmFyZXVkcC1cdTAwM2VkZXYpO1xuICA5ODpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgOTk6XHRcdFx0fVxuIDEwMDpcdFx0fSBlbHNlIGlmIChiYXJldWRwLVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9NUExTX1VDKSkge1xuIDEwMTpcdFx0XHRzdHJ1Y3QgaXBoZHIgKnR1bm5lbF9oZHI7XG4gMTAyOlx0XG4gMTAzOlx0XHRcdHR1bm5lbF9oZHIgPSAoc3RydWN0IGlwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gMTA0Olx0XHRcdGlmICh0dW5uZWxfaGRyLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIDEwNTpcdFx0XHRcdGlmICghaXB2NF9pc19tdWx0aWNhc3QodHVubmVsX2hkci1cdTAwM2VkYWRkcikpIHtcbiAxMDY6XHRcdFx0XHRcdHByb3RvID0gYmFyZXVkcC1cdTAwM2VldGhlcnR5cGU7XG4gMTA3Olx0XHRcdFx0fSBlbHNlIGlmIChiYXJldWRwLVx1MDAzZW11bHRpX3Byb3RvX21vZGUgXHUwMDI2XHUwMDI2XG4gMTA4Olx0XHRcdFx0XHQgICBpcHY0X2lzX211bHRpY2FzdCh0dW5uZWxfaGRyLVx1MDAzZWRhZGRyKSkge1xuIDEwOTpcdFx0XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9NUExTX01DKTtcbiAxMTA6XHRcdFx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzcwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYXMgZmFyIGFzIGhhbmRsaW5nIGVuY2Fwc3VsYXRlZCBVRFAgdHJhZmZpYyBpcyBjb25jZXJuZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGVzcGVjaWFsbHkgYXQgdGhlIGVuZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIGxvZ2ljLCBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBmaW5hbCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSYjMzk7bSBhc3N1bWluZywgYmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlIHdpdGggc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMsIHRoYXQgdGhlIGVuZCB3aWxsIGJlIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSBmaW5hbCBzdGVwcyB0aGlzIGZ1bmN0aW9uIHRha2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzIGF0IHRoZSBjb25jbHVzaW9uIG9mIHRoaXMgcm91dGluZT8gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYmFyZXVkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTE6XHRcdFx0XHRcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVx1MDAzZWRldik7XG4gMTEyOlx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEzOlx0XHRcdFx0fVxuIDExNDpcdFx0XHR9IGVsc2Uge1xuIDExNTpcdFx0XHRcdGludCBhZGRyX3R5cGU7XG4gMTE2Olx0XHRcdFx0c3RydWN0IGlwdjZoZHIgKnR1bm5lbF9oZHJfdjY7XG4gMTE3Olx0XG4gMTE4Olx0XHRcdFx0dHVubmVsX2hkcl92NiA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDExOTpcdFx0XHRcdGFkZHJfdHlwZSA9XG4gMTIwOlx0XHRcdFx0aXB2Nl9hZGRyX3R5cGUoKHN0cnVjdCBpbjZfYWRkciAqKVx1MDAyNnR1bm5lbF9oZHJfdjYtXHUwMDNlZGFkZHIpO1xuIDEyMTpcdFx0XHRcdGlmICghKGFkZHJfdHlwZSBcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpIHtcbiAxMjI6XHRcdFx0XHRcdHByb3RvID0gYmFyZXVkcC1cdTAwM2VldGhlcnR5cGU7XG4gMTIzOlx0XHRcdFx0fSBlbHNlIGlmIChiYXJldWRwLVx1MDAzZW11bHRpX3Byb3RvX21vZGUgXHUwMDI2XHUwMDI2XG4gMTI0Olx0XHRcdFx0XHQgICAoYWRkcl90eXBlIFx1MDAyNiBJUFY2X0FERFJfTVVMVElDQVNUKSkge1xuIDEyNTpcdFx0XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9NUExTX01DKTtcbiAxMjY6XHRcdFx0XHR9IGVsc2Uge1xuIDEyNzpcdFx0XHRcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXHUwMDNlZGV2KTtcbiAxMjg6XHRcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMjk6XHRcdFx0XHR9XG4gMTMwOlx0XHRcdH1cbiAxMzE6XHRcdH0gZWxzZSB7XG4gMTMyOlx0XHRcdHByb3RvID0gYmFyZXVkcC1cdTAwM2VldGhlcnR5cGU7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBCQVJFVURQX0JBU0VfSExFTixcbiAxMzY6XHRcdFx0XHRcdCBwcm90byxcbiAxMzc6XHRcdFx0XHRcdCAhbmV0X2VxKGJhcmV1ZHAtXHUwMDNlbmV0LFxuIDEzODpcdFx0XHRcdFx0IGRldl9uZXQoYmFyZXVkcC1cdTAwM2VkZXYpKSkpIHtcbiAxMzk6XHRcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXHUwMDNlZGV2KTtcbiAxNDA6XHRcdFx0Z290byBkcm9wO1xuIDE0MTpcdFx0fVxuIDE0MjpcdFxuIDE0MzpcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBrZXkpO1xuIDE0NDpcdFxuIDE0NTpcdFx0dHVuX2RzdCA9IHVkcF90dW5fcnhfZHN0KHNrYiwgZmFtaWx5LCBrZXksIDAsIDApO1xuIDE0NjpcdFx0aWYgKCF0dW5fZHN0KSB7XG4gMTQ3Olx0XHRcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVx1MDAzZWRldik7XG4gMTQ4Olx0XHRcdGdvdG8gZHJvcDtcbiAxNDk6XHRcdH1cbiAxNTA6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2dHVuX2RzdC1cdTAwM2Vkc3QpO1xuIDE1MTpcdFx0c2tiLVx1MDAzZWRldiA9IGJhcmV1ZHAtXHUwMDNlZGV2O1xuIDE1MjpcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIFNhdmUgb2Zmc2V0IG9mIG91dGVyIGhlYWRlciByZWxhdGl2ZSB0byBza2ItXHUwMDNlaGVhZCxcbiAxNTU6XHRcdCAqIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0IHRoZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgaW5uZXIgaGVhZGVyXG4gMTU2Olx0XHQgKiBhbmQgbWlnaHQgY2hhbmdlIHNrYi1cdTAwM2VoZWFkLlxuIDE1NzpcdFx0ICovXG4gMTU4Olx0XHRuaCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQ7XG4gMTU5Olx0XG4gMTYwOlx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gYWJvdXQgdG8gYW5hbHl6ZSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGluc3RydWN0aW9uIGlzIGNsZWFyIOKAkyBJJiMzOTttIG1vdmluZyBvbiB0byBkaXNzZWN0IHRoZSBmdW5jdGlvbiBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAuIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQgc29tZSByZWxhdGVkIHBhcnRzLCBidXQgbm93IGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBydW5uaW5nIHRocm91Z2ggdGhlIGNvZGUgbGluZSBieSBsaW5lIChvciBhdCBsZWFzdCwgbG9naWNhbGx5LCBpZiBpdCYjMzk7cyBkZW5zZSkgYW5kIGltbWVkaWF0ZWx5IGJlIGxvb2tpbmcgZm9yIGFueXRoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIGFueSBwb3RlbnRpYWwgZ290Y2hhcywgYW5kIGFueSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSB2aWdpbGFudCBhYm91dCBlcnJvciBoYW5kbGluZywgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHBhcnNpbmcgcG90ZW50aWFsbHkgbWFsaWNpb3VzIFVEUCBwYWNrZXRzIHdpdGhpbiB0aGlzIGVuY2Fwc3VsYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBlbmNhcHN1bGF0aW9uIGlzIHBlcmZvcm1pbmcgYXMgZXhwZWN0ZWQsIGVuc3VyaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBpc24mIzM5O3QgY29tcHJvbWlzZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHBhc3NlZCBhcm91bmQgaW4gdGhpcyBjcml0aWNhbCBhcmVhLCBrZWVwaW5nIGluIG1pbmQgbXkgcGFzdCBleHBlcmllbmNlIHdpdGggdGhlc2UgaW1wbGVtZW50YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JhcmV1ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYxOlx0XG4gMTYyOlx0XHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKSB7XG4gMTYzOlx0XHRcdERFVl9TVEFUU19JTkMoYmFyZXVkcC1cdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuIDE2NDpcdFx0XHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXHUwMDNlZGV2LCByeF9lcnJvcnMpO1xuIDE2NTpcdFx0XHRnb3RvIGRyb3A7XG4gMTY2Olx0XHR9XG4gMTY3Olx0XG4gMTY4Olx0XHQvKiBHZXQgdGhlIG91dGVyIGhlYWRlci4gKi9cbiAxNjk6XHRcdG9pcGggPSBza2ItXHUwMDNlaGVhZCAmIzQzOyBuaDtcbiAxNzA6XHRcbiAxNzE6XHRcdGlmICghaXB2Nl9tb2RfZW5hYmxlZCgpIHx8IGZhbWlseSA9PSBBRl9JTkVUKVxuIDE3MjpcdFx0XHRlcnIgPSBJUF9FQ05fZGVjYXBzdWxhdGUob2lwaCwgc2tiKTtcbiAxNzM6XHRcdGVsc2VcbiAxNzQ6XHRcdFx0ZXJyID0gSVA2X0VDTl9kZWNhcHN1bGF0ZShvaXBoLCBza2IpO1xuIDE3NTpcdFxuIDE3NjpcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiAxNzc6XHRcdFx0aWYgKGxvZ19lY25fZXJyb3IpIHtcbiAxNzg6XHRcdFx0XHRpZiAgKCFpcHY2X21vZF9lbmFibGVkKCkgfHwgZmFtaWx5ID09IEFGX0lORVQpXG4gMTc5Olx0XHRcdFx0XHRuZXRfaW5mb19yYXRlbGltaXRlZChcJiMzNDtub24tRUNUIGZyb20gJXBJNCBcJiMzNDtcbiAxODA6XHRcdFx0XHRcdFx0XHQgICAgIFwmIzM0O3dpdGggVE9TPSUjeFxcblwmIzM0OyxcbiAxODE6XHRcdFx0XHRcdFx0XHQgICAgIFx1MDAyNigoc3RydWN0IGlwaGRyICopb2lwaCktXHUwMDNlc2FkZHIsXG4gMTgyOlx0XHRcdFx0XHRcdFx0ICAgICAoKHN0cnVjdCBpcGhkciAqKW9pcGgpLVx1MDAzZXRvcyk7XG4gMTgzOlx0XHRcdFx0ZWxzZVxuIDE4NDpcdFx0XHRcdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7bm9uLUVDVCBmcm9tICVwSTZcXG5cJiMzNDssXG4gMTg1Olx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjYoKHN0cnVjdCBpcHY2aGRyICopb2lwaCktXHUwMDNlc2FkZHIpO1xuIDE4NjpcdFx0XHR9XG4gMTg3Olx0XHRcdGlmIChlcnIgXHUwMDNlIDEpIHtcbiAxODg6XHRcdFx0XHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXHUwMDNlZGV2LCByeF9mcmFtZV9lcnJvcnMpO1xuIDE4OTpcdFx0XHRcdERFVl9TVEFUU19JTkMoYmFyZXVkcC1cdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XG4gMTkwOlx0XHRcdFx0Z290byBkcm9wO1xuIDE5MTpcdFx0XHR9XG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDE5NTpcdFx0ZXJyID0gZ3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2YmFyZXVkcC1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG4gMTk2Olx0XHRpZiAobGlrZWx5KGVyciA9PSBORVRfUlhfU1VDQ0VTUykpXG4gMTk3Olx0XHRcdGRldl9kc3RhdHNfcnhfYWRkKGJhcmV1ZHAtXHUwMDNlZGV2LCBsZW4pO1xuIDE5ODpcdFxuIDE5OTpcdFx0cmV0dXJuIDA7XG4gMjAwOlx0ZHJvcDpcbiAyMDE6XHRcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xuIDIwMjpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjAzOlx0XG4gMjA0Olx0XHRyZXR1cm4gMDtcbiAyMDU6XHR9XG4gMjA2Olx0XG4gMjA3Olx0c3RhdGljIGludCBiYXJldWRwX2Vycl9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDIwODpcdHtcbiAyMDk6XHRcdHJldHVybiAwO1xuIDIxMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3ODkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGVjb2RpbmcgYSBOZXR3b3JrIEVuY2Fwc3VsYXRpb24gUHV6emxlKioKCkFscmlnaHQsIHNvIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBpcyByZXR1cm5pbmcgYSB6ZXJvLiBUaGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4gVGhhdCYjMzk7cyBhIHN1Y2Nlc3MsIGF0IGxlYXN0IGZyb20gKml0cyogcGVyc3BlY3RpdmUuICBJIGtuZXcgdGhhdC4gU28sIEkgbmVlZCB0byBsb29rIHVwc3RyZWFtLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGBORVRfRk9VYCB0aGF0JiMzOTtzIHRoZSBjdWxwcml0LCByZXR1cm5pbmcgYSB2YWx1ZSBsZXNzIHRoYW4gemVyby4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGUgcmVzdWJtaXNzaW9uLiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGd0cF9lbmNhcF9yZWN2YCBuZXh0LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGlzIGFsbW9zdCBjZXJ0YWlubHkgb3JpZ2luYXRpbmcsIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9ODg1PXN0YXRpYyB2b2lkIGd0cF9lbmNhcF9kaXNhYmxlKHN0cnVjdCBndHBfZGV2ICpndHApXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtOTAxLSAqL1xuZHJpdmVycy9uZXQvZ3RwLmM6OTAyOnN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtOTAzLXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNDAzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2NyZWF0ZV9zb2NrKGludCB0eXBlLCBzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzMtXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XG5kcml2ZXJzL25ldC9ndHAuYzoxNDM0Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvZ3RwLmMtMTQzNS1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNjQ4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2VuY2FwX2VuYWJsZV9zb2NrZXQoaW50IGZkLCBpbnQgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNjg4LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTY4OTpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTAtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBndHBfZW5jYXBfcmVjdmAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGd0cF9lbmNhcF9yZWN2YC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEga2V5IHBhcnQgb2YgdGhlIHByb2Nlc3MsIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBHVFAgcGFja2V0cyBhcmUgYmVpbmcgaGFuZGxlZCwgcHJlc3VtYWJseSByZWNlaXZlZCBhbmQgZGVjYXBzdWxhdGVkLiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gd29ya2luZyBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlbGwgdGhpcyBpcyB3b3JraW5nLCBvciB3aGVyZSBhbnkgcG90ZW50aWFsIHByb2JsZW1zIG1pZ2h0IGJlIGx1cmtpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIHdoZXJlIGFueSBpc3N1ZXMgd2l0aCBwYWNrZXQgaGFuZGxpbmcgd291bGQgYmUgbWFuaWZlc3RpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MDI6XHRzdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5MDM6XHR7XG4gOTA0Olx0XHRzdHJ1Y3QgZ3RwX2RldiAqZ3RwO1xuIDkwNTpcdFx0aW50IHJldCA9IDA7XG4gOTA2Olx0XG4gOTA3Olx0XHRndHAgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiA5MDg6XHRcdGlmICghZ3RwKVxuIDkwOTpcdFx0XHRyZXR1cm4gMTtcbiA5MTA6XHRcbiA5MTE6XHRcdG5ldGRldl9kYmcoZ3RwLVx1MDAzZWRldiwgXCYjMzQ7ZW5jYXBfcmVjdiBzaz0lcFxcblwmIzM0Oywgc2spO1xuIDkxMjpcdFxuIDkxMzpcdFx0c3dpdGNoIChSRUFEX09OQ0UodWRwX3NrKHNrKS1cdTAwM2VlbmNhcF90eXBlKSkge1xuIDkxNDpcdFx0Y2FzZSBVRFBfRU5DQVBfR1RQMDpcbiA5MTU6XHRcdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAwIHBhY2tldFxcblwmIzM0Oyk7XG4gOTE2Olx0XHRcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xuIDkxNzpcdFx0XHRicmVhaztcbiA5MTg6XHRcdGNhc2UgVURQX0VOQ0FQX0dUUDFVOlxuIDkxOTpcdFx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O3JlY2VpdmVkIEdUUDFVIHBhY2tldFxcblwmIzM0Oyk7XG4gOTIwOlx0XHRcdHJldCA9IGd0cDF1X3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcbiA5MjE6XHRcdFx0YnJlYWs7XG4gOTIyOlx0XHRkZWZhdWx0OlxuIDkyMzpcdFx0XHRyZXQgPSAtMTsgLyogU2hvdWxkbiYjMzk7dCBoYXBwZW4uICovXG4gOTI0Olx0XHR9XG4gOTI1Olx0XG4gOTI2Olx0XHRzd2l0Y2ggKHJldCkge1xuIDkyNzpcdFx0Y2FzZSAxOlxuIDkyODpcdFx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O3Bhc3MgdXAgdG8gdGhlIHByb2Nlc3NcXG5cJiMzNDspO1xuIDkyOTpcdFx0XHRicmVhaztcbiA5MzA6XHRcdGNhc2UgMDpcbiA5MzE6XHRcdFx0YnJlYWs7XG4gOTMyOlx0XHRjYXNlIC0xOlxuIDkzMzpcdFx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O0dUUCBwYWNrZXQgaGFzIGJlZW4gZHJvcHBlZFxcblwmIzM0Oyk7XG4gOTM0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDkzNTpcdFx0XHRyZXQgPSAwO1xuIDkzNjpcdFx0XHRicmVhaztcbiA5Mzc6XHRcdH1cbiA5Mzg6XHRcbiA5Mzk6XHRcdHJldHVybiByZXQ7XG4gOTQwOlx0fVxuIDk0MTpcdFxuIDk0MjpcdHN0YXRpYyB2b2lkIGd0cF9kZXZfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gOTQzOlx0e1xuIDk0NDpcdFx0c3RydWN0IGd0cF9kZXYgKmd0cCA9IG5ldGRldl9wcml2KGRldik7XG4gOTQ1Olx0XG4gOTQ2Olx0XHRndHBfZW5jYXBfZGlzYWJsZShndHApO1xuIDk0NzpcdH1cbiA5NDg6XHRcbiA5NDk6XHRzdGF0aWMgaW5saW5lIHZvaWQgZ3RwMF9wdXNoX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGRwX2N0eCAqcGN0eClcbiA5NTA6XHR7XG4gOTUxOlx0XHRpbnQgcGF5bG9hZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzM1NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBHVFAgRW5jYXBzdWxhdGlvbiBSZXR1cm4gQ29kZXMqKgoKT2theSwgc28gYGd0cF9lbmNhcF9yZWN2YCBpcyBvbmx5IGdpdmluZyBtZSB0aHJlZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOiAxLCAwLCBvciAtMS4gQW5kIEkga25vdyB0aGF0IC0xIGlzIHRoZW4gY29udmVydGVkIHRvIDAuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBidXQgbm90IHF1aXRlIHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBJdCYjMzk7cyBub3QgcmV0dXJuaW5nIGFueXRoaW5nIGxpa2UgYSBuZWdhdGl2ZSB2YWx1ZSBsZXNzIHRoYW4gemVybywgc3VjaCBhcyB3aGF0IEkmIzM5O2Qgc2VlIHdpdGggYC1JUFBST1RPX0lQSVBgLiBIbW0uLi4gaXQgc2VlbXMgbGlrZSBgTkVUX0ZPVWAgaXMgdGhlIGluZGljYXRvciBJIG5lZWQgdG8gZm9jdXMgb24gdGhlbi4KCkxldCYjMzk7cyBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgLiBTZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHRlbGxpbmcgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmV2ZV91ZHBfZW5jYXBfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz01NzA9c3RhdGljIGludCBnZW5ldmVfcG9zdF9kZWNhcF9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTAtLyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2NC91ZHAuYyB0byByZWNlaXZlIHBhY2tldHMgKi9cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjY1MTpzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTIte1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTAyNS1cdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEwMjY6XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBnZW5ldmVfdWRwX2VuY2FwX2Vycl9sb29rdXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIHNvbWUgZnVuY3Rpb24gaW52b2x2ZWQgaW4gcmVjZWl2aW5nIGVuY2Fwc3VsYXRlZCBHZW5ldmUgcGFja2V0cyBvdmVyIFVEUC4gVGhlIG5hbWUgaXRzZWxmIGdpdmVzIHVzIHRoYXQgbXVjaC4gR2l2ZW4gdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBlbmNhcHN1bGF0aW9uLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQ6IHdoYXQgYXJlIHRoZSBsaWtlbHkgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLCB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIG5ldHdvcmsgZmxvdywgYW5kIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHM/IElzIGl0IHBhcnQgb2YgdGhlIGZhc3QgcGF0aCwgb3IgaXMgaXQgbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBldmVuIGlmIGl0IGlzIG5vdCAqb24qIHRoZSBmYXN0IHBhdGg/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gaGFuZGxlIHBhcnNpbmcgdGhlIFVEUCBoZWFkZXIsIHZlcmlmeWluZyBpdHMgY2hlY2tzdW0sIGFuZCB0aGVuIHBlZWxpbmcgb2ZmIHRoZSBHZW5ldmUgaGVhZGVyIHRvIGdldCBhdCB0aGUgaW5uZXIgcGFja2V0LiBJIG5lZWQgdG8ga25vdyBob3cgaXQgaGFuZGxlcyBzaXR1YXRpb25zIGxpa2UgZnJhZ21lbnRlZCBVRFAgcGFja2V0cyBhbmQgaWYgaXQgaGFzIGFueSBzZWN1cml0eSBjaGVja3MgYXMgdGhlIEdlbmV2ZSBoZWFkZXIgY29udGFpbnMgbWV0YWRhdGEgdGhhdCBhIG1hbGljaW91cyBhY3RvciBtaWdodCBzZWVrIHRvIHVzZSB0byBjb21wcm9taXNlIGEgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGRlYWxzIHdpdGggbWFsZm9ybWVkIHBhY2tldHMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJJiMzOTtsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgcGF5bG9hZCBpcyBoYW5kZWQgb2ZmLiBEb2VzIGl0IGNvcHkgdGhlIGRhdGEsIG9yIHBhc3MgYSBwb2ludGVyPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBhbmQgdGhyZWFkIHNhZmV0eT8gSSBrbm93IGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgZW5jYXBzdWxhdGlvbiBmdW5jdGlvbnMgdG8gYmUgZWZmaWNpZW50LCBzbyBJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcywgdG9vLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjUxOlx0c3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDY1MjpcdHtcbiA2NTM6XHRcdHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWg7XG4gNjU0Olx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlO1xuIDY1NTpcdFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcbiA2NTY6XHRcdF9fYmUxNiBpbm5lcl9wcm90bztcbiA2NTc6XHRcdGludCBvcHRzX2xlbjtcbiA2NTg6XHRcbiA2NTk6XHRcdC8qIE5lZWQgVURQIGFuZCBHZW5ldmUgaGVhZGVyIHRvIGJlIHByZXNlbnQgKi9cbiA2NjA6XHRcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIEdFTkVWRV9CQVNFX0hMRU4pKSlcbiA2NjE6XHRcdFx0Z290byBkcm9wO1xuIDY2MjpcdFxuIDY2MzpcdFx0LyogUmV0dXJuIHBhY2tldHMgd2l0aCByZXNlcnZlZCBiaXRzIHNldCAqL1xuIDY2NDpcdFx0Z2VuZXZlaCA9IGdlbmV2ZV9oZHIoc2tiKTtcbiA2NjU6XHRcdGlmICh1bmxpa2VseShnZW5ldmVoLVx1MDAzZXZlciAhPSBHRU5FVkVfVkVSKSlcbiA2NjY6XHRcdFx0Z290byBkcm9wO1xuIDY2NzpcdFxuIDY2ODpcdFx0Z3MgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiA2Njk6XHRcdGlmICghZ3MpXG4gNjcwOlx0XHRcdGdvdG8gZHJvcDtcbiA2NzE6XHRcbiA2NzI6XHRcdGdlbmV2ZSA9IGdlbmV2ZV9sb29rdXBfc2tiKGdzLCBza2IpO1xuIDY3MzpcdFx0aWYgKCFnZW5ldmUpXG4gNjc0Olx0XHRcdGdvdG8gZHJvcDtcbiA2NzU6XHRcbiA2NzY6XHRcdGlubmVyX3Byb3RvID0gZ2VuZXZlaC1cdTAwM2Vwcm90b190eXBlO1xuIDY3NzpcdFxuIDY3ODpcdFx0aWYgKHVubGlrZWx5KCghZ2VuZXZlLVx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFx1MDAyNlx1MDAyNlxuIDY3OTpcdFx0XHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcbiA2ODA6XHRcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGdlbmV2ZS1cdTAwM2VkZXYpO1xuIDY4MTpcdFx0XHRnb3RvIGRyb3A7XG4gNjgyOlx0XHR9XG4gNjgzOlx0XG4gNjg0Olx0XHRvcHRzX2xlbiA9IGdlbmV2ZWgtXHUwMDNlb3B0X2xlbiAqIDQ7XG4gNjg1Olx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBHRU5FVkVfQkFTRV9ITEVOICYjNDM7IG9wdHNfbGVuLCBpbm5lcl9wcm90byxcbiA2ODY6XHRcdFx0XHRcdCAhbmV0X2VxKGdlbmV2ZS1cdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVx1MDAzZWRldikpKSkge1xuIDY4NzpcdFx0XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoZ2VuZXZlLVx1MDAzZWRldik7XG4gNjg4Olx0XHRcdGdvdG8gZHJvcDtcbiA2ODk6XHRcdH1cbiA2OTA6XHRcbiA2OTE6XHRcdC8qXG4gNjkyOlx0XHQgKiBBZnRlciBoaW50IHByb2Nlc3NpbmcsIHRoZSB0cmFuc3BvcnQgaGVhZGVyIHBvaW50cyB0byB0aGUgaW5uZXIgb25lXG4gNjkzOlx0XHQgKiBhbmQgd2UgY2FuJiMzOTt0IHVzZSBhbnltb3JlIG9uIGdlbmV2ZV9oZHIoKS5cbiA2OTQ6XHRcdCAqL1xuIDY5NTpcdFx0Z2VuZXZlaCA9IGdlbmV2ZV9oZHIoc2tiKTtcbiA2OTY6XHRcdGlmIChnZW5ldmVfcG9zdF9kZWNhcF9oaW50KHNrLCBza2IsIHNpemVvZihzdHJ1Y3QgZ2VuZXZlaGRyKSAmIzQzO1xuIDY5NzpcdFx0XHRcdFx0ICAgb3B0c19sZW4sIFx1MDAyNmdlbmV2ZWgpKSB7XG4gNjk4Olx0XHRcdERFVl9TVEFUU19JTkMoZ2VuZXZlLVx1MDAzZWRldiwgcnhfZXJyb3JzKTtcbiA2OTk6XHRcdFx0Z290byBkcm9wO1xuIDcwMDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAgRnVuY3Rpb24mIzM5O3MgVGFpbCoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHRhaWwgZW5kIG9mIHRoZSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCBmdW5jdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNyaXRpY2FsIHBhdGggbGlrZWx5IHJldmVhbHMgaXRzZWxmLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgZXJyb3IgY29uZGl0aW9ucy4gSXQmIzM5O3MgdGhlIHBsYWNlIHdoZXJlIHRoZSBwcm9jZXNzZWQgcGFja2V0cyBhcmUgZmluYWxseSBoYW5kbGVkLCBhbmQgdGhpcyBpcyB3aGVyZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1pZ2h0IGJlIGx1cmtpbmcuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIGRhdGEgb25jZSBpdCYjMzk7cyBiZWVuIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQuIElzIGl0IG1lcmVseSBlbnF1ZXVpbmcsIG9yIGlzIHRoZXJlIG1vcmUgY29tcGxleCBwcm9jZXNzaW5nIGhhcHBlbmluZyB0aGF0IGNvdWxkIGJlIG9wdGltaXplZCwgb3IgZXZlbiBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gSXMgdGhlcmUgYW55IHBhY2tldCBhY2NvdW50aW5nIHBlcmZvcm1lZCBoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDE6XHRcbiA3MDI6XHRcdGdlbmV2ZV9yeChnZW5ldmUsIGdzLCBza2IsIGdlbmV2ZWgpO1xuIDcwMzpcdFx0cmV0dXJuIDA7XG4gNzA0Olx0XG4gNzA1Olx0ZHJvcDpcbiA3MDY6XHRcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xuIDcwNzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNzA4Olx0XHRyZXR1cm4gMDtcbiA3MDk6XHR9XG4gNzEwOlx0XG4gNzExOlx0LyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2ezQsNn0vdWRwLmMgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdHVubmVsIGZvciBlcnJvcnMgKi9cbiA3MTI6XHRzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gNzEzOlx0e1xuIDcxNDpcdFx0c3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaDtcbiA3MTU6XHRcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M7XG4gNzE2Olx0XHR1OCB6ZXJvX3ZuaVszXSA9IHsgMCB9O1xuIDcxNzpcdFx0dTggKnZuaSA9IHplcm9fdm5pO1xuIDcxODpcdFxuIDcxOTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBHRU5FVkVfQkFTRV9ITEVOKSlcbiA3MjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzIxOlx0XG4gNzIyOlx0XHRnZW5ldmVoID0gZ2VuZXZlX2hkcihza2IpO1xuIDcyMzpcdFx0aWYgKGdlbmV2ZWgtXHUwMDNldmVyICE9IEdFTkVWRV9WRVIpXG4gNzI0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDcyNTpcdFxuIDcyNjpcdFx0aWYgKGdlbmV2ZWgtXHUwMDNlcHJvdG9fdHlwZSAhPSBodG9ucyhFVEhfUF9URUIpKVxuIDcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3Mjg6XHRcbiA3Mjk6XHRcdGdzID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7XG4gNzMwOlx0XHRpZiAoIWdzKVxuIDczMTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3MzI6XHRcbiA3MzM6XHRcdGlmIChnZW5ldmVfZ2V0X3NrX2ZhbWlseShncykgPT0gQUZfSU5FVCkge1xuIDczNDpcdFx0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuIDczNTpcdFx0XHRfX2JlMzIgYWRkcjQgPSAwO1xuIDczNjpcdFxuIDczNzpcdFx0XHRpZiAoIWdzLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiA3Mzg6XHRcdFx0XHR2bmkgPSBnZW5ldmVfaGRyKHNrYiktXHUwMDNldm5pO1xuIDczOTpcdFx0XHRcdGFkZHI0ID0gaXBoLVx1MDAzZWRhZGRyO1xuIDc0MDpcdFx0XHR9XG4gNzQxOlx0XG4gNzQyOlx0XHRcdHJldHVybiBnZW5ldmVfbG9va3VwKGdzLCBhZGRyNCwgdm5pKSA/IDAgOiAtRU5PRU5UO1xuIDc0MzpcdFx0fVxuIDc0NDpcdFxuIDc0NTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIDc0NjpcdFx0aWYgKGdlbmV2ZV9nZXRfc2tfZmFtaWx5KGdzKSA9PSBBRl9JTkVUNikge1xuIDc0NzpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gNzQ4Olx0XHRcdHN0cnVjdCBpbjZfYWRkciBhZGRyNjtcbiA3NDk6XHRcbiA3NTA6XHRcdFx0bWVtc2V0KFx1MDAyNmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDU3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRW5jYXBzdWxhdGlvbiBJc3N1ZSoqCgpIbW0sIHNvIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgIGlzIHJldHVybmluZyAwLiBUaGF0JiMzOTtzLi4uIG5vdCBpbW1lZGlhdGVseSBhbGFybWluZywgYnV0IGl0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFR5cGljYWxseSwgYSB6ZXJvIHJldHVybiBmcm9tIGEgcmVjZWl2ZSBmdW5jdGlvbiBpc24mIzM5O3QgYSAqZmFpbHVyZSosIGl0IHVzdWFsbHkgaW1wbGllcyBhIHN1Y2Nlc3NmdWwsIGJ1dCBwb3RlbnRpYWxseSBlbXB0eSwgcmVhZCBvciBzb21lIG90aGVyICYjMzQ7T0smIzM0OyBjb25kaXRpb24uIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpbiB0aGVzZSBlbmNhcHN1bGF0aW9uIHBhdGhzLCBhIHplcm8gcmV0dXJuICpjYW4qIG1hc2sgdW5kZXJseWluZyBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gY29ybmVyIGNhc2VzLgoKTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaWYgd2UmIzM5O3JlIHNlZWluZyBhbiB1bmV4cGVjdGVkIHplcm8gZnJvbSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCwgaXQgbWlnaHQgYmUgYW4gaXNzdWUgdGhhdCB3ZSBtaWdodCBvdGhlcndpc2UgY2F0Y2ggd2l0aCBgTkVUX0ZPVWAuICBJdCYjMzk7cyB2ZXJ5IGNvbW1vbiB0byBzZWUgdGhhdCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZS4gIFRoYXQmIzM5O3MgZ2VuZXJhbGx5IHRoZSBmdW5jdGlvbiBJJiMzOTtkIGV4cGVjdCB0byBmbGFnIHNvbWV0aGluZyBnb2luZyBhd3J5IGluIHRoZSBmcmFtZSBwcm9jZXNzaW5nLgoKTGV0IG1lIHN3aXRjaCBnZWFycyBhbmQgcXVpY2tseSBleGFtaW5lIGB2eGxhbl9yY3ZgLiBTaW5jZSBHZW5ldmUgYW5kIFZYTEFOIHNoYXJlIGEgc2ltaWxhciBhcmNoaXRlY3R1cmFsIHBhcmFkaWdtLCBhbmQgdGhlIGVuY2Fwc3VsYXRpb24gb3IgZGVjYXBzdWxhdGlvbiBwYXRocyBjYW4gZ2V0IHF1aXRlIGNvbXBsaWNhdGVkLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltbWVkaWF0ZSBjb3JyZWxhdGlvbiBvciBpZiB0aGUgYmVoYXZpb3IgbWlnaHQgYmUgc2ltaWxhciBpbiB0aGF0IGZ1bmN0aW9uLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGJhc2VsaW5lIGFuZCBhIGNvbXBhcmlzb24gcG9pbnQuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBWWExBTiBoYW5kbGVzIHplcm8gcmV0dXJuIHZhbHVlcyBmb3IgY29ycmVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4bGFuX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTYyMj1zdGF0aWMgYm9vbCB2eGxhbl9lY25fZGVjYXBzdWxhdGUoc3RydWN0IHZ4bGFuX3NvY2sgKnZzLCB2b2lkICpvaXBoLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ1LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE2NDY6c3RhdGljIGludCB2eGxhbl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE2NDcte1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNTc3PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgaXB2Nixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzYxNC1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzYxNTpcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gdnhsYW5fcmN2O1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM2MTYtXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSB2eGxhbl9lcnJfbG9va3VwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdHVubmVsLmMtNDctICogIDQpIHZldGgwJiMzOTtzIGluZ3Jlc3MgcXVldWUgcmVjZWl2ZSB0aGUgdHVubmVsZWQgcGFja2V0IGF0IG5hbWVzcGFjZSBhdF9uczAuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3R1bm5lbC5jOjQ4OiAqICA1KSBUdW5uZWwgcHJvdG9jb2wgaGFuZGxlciwgZXg6IHZ4bGFuX3JjdiwgZGVjYXAgdGhlIHBhY2tldC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdHVubmVsLmMtNDktICogIDYpIEZvcndhcmQgdGhlIHBhY2tldCB0byB0aGUgb3ZlcmxheSB0bmwgZGV2LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg1NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgdnhsYW5fcmN2YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgdnhsYW5fcmN2YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBhbnN3ZXJzLiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgVnhMQU4gcmVjZWl2aW5nIHBhdGgsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY0NjpcdHN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE2NDc6XHR7XG4xNjQ4Olx0XHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUgPSBOVUxMO1xuMTY0OTpcdFx0Y29uc3Qgc3RydWN0IHZ4bGFuaGRyICp2aDtcbjE2NTA6XHRcdHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuO1xuMTY1MTpcdFx0c3RydWN0IHZ4bGFuX3NvY2sgKnZzO1xuMTY1MjpcdFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhIF9tZDtcbjE2NTM6XHRcdHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPSBcdTAwMjZfbWQ7XG4xNjU0Olx0XHRfX2JlMTYgcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9URUIpO1xuMTY1NTpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xuMTY1NjpcdFx0Ym9vbCByYXdfcHJvdG8gPSBmYWxzZTtcbjE2NTc6XHRcdHZvaWQgKm9pcGg7XG4xNjU4Olx0XHRfX2JlMzIgdm5pID0gMDtcbjE2NTk6XHRcdGludCBuaDtcbjE2NjA6XHRcbjE2NjE6XHRcdC8qIE5lZWQgVURQIGFuZCBWWExBTiBoZWFkZXIgdG8gYmUgcHJlc2VudCAqL1xuMTY2MjpcdFx0cmVhc29uID0gcHNrYl9tYXlfcHVsbF9yZWFzb24oc2tiLCBWWExBTl9ITEVOKTtcbjE2NjM6XHRcdGlmIChyZWFzb24pXG4xNjY0Olx0XHRcdGdvdG8gZHJvcDtcbjE2NjU6XHRcbjE2NjY6XHRcdHZoID0gdnhsYW5faGRyKHNrYik7XG4xNjY3Olx0XHQvKiBWTkkgZmxhZyBhbHdheXMgcmVxdWlyZWQgdG8gYmUgc2V0ICovXG4xNjY4Olx0XHRpZiAoISh2aC1cdTAwM2V2eF9mbGFncyBcdTAwMjYgVlhMQU5fSEZfVk5JKSkge1xuMTY2OTpcdFx0XHRuZXRkZXZfZGJnKHNrYi1cdTAwM2VkZXYsIFwmIzM0O2ludmFsaWQgdnhsYW4gZmxhZ3M9JSN4IHZuaT0lI3hcXG5cJiMzNDssXG4xNjcwOlx0XHRcdFx0ICAgbnRvaGwodmgtXHUwMDNldnhfZmxhZ3MpLCBudG9obCh2aC1cdTAwM2V2eF92bmkpKTtcbjE2NzE6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1ZYTEFOX0lOVkFMSURfSERSO1xuMTY3MjpcdFx0XHQvKiBSZXR1cm4gbm9uIHZ4bGFuIHBrdCAqL1xuMTY3MzpcdFx0XHRnb3RvIGRyb3A7XG4xNjc0Olx0XHR9XG4xNjc1Olx0XG4xNjc2Olx0XHR2cyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xuMTY3NzpcdFx0aWYgKCF2cylcbjE2Nzg6XHRcdFx0Z290byBkcm9wO1xuMTY3OTpcdFxuMTY4MDpcdFx0dm5pID0gdnhsYW5fdm5pKHZoLVx1MDAzZXZ4X3ZuaSk7XG4xNjgxOlx0XG4xNjgyOlx0XHR2eGxhbiA9IHZ4bGFuX3ZzX2ZpbmRfdm5pKHZzLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIHZuaSwgXHUwMDI2dm5pbm9kZSk7XG4xNjgzOlx0XHRpZiAoIXZ4bGFuKSB7XG4xNjg0Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9WWExBTl9WTklfTk9UX0ZPVU5EO1xuMTY4NTpcdFx0XHRnb3RvIGRyb3A7XG4xNjg2Olx0XHR9XG4xNjg3Olx0XG4xNjg4Olx0XHRpZiAodmgtXHUwMDNldnhfZmxhZ3MgXHUwMDI2IHZ4bGFuLVx1MDAzZWNmZy5yZXNlcnZlZF9iaXRzLnZ4X2ZsYWdzIHx8XG4xNjg5Olx0XHQgICAgdmgtXHUwMDNldnhfdm5pIFx1MDAyNiB2eGxhbi1cdTAwM2VjZmcucmVzZXJ2ZWRfYml0cy52eF92bmkpIHtcbjE2OTA6XHRcdFx0LyogSWYgdGhlIGhlYWRlciB1c2VzIGJpdHMgYmVzaWRlcyB0aG9zZSBlbmFibGVkIGJ5IHRoZVxuMTY5MTpcdFx0XHQgKiBuZXRkZXZpY2UgY29uZmlndXJhdGlvbiwgdHJlYXQgdGhpcyBhcyBhIG1hbGZvcm1lZCBwYWNrZXQuXG4xNjkyOlx0XHRcdCAqIFRoaXMgYmVoYXZpb3IgZGl2ZXJnZXMgZnJvbSBWWExBTiBSRkMgKFJGQzczNDgpIHdoaWNoXG4xNjkzOlx0XHRcdCAqIHN0aXB1bGF0ZXMgdGhhdCBiaXRzIGluIHJlc2VydmVkIGluIHJlc2VydmVkIGZpZWxkcyBhcmUgdG8gYmVcbjE2OTQ6XHRcdFx0ICogaWdub3JlZC4gVGhlIGFwcHJvYWNoIGhlcmUgbWFpbnRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aFxuMTY5NTpcdFx0XHQgKiBwcmV2aW91cyBzdGFjayBjb2RlLCBhbmQgYWxzbyBpcyBtb3JlIHJvYnVzdCBhbmQgcHJvdmlkZXMgYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg5MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdnhsYW5fcmN2OiBUaGUgRmluYWwgRnJvbnRpZXIgKGZvciBOb3cpKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRhaWwgZW5kIG9mIGB2eGxhbl9yY3ZgLiBJJiMzOTt2ZSBiZWVuIGRpc3NlY3RpbmcgdGhpcyBmdW5jdGlvbiBmb3IgYSB3aGlsZSBub3csIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgbWVudGFsIG1vZGVsIG9mIGl0cyBmaW5hbCBvcGVyYXRpb25zLiBXaGVyZSBkb2VzIHRoZSBkYXRhIGZpbmFsbHkgZ28/IFdoYXQmIzM5O3MgdGhlIHVsdGltYXRlIHBhdGggYWZ0ZXIgdGhlIGRlY2Fwc3VsYXRpb24gYW5kIGJhc2ljIGNoZWNrcz8gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gZ2xhcmluZyBpc3N1ZXMgb24gbXkgcmFkYXIuIElzIHRoZXJlIGFueXRoaW5nIGluIHRoaXMgY29kZSBwYXRoIHRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgcGVyaGFwcyBpbnRyb2R1Y2UgYSBzdWJ0bGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gaG93IGl0IGhhbmRsZXMgdGhlIGZpbmFsIHBhY2tldCBwbGFjZW1lbnQ/IEEgZmluYWwgcmV2aWV3IG9mIHRoZSBlbmQgb2YgdGhpcyBwcm9jZXNzIHNob3VsZCBjb21wbGV0ZSBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdGRldl9kc3RhdHNfcnhfYWRkKHZ4bGFuLVx1MDAzZWRldiwgc2tiLVx1MDAzZWxlbik7XG4xODAxOlx0XHR2eGxhbl92bmlmaWx0ZXJfY291bnQodnhsYW4sIHZuaSwgdm5pbm9kZSwgVlhMQU5fVk5JX1NUQVRTX1JYLCBza2ItXHUwMDNlbGVuKTtcbjE4MDI6XHRcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNnZ4bGFuLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbjE4MDM6XHRcbjE4MDQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTgwNTpcdFxuMTgwNjpcdFx0cmV0dXJuIDA7XG4xODA3Olx0XG4xODA4Olx0ZHJvcDpcbjE4MDk6XHRcdHJlYXNvbiA9IHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbjE4MTA6XHRcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xuMTgxMTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4xODEyOlx0XHRyZXR1cm4gMDtcbjE4MTM6XHR9XG4xODE0Olx0XG4xODE1Olx0c3RhdGljIGludCB2eGxhbl9lcnJfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE4MTY6XHR7XG4xODE3Olx0XHRzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbjtcbjE4MTg6XHRcdHN0cnVjdCB2eGxhbl9zb2NrICp2cztcbjE4MTk6XHRcdHN0cnVjdCB2eGxhbmhkciAqaGRyO1xuMTgyMDpcdFx0X19iZTMyIHZuaTtcbjE4MjE6XHRcbjE4MjI6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgVlhMQU5fSExFTikpXG4xODIzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyNDpcdFxuMTgyNTpcdFx0aGRyID0gdnhsYW5faGRyKHNrYik7XG4xODI2Olx0XG4xODI3Olx0XHRpZiAoIShoZHItXHUwMDNldnhfZmxhZ3MgXHUwMDI2IFZYTEFOX0hGX1ZOSSkpXG4xODI4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyOTpcdFxuMTgzMDpcdFx0dnMgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbjE4MzE6XHRcdGlmICghdnMpXG4xODMyOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTgzMzpcdFxuMTgzNDpcdFx0dm5pID0gdnhsYW5fdm5pKGhkci1cdTAwM2V2eF92bmkpO1xuMTgzNTpcdFx0dnhsYW4gPSB2eGxhbl92c19maW5kX3ZuaSh2cywgc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LCB2bmksIE5VTEwpO1xuMTgzNjpcdFx0aWYgKCF2eGxhbilcbjE4Mzc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xODM4Olx0XG4xODM5Olx0XHRyZXR1cm4gMDtcbjE4NDA6XHR9XG4xODQxOlx0XG4xODQyOlx0c3RhdGljIGludCBhcnBfcmVkdWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiB2bmkpXG4xODQzOlx0e1xuMTg0NDpcdFx0c3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuMTg0NTpcdFx0c3RydWN0IGFycGhkciAqcGFycDtcbjE4NDY6XHRcdHU4ICphcnBwdHIsICpzaGE7XG4xODQ3Olx0XHRfX2JlMzIgc2lwLCB0aXA7XG4xODQ4Olx0XHRzdHJ1Y3QgbmVpZ2hib3VyICpuO1xuMTg0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjg3OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbjogRGlzc2VjdGluZyB0aGUgVlhMQU4gUmVjZWl2ZSBQYXRoKioKCk9rYXksIHNvIGB2eGxhbl9yY3ZgIGlzIHJldHVybmluZyAwLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgaGl0dGluZyB0aGUgcmlnaHQgcGF0aCB0byBiZWdpbiB3aXRoLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGBORVRfRk9VYC4gTm93LCBob2xkIG9uLCBgQ09ORklHX05FVF9GT1VgIGlzIHRyaXN0YXRlLiBDb25zaWRlcmluZyB3aGF0IHRoZSB0ZXN0IHNjcmlwdCBpcyBkb2luZywgYW5kIHRoZSBtb2R1bGVzIGl0JiMzOTtzIGxvYWRpbmcsIGBmb3VgIGFuZCBgZm91NmAsIGl0IG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGVuYWJsZWQuCgpTbywgbGV0JiMzOTtzIGVuYWJsZSBgTkVUX0ZPVWAsIHRoYXQmIzM5O3MgYSBnaXZlbi4gV2UmIzM5O2xsIGFsc28gbmVlZCBgSVBWNl9GT1VgIGFuZCBgSVBWNl9GT1VfVFVOTkVMYCB0byBlbnN1cmUgd2UgY292ZXIgdGhlIElQdjYgc2lkZSBvZiB0aGluZ3MuIEdpdmVuIHRoZSBHUkUgdHVubmVscyBlbXBsb3llZCBpbiB0aGlzIHRlc3QsIHdlIHNob3VsZCBhbHNvIGVuYWJsZSBgTkVUX0lQR1JFYCBhbmQgYElQVjZfR1JFYCBhcyB3ZWxsLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ09ORklHX05FVF9JUEdSRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfSVBHUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O0lQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgQ09ORklHX0lQVjZfR1JFYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGxpa2VseSBrbmVlLWRlZXAgaW4gYSBuZXR3b3JraW5nLXJlbGF0ZWQgaXNzdWUsIHByb2JhYmx5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIHNvbWUgZm9ybSBvZiBuZXR3b3JrIHByb3RvY29sIGFuYWx5c2lzLiBUaGUgaW1tZWRpYXRlIG5lZWQgdG8gY2hlY2sgYENPTkZJR19JUFY2X0dSRWAgc3VnZ2VzdHMgSSYjMzk7bSBmb2N1c2luZyBvbiBJUHY2LW92ZXItR1JFIHR1bm5lbGluZy4gSXTigJlzIGEgY29yZSBjb21wb25lbnQgaW4gbWFueSBuZXR3b3JrIGFyY2hpdGVjdHVyZXMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIGNvbXBsZXggcm91dGluZyByZXF1aXJlbWVudHMsIHNvIHRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAuCgpJJiMzOTttIHByb2JhYmx5IGFza2luZyBteXNlbGYgYSBmZXcga2V5IHF1ZXN0aW9uczogSXMgSVB2Ni1vdmVyLUdSRSBlbmFibGVkIGluIHRoaXMgY29uZmlndXJhdGlvbj8gSWYgc28sIHdoYXQgYXJlIGl0cyBzZXR0aW5ncz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIG1vZHVsZXM/IEFtIEkgZGVhbGluZyB3aXRoIGEgYnVpbGQgZmFpbHVyZSwgYSBydW50aW1lIGlzc3VlLCBvciBzaW1wbHkgYXR0ZW1wdGluZyB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGRpYWdub3N0aWMgb3IgZGVwbG95bWVudCBwdXJwb3Nlcz8gVGhpcyBsaW5lIG9mIHRoaW5raW5nIGhlbHBzIG1lIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIHNjb3BlIGFuZCBzZWxlY3QgdGhlIGNvcnJlY3QgZGVidWdnaW5nIHN0cmF0ZWd5LCBvciBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBhY3Rpb25zLiBUaGUgYWJzZW5jZSBvZiB0aGlzIGtleSBmZWF0dXJlIG1heSBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIHRvIHNvbHZlIHRoZSBuZXR3b3JrIGNvbW11bmljYXRpb24gaXNzdWUgSSBhbSBmYWNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X0dSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gdGhlIG9uZSB3b3JraW5nIHRocm91Z2ggdGhpczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgSVAgVHVubmVsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBnb2FsIGlzIHRvIGdldCB0aGlzIElQIHR1bm5lbGluZyBzeXN0ZW0gdXAgYW5kIHJ1bm5pbmcuIFRoZSBpbml0aWFsIGNvbmZpZ3MgdG8gYWN0aXZhdGUgc2VlbSB0byBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgTkVUX0ZPVWAsIGBJUFY2X0ZPVWAsIGBJUFY2X0ZPVV9UVU5ORUxgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIFRob3NlIGNvdmVyIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgZm9yIGJvdGggZ2VuZXJpYyByb3V0aW5nIGVuY2Fwc3VsYXRpb24gYW5kIHRoZSBtb3JlIG1vZGVybiBGT1UgKFVEUCBlbmNhcHN1bGF0aW9uIG92ZXIgSVApIGFzcGVjdHMgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLgoKV2FpdCBhIHNlY29uZOKApiBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcsIGEgZGV0YWlsIHRoYXQmIzM5O3MgZXNzZW50aWFsIGZvciB0aGUgY29tcGxldGUgcGljdHVyZSBoZXJlLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nIHJlZ2FyZGluZyB0aGUgZmluZXIgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBGT1UgdHVubmVsaW5nPyBMZXQmIzM5O3MgY2hlY2sgYE5FVF9GT1VfSVBfVFVOTkVMU2AuIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIEZPVSBlbmNhcHN1bGF0aW9uIHdpdGhpbiBJUCB0dW5uZWxzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcy4gVGltZSB0byBjb25maXJtIHRoYXQmIzM5O3MgZW5hYmxlZCBhcyB3ZWxsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzIxPWNvbmZpZyBORVRfRk9VXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMjktXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cdGJvb2wgXCYjMzQ7SVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyNzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBORVRfRk9VX0lQX1RVTk5FTFMgSGVscCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhpcyBgTkVUX0ZPVV9JUF9UVU5ORUxTYCB0aGluZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uLCBvciBoZWxwIHRleHQsIGhhcyB0byBzYXkgYWJvdXQgaXQuIE5vIG5lZWQgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLCBJJiMzOTttIHN1cmUgc29tZW9uZSYjMzk7cyBkZXRhaWxlZCB0aGUgZnVuY3Rpb25hbGl0eSBhbmQgdXNhZ2Ugc29tZXdoZXJlLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtd3JpdHRlbiwgY2xlYXJseSBleHBsYWluaW5nIHRoZSBwdXJwb3NlLCBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycywgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4gMzMxOlx0XHRib29sIFwmIzM0O0lQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXCYjMzQ7XG4gMzMyOlx0XHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxuIDMzMzpcdFx0c2VsZWN0IE5FVF9GT1VcbiAzMzQ6XHRcdGhlbHBcbiAzMzU6XHRcdCAgQWxsb3cgY29uZmlndXJhdGlvbiBvZiBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24gZm9yIElQIHR1bm5lbHMuXG4gMzM2Olx0XHQgIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBJUCB0dW5uZWxzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZVxuIDMzNzpcdFx0ICBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24uXG4gMzM4Olx0XG4gMzM5Olx0Y29uZmlnIElORVRfQUhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBGT1UgYW5kIElQIFR1bm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyBvbiBjb25maWd1cmluZyBGT1UgZW5jYXBzdWxhdGlvbiBmb3IgSVAgdHVubmVscywgc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IEdSRSB0dW5uZWxzIGhlcmUuIFRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiB0byBnZXQgdGhhdCBmdW5jdGlvbmFsaXR5LCBJIGRlZmluaXRlbHkgbmVlZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJJiMzOTtsbCBhZGQgdGhhdCB0byB0aGUgY29uZmlndXJhdGlvbi4KCk5vdywgYSBjcnVjaWFsIG5leHQgc3RlcDogV2hhdCBhYm91dCBJUHY2PyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFuIGFuYWxvZ291cyBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgSVB2NiBzdXBwb3J0LCBlbnN1cmluZyBjb21wbGV0ZSBjb3ZlcmFnZS4gTGV0IG1lIHNlZSBpZiBzb21ldGhpbmcgc2ltaWxhciBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZPVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yMTA9Y29uZmlnIElQVjZfR1JFXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbm5ldC9pcHY2L0tjb25maWc6MjMwOlx0ZGVmYXVsdCBORVRfRk9VIFx1MDAyNlx1MDAyNiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbm5ldC9pcHY2L0tjb25maWc6MjM0Olx0ZGVmYXVsdCBORVRfRk9VX0lQX1RVTk5FTFMgXHUwMDI2XHUwMDI2IElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIzNS1cdHNlbGVjdCBJUFY2X1RVTk5FTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGT1UgTXVsdGljYXN0IFJlc3VibWlzc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBJUFY2X0ZPVWAgYW5kIGBJUFY2X0ZPVV9UVU5ORUxgIGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBgTkVUX0ZPVWAgYW5kIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBidXQgSSYjMzk7bGwgZXhwbGljaXRseSBsaXN0IGFsbCB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgY2xhcml0eTogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCk5vdywgbGV0JiMzOTtzIGdldCB0byB0aGUgaGVhcnQgb2YgaXQuIFRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC4gSXQmIzM5O3MgdG91Y2hpbmcgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBHb29kLCB0aG9zZSBhcmVuJiMzOTt0IG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGFyZSBzcGVjaWZpY2FsbHkgdGllZCB0byBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5LCB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBhbmQgbWFrZXMgYW5hbHlzaXMgZWFzaWVyLgoKVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgY2hhbmdlcyB0byB0ZXN0cyAoIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZWAsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2ApLCBidXQgdGhlIHJlYWwgbWVhdCBpcyBpbiB0aGUgY29yZSBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2lwdjQvdWRwLmNgIGFuZCBgbmV0L2lwdjYvdWRwLmNgLgoKSSYjMzk7bSB0aGlua2luZywgaXMgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZXZlbiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/IEFoLCB5ZXMsIGlmIHlvdSBzZW5kIGEgVURQIHBhY2tldCB0byBhIG11bHRpY2FzdCBhZGRyZXNzIGFuZCB5b3UgaGF2ZSBhIEZPVSB0dW5uZWwgY29uZmlndXJlZCB0byByZWNlaXZlIG9uIHRoYXQgcG9ydCwgaXQgd2lsbCwgb2YgY291cnNlLCB0cmlnZ2VyIHRoZSByZXN1Ym1pc3Npb24gcGF0aC4gTm93LCB0aGUgY29udGV4dCBpcyBjbGVhci4KClRoZSBjcnV4IG9mIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBidWcuIEl0IHNlZW1zIHRoYXQgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZW4mIzM5O3QgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLCBhbmQgd2VyZSBpbnN0ZWFkIGp1c3QgZ2V0dGluZyBjb25zdW1lZC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgYnVnIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2s7IGl0JiMzOTtzIGNoYW5naW5nIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMuIEl0IGRpcmVjdGx5IGFmZmVjdHMgdGhlIFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkuIEdpdmVuIHRoaXMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoaXMgbmV3IHJlc3VibWlzc2lvbiBwYXRoIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLgoKSW4gc3VtbWFyeSwgbXkgZm9jdXMgc3ltYm9scyBhcmU6IGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBORVRfRk9VYCwgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIGBJUFY2X0ZPVWAsIGBJUFY2X0ZPVV9UVU5ORUxgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIEFuZCBJIGJldHRlciBhZGQgYE5FVF9JUEdSRV9ERU1VWGAgdG8gdGhlIGNvbmZpZyBsaXN0IGp1c3QgaW4gY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTI6XHRjb25maWcgTkVUX0lQR1JFXG4gMTkzOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFwmIzM0O1xuIDE5NDpcdFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbiAxOTU6XHRcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG4gMTk2Olx0XHRoZWxwXG4gMTk3Olx0XHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXG4gMTk4Olx0XHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcbiAxOTk6XHRcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xuIDIwMDpcdFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xuIDIwMTpcdFx0ICBlbmNhcHN1bGF0aW5nIG9mIElQdjQgb3IgSVB2NiBvdmVyIGV4aXN0aW5nIElQdjQgaW5mcmFzdHJ1Y3R1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKklQR1JFIENvbmZpZ3VyYXRpb246IERlcGVuZGVuY2llcyAmYW1wOyBOZXh0IFN0ZXBzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBORVRfSVBHUkVgIGhlcmUuIEltbWVkaWF0ZWx5LCBpdCBjbGlja3MgdGhhdCBgTkVUX0lQR1JFYCBkZWZpbml0ZWx5IHJlbGllcyBvbiBgTkVUX0lQR1JFX0RFTVVYYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gVGhlcmVmb3JlLCBhIGRlZmluaXRpdmUgaW5jbHVzaW9uIG9mIGBORVRfSVBHUkVfREVNVVhgIGlzIHJlcXVpcmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBJUFY2X0dSRWAuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJJiMzOTttIHN1cmUgdGhlcmUgYXJlIHNvbWUgcmVsYXRpb25zaGlwcywgaXQmIzM5O3MgdGltZSB0byBjaGVjayB3aGF0JiMzOTtzIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0Y29uZmlnIElQVjZfR1JFXG4gMjExOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4gMjEyOlx0XHRzZWxlY3QgSVBWNl9UVU5ORUxcbiAyMTM6XHRcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG4gMjE0Olx0XHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxuIDIxNTpcdFx0aGVscFxuIDIxNjpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDIxNzpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMjE4Olx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgcGFydGljdWxhciB0dW5uZWxpbmcgZHJpdmVyIGltcGxlbWVudHNcbiAyMTk6XHRcdCAgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgYW5kIGF0IHRoaXMgdGltZSBhbGxvd3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY4OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZWR1Y3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBhbmQgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXJlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSVBWNl9HUkVgIGFsc28gcmVxdWlyZXMgYE5FVF9JUEdSRV9ERU1VWGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBkZW11bHRpcGxleGluZyBhc3BlY3QgaXMgY3J1Y2lhbC4KClNvLCB0aGUga2V5IGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgdGhlc2U6CgoqICAgYE5FVF9GT1VgCiogICBgTkVUX0ZPVV9JUF9UVU5ORUxTYAoqICAgYElQVjZfRk9VYAoqICAgYElQVjZfRk9VX1RVTk5FTGAKKiAgIGBORVRfSVBHUkVgCiogICBgTkVUX0lQR1JFX0RFTVVYYAoqICAgYElQVjZfR1JFYAoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGFyZSBzbmVha2lseSBpbnZvbHZlZCBoZXJlLgoKVGhlIHRlc3Qgc2NyaXB0IHVzZXMgYGlwIGZvdSBhZGQgcG9ydCA0Nzk3IGlwcHJvdG8gNDdgIHRvIHRlc3QgdGhlIG1vZHVsZSwgc28gSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgYGZvdWAgbW9kdWxlIGlzIGludm9sdmVkLCBvYnZpb3VzbHkuIFRoZSBzY3JpcHQgYWxzbyB1c2VzIGBpcCBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgLi4uIGVuY2FwIGZvdWAuIEhtbSwgdGhhdCB1c2VzIGBncmV0YXBgLiBBbmQgSSB3YXMgdGhpbmtpbmcgYGdyZXRhcGAgd2FzIHBhcnQgb2YgYE5FVF9JUEdSRWAuIFRoYXQgKmZlZWxzKiByaWdodCwgYnV0IGlzIHRoZXJlIGEgbnVhbmNlPyBIYW5nIG9uLCBpdCBzZWVtcyBgZ3JldGFwYCBtaWdodCBhY3R1YWxseSBiZSBwYXJ0IG9mIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIFRoYXQgY291bGQgY2hhbmdlIGV2ZXJ5dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA3Olx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcbiAyMDg6XHRcdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xuIDIwOTpcdFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXHUwMDI2XHUwMDI2IE5FVF9JUEdSRVxuIDIxMDpcdFx0aGVscFxuIDIxMTpcdFx0ICBPbmUgYXBwbGljYXRpb24gb2YgR1JFL0lQIGlzIHRvIGNvbnN0cnVjdCBhIGJyb2FkY2FzdCBXQU4gKFdpZGUgQXJlYVxuIDIxMjpcdFx0ICBOZXR3b3JrKSwgd2hpY2ggbG9va3MgbGlrZSBhIG5vcm1hbCBFdGhlcm5ldCBMQU4gKExvY2FsIEFyZWFcbiAyMTM6XHRcdCAgTmV0d29yayksIGJ1dCBjYW4gYmUgZGlzdHJpYnV0ZWQgYWxsIG92ZXIgdGhlIEludGVybmV0LiBJZiB5b3Ugd2FudFxuIDIxNDpcdFx0ICB0byBkbyB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDtJUCBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0OyBiZWxvdy5cbiAyMTU6XHRcbiAyMTY6XHRjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY1MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIEdSRSBCcm9hZGNhc3QgT3B0aW9ucyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEdSRSBhbmQgYnJvYWRjYXN0IHRyYWZmaWMuIFJpZ2h0LCBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIGVzc2VudGlhbCBmb3IgZW5hYmxpbmcgYnJvYWRjYXN0IEdSRSBvdmVyIElQLCBzcGVjaWZpY2FsbHkgZm9yIGBncmV0YXBgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0OyB3ZSBuZWVkIHRvIGluY2x1ZGUgaXQuCgpOb3csIHdoYXQgYWJvdXQgdGhlIElQdjYgc2lkZSBvZiB0aGluZ3M/IFdlJiMzOTt2ZSBnb3QgSVB2NCBjb3ZlcmVkLCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9uIHRoZSBJUHY2IGZyb250LiBJcyB0aGVyZSBhIHNpbWlsYXIgb3B0aW9uLCBhIGBJUFY2X0dSRV9CUk9BRENBU1RgIGVxdWl2YWxlbnQ/IEkmIzM5O2QgYmV0dGVyIGNoZWNrIHRoZSBgSVBWNl9HUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBzdXJlLiBOZWVkIHRvIGVuc3VyZSBmdWxsIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X0dSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3OTg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqQ2hlY2tpbmcgZm9yIElQVjZfR1JFX0JST0FEQ0FTVCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvciBwcmVzZW5jZSBvZiBgSVBWNl9HUkVfQlJPQURDQVNUYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllciBhbmQgbG9vayBpbnRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgZG9jdW1lbnRhdGlvbiwgb3IgY29kZSB0aGF0IHdvdWxkIGRlZmluZSB0aGlzIHNldHRpbmcuIElzIGl0IGEgZGVmaW5lZCBjb25zdGFudCBpbiBteSBjdXJyZW50IGVudmlyb25tZW50PyBJcyBpdCBwYXJ0IG9mIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGxpYnJhcnk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIEkgY2FuIHJlbGlhYmx5IHZlcmlmeSBpZiB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCBvciBzdXBwb3J0ZWQgYW5kIHdoYXQgaW1wYWN0IHRoYXQgc3VwcG9ydCBvciBsYWNrIG9mIHN1cHBvcnQgaGFzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBJIG5lZWQgdG8gdGFrZSBzcGVjaWZpYyBhY3Rpb24gYmFzZWQgb24gdGhlIHJlc3VsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9HUkVfQlJPQURDQVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxODAKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLgoKKipBbmFseXppbmcgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgdGhhdCYjMzk7cyBhIHF1aWNrIGFuZCBkZWNpc2l2ZSAmIzM0O05vJiMzNDsgYXMgYW4gaW5pdGlhbCBhc3Nlc3NtZW50LiBDbGVhcmx5LCB0aGUgcHJvYmxlbSBzdGF0ZW1lbnQgaXMgbGVhZGluZyBtZSBzb21ld2hlcmUuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBhbmQgYXNzZXNzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodHMgYnJpbmcgdG8gbWluZCB0aGVzZSBvcHRpb25zIEkga25vdyBmcm9tIGV4cGVyaWVuY2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHR1bm5lbGluZzogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYE5FVF9JUEdSRV9CUk9BRENBU1RgLCBhbmQgYElQVjZfR1JFYC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLiBXZSYjMzk7bGwgY2FsbCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzZXNzbWVudCAmIzM0O3NldC1yZXN1bHRzJiMzNDsgLSBJJiMzOTtsbCBuZWVkIHRvIHdvcmsgd2l0aCB0aG9zZSBsYXRlci4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7SVBWNl9GT1UmIzM0OywKICAgICYjMzQ7SVBWNl9GT1VfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0JST0FEQ0FTVCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZSBub3QgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgYnV0IHdlcmUgaW5zdGVhZCBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgKFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkpLiBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmVzdWJtaXNzaW9uIHBhdGggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRV9CUk9BRENBU1QmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXImIzM0OywKICAgICYjMzQ7X191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIFVEUCBtdWx0aWNhc3QgcGFja2V0cyBlbmNhcHN1bGF0ZWQgaW4gRk9VIHdlcmUgbm90IHByb3Blcmx5IHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIGJ1dCB3ZXJlIGluc3RlYWQgY29uc3VtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIChVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5KS4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJlc3VibWlzc2lvbiBwYXRoIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MDcuNTI0NjM5NDM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MTY0MDI2Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiSVBWNl9GT1VcIixcbiAgICBcIklQVjZfRk9VX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUEdSRV9CUk9BRENBU1RcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBVRFAgbXVsdGljYXN0IHBhY2tldHMgZW5jYXBzdWxhdGVkIGluIEZPVSB3ZXJlIG5vdCBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSBidXQgd2VyZSBpbnN0ZWFkIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayAoVURQIG11bHRpY2FzdCBkZWxpdmVyeSkuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTowNy41MjQ2NDU0OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODk5ODg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQyYzQzZjUwNWI5N2FmNGUyZWY3MDM5OWIzMTZlMGUzNDExYjU5ODZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDozNTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jXFxuaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3VkcC5jXFxuKysrIGIvbmV0L2lwdjQvdWRwLmNcXG5AQCAtMjQ3Niw2ICsyNDc2LDcgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuIFxcdGJvb2wgdXNlX2hhc2gyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aGFzaDJfYW55ID0gMDtcXG4gXFx0aGFzaDIgPSAwO1xcbkBAIC0yNTIwLDggKzI1MjEsOSBAQCBzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmaXJzdCkge1xcbi1cXHRcXHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRcXHRyZXQgPSB1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtcmV0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXFxuaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3VkcC5jXFxuKysrIGIvbmV0L2lwdjYvdWRwLmNcXG5AQCAtOTQ5LDYgKzk0OSw3IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7XFxuIFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbiBcXHRib29sIHVzZV9oYXNoMjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGhhc2gyX2FueSA9IDA7XFxuIFxcdGhhc2gyID0gMDtcXG5AQCAtOTk4LDggKzk5OSw5IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZpcnN0KSB7XFxuLVxcdFxcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFxcdTAwM2UgMClcXG4tXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0ID0gdWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uN2U5YWU5MzdjZmZhN2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTM5LDYgKzM5LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmliX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmluX2Fja19sYXQuc2ggXFxcXFxcbitcXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcXFxcbiBcXHRmcV9iYW5kX3BrdGxpbWl0LnNoIFxcXFxcXG4gXFx0Z3JlX2dzby5zaCBcXFxcXFxuIFxcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXFxuaW5kZXggZTFjZTM1YzJhYmJlZjMuLjk2ZmZmY2E2NTQ3YzlhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXFxuQEAgLTM4LDYgKzM4LDggQEAgQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bVxcbiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tXFxuIENPTkZJR19JUF9TQ1RQPW1cXG4gQ09ORklHX0lQVjY9eVxcbitDT05GSUdfSVBWNl9GT1U9bVxcbitDT05GSUdfSVBWNl9GT1VfVFVOTkVMPW1cXG4gQ09ORklHX0lQVjZfR1JFPW1cXG4gQ09ORklHX0lQVjZfSUxBPW1cXG4gQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcwMjEwZDM5ZmJhMzNkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2hcXG5AQCAtMCwwICsxLDE3MiBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IHRoYXQgVURQIGVuY2Fwc3VsYXRpb24gKEZPVSkgY29ycmVjdGx5IGhhbmRsZXMgcGFja2V0IHJlc3VibWl0XFxuKyMgd2hlbiBwYWNrZXRzIGFyZSBkZWxpdmVyZWQgdmlhIHRoZSBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5IHBhdGguXFxuKyNcXG4rIyBXaGVuIGEgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXQgYXJyaXZlcyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQLFxcbisjIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcigpIC8gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKCkgbXVzdCByZXN1Ym1pdFxcbisjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cXG4rIyBUaGlzIHRlc3QgdmVyaWZpZXMgYm90aCBJUHY0IGFuZCBJUHY2IHBhdGhzIGJ5IGNyZWF0aW5nIGEgRk9VL0dSRVRBUFxcbisjIHR1bm5lbCB3aXRoIGEgbXVsdGljYXN0IHJlbW90ZSBhZGRyZXNzIGFuZCBzZW5kaW5nIHBpbmcgdGhyb3VnaCBpdC5cXG4rI1xcbisjIFRoZSBlYXJseSBkZW11eCBvcHRpbWl6YXRpb24gY2FuIG1hc2sgdGhpcyBpc3N1ZSBieSByb3V0aW5nIHBhY2tldHMgdmlhXFxuKyMgdGhlIHVuaWNhc3QgcGF0aCAodWRwWzZdX3VuaWNhc3RfcmN2X3NrYiksIHNvIHdlIGRpc2FibGUgaXQgdG8gZm9yY2VcXG4rIyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cXG4rXFxuK3NvdXJjZSBsaWIuc2hcXG4rXFxuK05TRU5ERVI9XFxcIlxcXCJcXG4rTlJFQ1Y9XFxcIlxcXCJcXG4rXFxuK0ZPVV9QT1JUND00Nzk3XFxuK0ZPVV9QT1JUNj00Nzk4XFxuK01DQVNUND0yMzkuMC4wLjFcXG4rTUNBU1Q2PWZmMGU6OjFcXG4rXFxuK1RVTjRfUz0xOTIuMTY4Ljk5LjFcXG4rVFVONF9SPTE5Mi4xNjguOTkuMlxcbitUVU42X1M9MjAwMTpkYjg6OTk6OjFcXG4rVFVONl9SPTIwMDE6ZGI4Ojk5OjoyXFxuK1xcbitjbGVhbnVwKCkge1xcbitcXHRjbGVhbnVwX2FsbF9uc1xcbit9XFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rc2V0dXBfY29tbW9uKCkge1xcbitcXHRzZXR1cF9ucyBOU0VOREVSIE5SRUNWXFxuK1xcbitcXHQjIENyZWF0ZSB2ZXRoIHBhaXIgZGlyZWN0bHkgaW5zaWRlIG5hbWVzcGFjZXMgdG8gYXZvaWQgbmFtZVxcbitcXHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cXG4rXFx0aXAgbGluayBhZGQgdmV0aF9zIG5ldG5zIFxcXCIkTlNFTkRFUlxcXCIgdHlwZSB2ZXRoIFxcXFxcXG4rXFx0XFx0cGVlciBuYW1lIHZldGhfciBuZXRucyBcXFwiJE5SRUNWXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIHNldCB2ZXRoX3MgdXBcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgbGluayBzZXQgdmV0aF9yIHVwXFxuK1xcbitcXHQjIFNhbWUgc3lzY3RsIGNvbnRyb2xzIGVhcmx5IGRlbXV4IGZvciBib3RoIElQdjQgYW5kIElQdjYuXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiROUkVDVlxcXCIgc3lzY3RsIC13cSBuZXQuaXB2NC5pcF9lYXJseV9kZW11eD0wXFxuK31cXG4rXFxuK3NldHVwX2lwdjQoKSB7XFxuK1xcdCMgSVB2NCBGT1UgKENPTkZJR19ORVRfRk9VKSBpcyBidWlsdCBpbiBvbiBrZXJuZWxzIGNvbmZpZ3VyZWQgZm9yXFxuK1xcdCMgdGhlc2UgdGVzdHMsIHNvIG5vIG1vZHVsZSBsb2FkIGlzIG5lZWRlZCBoZXJlLlxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB2ZXRoX3NcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgMTAuMC4wLjIvMjQgZGV2IHZldGhfclxcbitcXG4rXFx0IyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlclxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCBcXFwiJE1DQVNUNC8zMlxcXCIgZGV2IHZldGhfciBhdXRvam9pblxcbitcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfc1xcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfclxcbitcXG4rXFx0IyBTZW5kZXI6IEdSRVRBUCB3aXRoIEZPVSBlbmNhcCAobm8gRk9VIGxpc3RlbmVyIG5lZWRlZCBvbiBUWCBzaWRlKVxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgYWRkIGVvdWRwNCB0eXBlIGdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNFxcXCIgbG9jYWwgMTAuMC4wLjEgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDRcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBcXFxcXFxuK1xcdFxcdGtleSBcXFwiJE1DQVNUNFxcXCJcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIHNldCBlb3VkcDQgdXBcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBhZGRyIGFkZCBcXFwiJFRVTjRfUy8yNFxcXCIgZGV2IGVvdWRwNFxcbitcXG4rXFx0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICsgR1JFVEFQXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiROUkVDVlxcXCIgaXAgZm91IGFkZCBwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBpcHByb3RvIDQ3XFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgYWRkIGVvdWRwNCB0eXBlIGdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNFxcXCIgbG9jYWwgMTAuMC4wLjIgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDRcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBcXFxcXFxuK1xcdFxcdGtleSBcXFwiJE1DQVNUNFxcXCJcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgbGluayBzZXQgZW91ZHA0IHVwXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIFxcXCIkVFVONF9SLzI0XFxcIiBkZXYgZW91ZHA0XFxuK1xcbitcXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcXG4rXFx0IyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLlxcbitcXHRsb2NhbCByZWN2X21hY1xcbitcXHRyZWN2X21hYz0kKGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgc2hvdyBlb3VkcDQgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBuZWlnaCBhZGQgXFxcIiRUVU40X1JcXFwiIGxsYWRkciBcXFwiJHJlY3ZfbWFjXFxcIiBkZXYgZW91ZHA0XFxuK31cXG4rXFxuK3NldHVwX2lwdjYoKSB7XFxuK1xcdCMgU2tpcCBjbGVhbmx5IGlmIElQdjYgb3IgdGhlIGZvdTYgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUuXFxuK1xcdFsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuIFxcXCIka3NmdF9za2lwXFxcIlxcbitcXHRtb2Rwcm9iZSAtcSBmb3U2IHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXFxuK1xcbitcXHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIFxcXCIkTUNBU1Q2LzEyOFxcXCIgZGV2IHZldGhfciBhdXRvam9pblxcbitcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfc1xcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfclxcbitcXG4rXFx0IyBTZW5kZXI6IGlwNmdyZXRhcCB3aXRoIEZPVSBlbmNhcFxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNlxcXCIgbG9jYWwgMjAwMTpkYjg6OjEgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDZcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBcXFxcXFxuK1xcdFxcdGtleSA0MlxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgc2V0IGVvdWRwNiB1cFxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGFkZHIgYWRkIFxcXCIkVFVONl9TLzY0XFxcIiBkZXYgZW91ZHA2IG5vZGFkXFxuK1xcbitcXHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICsgaXA2Z3JldGFwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiROUkVDVlxcXCIgaXAgZm91IGFkZCBwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBpcHByb3RvIDQ3IC02XFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNlxcXCIgbG9jYWwgMjAwMTpkYjg6OjIgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDZcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBcXFxcXFxuK1xcdFxcdGtleSA0MlxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNldCBlb3VkcDYgdXBcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgXFxcIiRUVU42X1IvNjRcXFwiIGRldiBlb3VkcDYgbm9kYWRcXG4rXFxuK1xcdCMgU3RhdGljIG5laWdoIG9uIHNlbmRlcjogbmVpZ2hib3IgZGlzY292ZXJ5IGNhbm5vdCB0cmF2ZXJzZSB0aGVcXG4rXFx0IyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLlxcbitcXHRsb2NhbCByZWN2X21hY1xcbitcXHRyZWN2X21hYz0kKGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBuZWlnaCBhZGQgXFxcIiRUVU42X1JcXFwiIGxsYWRkciBcXFwiJHJlY3ZfbWFjXFxcIiBkZXYgZW91ZHA2XFxuK31cXG4rXFxuK2dldF9yeF9wYWNrZXRzKCkge1xcbitcXHRsb2NhbCBkZXY9XFxcIiQxXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgLXMgbGluayBzaG93IFxcXCIkZGV2XFxcIiB8IGF3ayAnL1JYOi97Z2V0bGluZTsgcHJpbnQgJDJ9J1xcbit9XFxuK1xcbitydW5fcGluZ190ZXN0KCkge1xcbitcXHRsb2NhbCBmYW1pbHk9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBkZXY9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBkc3Q9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCBuYW1lPVxcXCIkNFxcXCJcXG4rXFx0bG9jYWwgY291bnQ9MTAwXFxuK1xcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxcbitcXG4rXFx0IyBXYXJtdXA6IGxldCBhbnkgaW5pdGlhbCBicm9hZGNhc3QvTkQgdHJhZmZpYyBzZXR0bGVcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5TRU5ERVJcXFwiIHBpbmcgXFxcIiRmYW1pbHlcXFwiIC1jIDEgLVcgMSBcXFwiJGRzdFxcXCIgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c2xlZXAgMVxcbitcXG4rXFx0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXFxcIiRkZXZcXFwiKVxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlNFTkRFUlxcXCIgcGluZyBcXFwiJGZhbWlseVxcXCIgLWkgMC4wMSAtYyAkY291bnQgLVcgMSBcXFwiJGRzdFxcXCIgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c2xlZXAgMVxcbitcXHRyeF9hZnRlcj0kKGdldF9yeF9wYWNrZXRzIFxcXCIkZGV2XFxcIilcXG4rXFxuK1xcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcXG4rXFxuK1xcdGlmIFsgXFxcIiRyeF9kZWx0YVxcXCIgLWdlIFxcXCIkY291bnRcXFwiIF07IHRoZW5cXG4rXFx0XFx0UkVUPSRrc2Z0X3Bhc3NcXG4rXFx0ZWxzZVxcbitcXHRcXHRSRVQ9JGtzZnRfZmFpbFxcbitcXHRmaVxcbitcXHRsb2dfdGVzdCBcXFwiJG5hbWUgKHJlY2VpdmVkICRyeF9kZWx0YS8kY291bnQpXFxcIlxcbit9XFxuK1xcbitzZXR1cF9jb21tb25cXG4rc2V0dXBfaXB2NFxcbitydW5fcGluZ190ZXN0IC00IGVvdWRwNCBcXFwiJFRVTjRfUlxcXCIgXFxcIkZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXRcXFwiXFxuK1xcbitpZiBzZXR1cF9pcHY2OyB0aGVuXFxuK1xcdHJ1bl9waW5nX3Rlc3QgLTYgZW91ZHA2IFxcXCIkVFVONl9SXFxcIiBcXFwiRk9VL2lwNmdyZXRhcCBJUHY2IG11bHRpY2FzdCBlbmNhcCByZXN1Ym1pdFxcXCJcXG4rZWxzZVxcbitcXHRsb2dfdGVzdF9za2lwIFxcXCJGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XFxcIlxcbitmaVxcbitcXG4rZXhpdCBcXFwiJEVYSVRfU1RBVFVTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTowOC4xNDQ0MjQzNTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzU0NDIyNTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRk9VXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIixcbiAgICBcIklQVjZfRk9VXCIsXG4gICAgXCJJUFY2X0ZPVV9UVU5ORUxcIixcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJORVRfSVBHUkVfQlJPQURDQVNUXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdWRwNF9saWJfbWNhc3RfZGVsaXZlclwiLFxuICAgIFwiX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZSBub3QgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgYnV0IHdlcmUgaW5zdGVhZCBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgKFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkpLiBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmVzdWJtaXNzaW9uIHBhdGggaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmM0M2Y1MDViOTdhZjRlMmVmNzAzOTliMzE2ZTBlMzQxMWI1OTg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDozNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmNcbmluZGV4IDU5MjQ4YTU5MzU4Y2E1Li5kM2RkY2JmYzg0NzcxYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcC5jXG4rKysgYi9uZXQvaXB2NC91ZHAuY1xuQEAgLTI0NzYsNiArMjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90O1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRib29sIHVzZV9oYXNoMjtcbitcdGludCByZXQ7XG4gXG4gXHRoYXNoMl9hbnkgPSAwO1xuIFx0aGFzaDIgPSAwO1xuQEAgLTI1MjAsOCArMjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdGlmIChmaXJzdCkge1xuLVx0XHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0ID0gdWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIC1yZXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTk0OSw2ICs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aGFzaDJfYW55ID0gMDtcbiBcdGhhc2gyID0gMDtcbkBAIC05OTgsOCArOTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFx1MDAzZSAwKVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0zOSw2ICszOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXG4gXHRmaWJfdGVzdHMuc2ggXFxcbiBcdGZpbl9hY2tfbGF0LnNoIFxcXG4rXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcbiBcdGZxX2JhbmRfcGt0bGltaXQuc2ggXFxcbiBcdGdyZV9nc28uc2ggXFxcbiBcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXG5pbmRleCBlMWNlMzVjMmFiYmVmMy4uOTZmZmZjYTY1NDdjOWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXG5AQCAtMzgsNiArMzgsOCBAQCBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tXG4gQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bVxuIENPTkZJR19JUF9TQ1RQPW1cbiBDT05GSUdfSVBWNj15XG4rQ09ORklHX0lQVjZfRk9VPW1cbitDT05GSUdfSVBWNl9GT1VfVFVOTkVMPW1cbiBDT05GSUdfSVBWNl9HUkU9bVxuIENPTkZJR19JUFY2X0lMQT1tXG4gQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcwMjEwZDM5ZmJhMzNkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5AQCAtMCwwICsxLDE3MiBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcbisjIHdoZW4gcGFja2V0cyBhcmUgZGVsaXZlcmVkIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLlxuKyNcbisjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXG4rIyBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoKSAvIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcigpIG11c3QgcmVzdWJtaXRcbisjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cbisjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXG4rIyB0dW5uZWwgd2l0aCBhIG11bHRpY2FzdCByZW1vdGUgYWRkcmVzcyBhbmQgc2VuZGluZyBwaW5nIHRocm91Z2ggaXQuXG4rI1xuKyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcbisjIHRoZSB1bmljYXN0IHBhdGggKHVkcFs2XV91bmljYXN0X3Jjdl9za2IpLCBzbyB3ZSBkaXNhYmxlIGl0IHRvIGZvcmNlXG4rIyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cbitcbitzb3VyY2UgbGliLnNoXG4rXG4rTlNFTkRFUj1cIlwiXG4rTlJFQ1Y9XCJcIlxuK1xuK0ZPVV9QT1JUND00Nzk3XG4rRk9VX1BPUlQ2PTQ3OThcbitNQ0FTVDQ9MjM5LjAuMC4xXG4rTUNBU1Q2PWZmMGU6OjFcbitcbitUVU40X1M9MTkyLjE2OC45OS4xXG4rVFVONF9SPTE5Mi4xNjguOTkuMlxuK1RVTjZfUz0yMDAxOmRiODo5OTo6MVxuK1RVTjZfUj0yMDAxOmRiODo5OTo6MlxuK1xuK2NsZWFudXAoKSB7XG4rXHRjbGVhbnVwX2FsbF9uc1xuK31cbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK3NldHVwX2NvbW1vbigpIHtcbitcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcbitcbitcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXG4rXHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cbitcdGlwIGxpbmsgYWRkIHZldGhfcyBuZXRucyBcIiROU0VOREVSXCIgdHlwZSB2ZXRoIFxcXG4rXHRcdHBlZXIgbmFtZSB2ZXRoX3IgbmV0bnMgXCIkTlJFQ1ZcIlxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIGxpbmsgc2V0IHZldGhfcyB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBsaW5rIHNldCB2ZXRoX3IgdXBcbitcbitcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cbitcdGlwIG5ldG5zIGV4ZWMgXCIkTlJFQ1ZcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcbit9XG4rXG4rc2V0dXBfaXB2NCgpIHtcbitcdCMgSVB2NCBGT1UgKENPTkZJR19ORVRfRk9VKSBpcyBidWlsdCBpbiBvbiBrZXJuZWxzIGNvbmZpZ3VyZWQgZm9yXG4rXHQjIHRoZXNlIHRlc3RzLCBzbyBubyBtb2R1bGUgbG9hZCBpcyBuZWVkZWQgaGVyZS5cbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCAxMC4wLjAuMS8yNCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3JcbitcbitcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbitcdGlwIC1uIFwiJE5SRUNWXCIgYWRkciBhZGQgXCIkTUNBU1Q0LzMyXCIgZGV2IHZldGhfciBhdXRvam9pblxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yXG4rXG4rXHQjIFNlbmRlcjogR1JFVEFQIHdpdGggRk9VIGVuY2FwIChubyBGT1UgbGlzdGVuZXIgbmVlZGVkIG9uIFRYIHNpZGUpXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMSBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBzZXQgZW91ZHA0IHVwXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgXCIkVFVONF9TLzI0XCIgZGV2IGVvdWRwNFxuK1xuK1x0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICsgR1JFVEFQXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNFwiIGlwcHJvdG8gNDdcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNCB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU40X1IvMjRcIiBkZXYgZW91ZHA0XG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcbitcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbitcdGxvY2FsIHJlY3ZfbWFjXG4rXHRyZWN2X21hYz0kKGlwIC1uIFwiJE5SRUNWXCIgbGluayBzaG93IGVvdWRwNCB8IGF3ayAnL2V0aGVyL3twcmludCAkMn0nKVxuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIG5laWdoIGFkZCBcIiRUVU40X1JcIiBsbGFkZHIgXCIkcmVjdl9tYWNcIiBkZXYgZW91ZHA0XG4rfVxuK1xuK3NldHVwX2lwdjYoKSB7XG4rXHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IG9yIHRoZSBmb3U2IG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdG1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXG4rXG4rXHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIFwiJE1DQVNUNi8xMjhcIiBkZXYgdmV0aF9yIGF1dG9qb2luXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcbitcdGlwIC1uIFwiJE5SRUNWXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcbitcbitcdCMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcbitcdFx0cmVtb3RlIFwiJE1DQVNUNlwiIGxvY2FsIDIwMDE6ZGI4OjoxIFxcXG4rXHRcdGVuY2FwIGZvdSBlbmNhcC1zcG9ydCBcIiRGT1VfUE9SVDZcIiBlbmNhcC1kcG9ydCBcIiRGT1VfUE9SVDZcIiBcXFxuK1x0XHRrZXkgNDJcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIHNldCBlb3VkcDYgdXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCBcIiRUVU42X1MvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICsgaXA2Z3JldGFwXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNlwiIGlwcHJvdG8gNDcgLTZcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDZcIiBsb2NhbCAyMDAxOmRiODo6MiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ2XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ2XCIgXFxcbitcdFx0a2V5IDQyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNiB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU42X1IvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXG4rXHQjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuXG4rXHRsb2NhbCByZWN2X21hY1xuK1x0cmVjdl9tYWM9JChpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBuZWlnaCBhZGQgXCIkVFVONl9SXCIgbGxhZGRyIFwiJHJlY3ZfbWFjXCIgZGV2IGVvdWRwNlxuK31cbitcbitnZXRfcnhfcGFja2V0cygpIHtcbitcdGxvY2FsIGRldj1cIiQxXCJcbitcbitcdGlwIC1uIFwiJE5SRUNWXCIgLXMgbGluayBzaG93IFwiJGRldlwiIHwgYXdrICcvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0nXG4rfVxuK1xuK3J1bl9waW5nX3Rlc3QoKSB7XG4rXHRsb2NhbCBmYW1pbHk9XCIkMVwiXG4rXHRsb2NhbCBkZXY9XCIkMlwiXG4rXHRsb2NhbCBkc3Q9XCIkM1wiXG4rXHRsb2NhbCBuYW1lPVwiJDRcIlxuK1x0bG9jYWwgY291bnQ9MTAwXG4rXHRsb2NhbCByeF9iZWZvcmUgcnhfYWZ0ZXIgcnhfZGVsdGFcbitcbitcdCMgV2FybXVwOiBsZXQgYW55IGluaXRpYWwgYnJvYWRjYXN0L05EIHRyYWZmaWMgc2V0dGxlXG4rXHRpcCBuZXRucyBleGVjIFwiJE5TRU5ERVJcIiBwaW5nIFwiJGZhbWlseVwiIC1jIDEgLVcgMSBcIiRkc3RcIiBcXFxuK1x0XHRcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdHNsZWVwIDFcbitcbitcdHJ4X2JlZm9yZT0kKGdldF9yeF9wYWNrZXRzIFwiJGRldlwiKVxuK1x0aXAgbmV0bnMgZXhlYyBcIiROU0VOREVSXCIgcGluZyBcIiRmYW1pbHlcIiAtaSAwLjAxIC1jICRjb3VudCAtVyAxIFwiJGRzdFwiIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0c2xlZXAgMVxuK1x0cnhfYWZ0ZXI9JChnZXRfcnhfcGFja2V0cyBcIiRkZXZcIilcbitcbitcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcbitcbitcdGlmIFsgXCIkcnhfZGVsdGFcIiAtZ2UgXCIkY291bnRcIiBdOyB0aGVuXG4rXHRcdFJFVD0ka3NmdF9wYXNzXG4rXHRlbHNlXG4rXHRcdFJFVD0ka3NmdF9mYWlsXG4rXHRmaVxuK1x0bG9nX3Rlc3QgXCIkbmFtZSAocmVjZWl2ZWQgJHJ4X2RlbHRhLyRjb3VudClcIlxuK31cbitcbitzZXR1cF9jb21tb25cbitzZXR1cF9pcHY0XG4rcnVuX3BpbmdfdGVzdCAtNCBlb3VkcDQgXCIkVFVONF9SXCIgXCJGT1UvR1JFVEFQIElQdjQgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCJcbitcbitpZiBzZXR1cF9pcHY2OyB0aGVuXG4rXHRydW5fcGluZ190ZXN0IC02IGVvdWRwNiBcIiRUVU42X1JcIiBcIkZPVS9pcDZncmV0YXAgSVB2NiBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXRcIlxuK2Vsc2VcbitcdGxvZ190ZXN0X3NraXAgXCJGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCJcbitmaVxuK1xuK2V4aXQgXCIkRVhJVF9TVEFUVVNcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MDguMTQ0NDI1OTg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzNTIzNDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVRFAgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuICBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB3ZSBoYW5kbGUgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGFuZCBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aWNhc3QuXG5cblByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgaWYgYHVkcF9xdWV1ZV9yY3Zfc2tiYCByZXR1cm5lZCBhIHBvc2l0aXZlIHZhbHVlIChpbXBseWluZyBhbiBlcnJvciwgSSBhc3N1bWUpLCB0aGUgY2FsbGluZyBmdW5jdGlvbiB3b3VsZCBqdXN0IGBjb25zdW1lX3NrYihza2IpYC4gTm93LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGByZXRgIHZhcmlhYmxlIGFuZCBleHBsaWNpdGx5IGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBgcmV0YCBpcyBncmVhdGVyIHRoYW4gemVybywgaXQgKnJldHVybnMqIGEgbmVnYXRlZCBgcmV0YCAoaW4gSVB2NCkgb3IganVzdCBgcmV0YCAoaW4gSVB2NikuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZy5cblxuVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIHByb3BhZ2F0ZSBlcnJvciBjb25kaXRpb25zIGZyb20gdGhlIHF1ZXVpbmcgc3RhZ2UgdXAgdG8gdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBsYXllci4gSSdtIGd1ZXNzaW5nIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBzaWxlbnRseSBkcm9wcGluZyBwYWNrZXRzIGluIGVycm9yIGNhc2VzLCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIG1ha2UgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgZXhwbGljaXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBwcm9wYWdhdGluZyB0aGVzZSBlcnJvciBjb2Rlcz8gIFdoYXQgZG8gdGhlc2UgZXJyb3IgY29kZXMgcmVwcmVzZW50PyBJdOKAmXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgd2hhdCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIGJ1dCB3aGF0ZXZlciB0aGV5IGFyZSwgdGhlIHBhdGNoIGlzIGNsZWFybHkgdHJ5aW5nIHRvIHNpZ25hbCBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsIHRoYW4gYSBzaW1wbGUgZGlzY2FyZC5cblxuTGV0IG1lIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBhcmUgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucycgcmV0dXJuIHZhbHVlcyBhcmUgdXNlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY2hhbmdlIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNToxNC4xNzk2NjI4MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTY1ODE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MjQ0OD1ib29sIHVkcF9za19yeF9kc3Rfc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjQ2NC0gKi9cXG5uZXQvaXB2NC91ZHAuYzoyNDY1OnN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC91ZHAuYy0yNDY2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdWRwaGRyICAqdWgsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNTkxPWludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNjQ5LVxcdGlmIChydC1cXHUwMDNlcnRfZmxhZ3MgXFx1MDAyNiAoUlRDRl9CUk9BRENBU1R8UlRDRl9NVUxUSUNBU1QpKVxcbm5ldC9pcHY0L3VkcC5jOjI2NTA6XFx0XFx0cmV0dXJuIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgdWgsIHNhZGRyLCBkYWRkcik7XFxubmV0L2lwdjQvdWRwLmMtMjY1MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2gtNy0jIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaDo4OiMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaC05LSMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNToxNi42NzUzMjcxMzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5NDM2OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEZWNvZGluZyB0aGUgVURQIFJlY2VpdmUgRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIGRvd24gdGhpcyBtdWx0aWNhc3QgZGVsaXZlcnkgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJldHVybiB2YWx1ZSBvZiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyBjcml0aWNhbCwgcmlnaHQ/IFRoYXQncyB3aGF0IGB1ZHBfcmN2YCBpcyBwYXNzaW5nIGJhY2suIFJpZ2h0LCBgdWRwX3JjdmAgaXMgdGhlIElQdjQgVURQIHJlY2VpdmUgaGFuZGxlciwgc28gaXQgbWFrZXMgc2Vuc2UgaXQncyB0aGUgZ2F0ZWtlZXBlci4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCBraW5kIG9mIHR5cGUgYHVkcF9yY3ZgIHJldHVybnMuLi4gSXQgcmV0dXJucyBhbiBgaW50YC4gT2theSwgZ290IGl0LlxuXG5UaW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZzogSSBuZWVkIHRvIG9wZW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCBgdWRwX3JjdmAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIEknbGwgc2VlIGhvdyB0aGF0IHJldHVybiB2YWx1ZSBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmxvdyBpcyBlc3NlbnRpYWwgdG8gb3B0aW1pemUgVURQIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgd2hhdCB0aGF0IGBpbnRgIHNpZ25pZmllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjE5Ljk3NDc2NTkyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcyNDIwNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB1ZHBfcmN2XFxcXChzdHJ1Y3Qgc2tfYnVmZiBcXFxcKnNrYlxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3VkcC5oPTQyMj12b2lkIHVkcDRfaHdjc3VtKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QpO1xcbmluY2x1ZGUvbmV0L3VkcC5oOjQyMzppbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC91ZHAuaC00MjQtaW50IHVkcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZyk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNTY5PXN0YXRpYyBpbnQgdWRwX3VuaWNhc3RfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNTkwLVxcbm5ldC9pcHY0L3VkcC5jOjI1OTE6aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC91ZHAuYy0yNTkyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MjIuODQ3MTkxMTU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNjgwNTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRFAgUmVjZWl2ZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gYXQgdGhlIHJlY2VpdmluZyBlbmQgb2YgYSBVRFAgZGF0YWdyYW0uIExldCdzIHN0YXJ0IHdpdGggYHVkcF9yY3ZgIOKAkyB0aGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBleGFtaW5lIGluIGBuZXQvaXB2NC91ZHAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciwgbW9yZSBhY2N1cmF0ZWx5LCB0aGUgcHJlZGljdGFibGUgcHJvY2Vzcykgb2YgaGFuZGxpbmcgaW5jb21pbmcgVURQIHBhY2tldHMgcmVhbGx5IGJlZ2lucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZsb3cgY29udHJvbC4uLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNToyNi4zNTM5OTgzNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU5MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1OTE6XFx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yNTkyOlxcdHtcXG4yNTkzOlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbjI1OTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMjU5NTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xcbjI1OTY6XFx0XFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcXG4yNTk3OlxcdFxcdF9fYmUzMiBzYWRkciwgZGFkZHI7XFxuMjU5ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4yNTk5OlxcdFxcdGJvb2wgcmVmY291bnRlZDtcXG4yNjAwOlxcdFxcdGludCBkcm9wX3JlYXNvbjtcXG4yNjAxOlxcdFxcbjI2MDI6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4yNjAzOlxcdFxcbjI2MDQ6XFx0XFx0LypcXG4yNjA1OlxcdFxcdCAqICBWYWxpZGF0ZSB0aGUgcGFja2V0LlxcbjI2MDY6XFx0XFx0ICovXFxuMjYwNzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpKVxcbjI2MDg6XFx0XFx0XFx0Z290byBkcm9wO1xcdFxcdC8qIE5vIHNwYWNlIGZvciBoZWFkZXIuICovXFxuMjYwOTpcXHRcXG4yNjEwOlxcdFxcdHVoICAgPSB1ZHBfaGRyKHNrYik7XFxuMjYxMTpcXHRcXHR1bGVuID0gbnRvaHModWgtXFx1MDAzZWxlbik7XFxuMjYxMjpcXHRcXHRzYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4yNjEzOlxcdFxcdGRhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbjI2MTQ6XFx0XFxuMjYxNTpcXHRcXHRpZiAodWxlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjI2MTY6XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYxNzpcXHRcXG4yNjE4OlxcdFxcdGlmICh1bGVuIFxcdTAwM2Mgc2l6ZW9mKCp1aCkpXFxuMjYxOTpcXHRcXHRcXHRnb3RvIHNob3J0X3BhY2tldDtcXG4yNjIwOlxcdFxcbjI2MjE6XFx0XFx0aWYgKHVsZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbjI2MjI6XFx0XFx0XFx0aWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHVsZW4pKVxcbjI2MjM6XFx0XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbjI2MjY6XFx0XFx0fVxcbjI2Mjc6XFx0XFxuMjYyODpcXHRcXHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXFxuMjYyOTpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMjYzMDpcXHRcXG4yNjMxOlxcdFxcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cXHUwMDNlc291cmNlLCBkYWRkciwgdWgtXFx1MDAzZWRlc3QsXFxuMjYzMjpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZWZjb3VudGVkLCB1ZHBfZWhhc2hmbik7XFxuMjYzMzpcXHRcXHRpZiAoSVNfRVJSKHNrKSlcXG4yNjM0OlxcdFxcdFxcdGdvdG8gbm9fc2s7XFxuMjYzNTpcXHRcXG4yNjM2OlxcdFxcdGlmIChzaykge1xcbjI2Mzc6XFx0XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xcbjI2Mzg6XFx0XFx0XFx0aW50IHJldDtcXG4yNjM5OlxcdFxcbjI2NDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZShzay1cXHUwMDNlc2tfcnhfZHN0KSAhPSBkc3QpKVxcbjI2NDE6XFx0XFx0XFx0XFx0dWRwX3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XFxuMjY0MjpcXHRcXG4yNjQzOlxcdFxcdFxcdHJldCA9IHVkcF91bmljYXN0X3Jjdl9za2Ioc2ssIHNrYiwgdWgpO1xcbjI2NDQ6XFx0XFx0XFx0aWYgKHJlZmNvdW50ZWQpXFxuMjY0NTpcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuMjY0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRpZiAocnQtXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcXG4yNjUwOlxcdFxcdFxcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRzayA9IF9fdWRwNF9saWJfbG9va3VwX3NrYihza2IsIHVoLVxcdTAwM2Vzb3VyY2UsIHVoLVxcdTAwM2VkZXN0KTtcXG4yNjUzOlxcdFxcdGlmIChzaylcXG4yNjU0OlxcdFxcdFxcdHJldHVybiB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcXG4yNjU1OlxcdG5vX3NrOlxcbjI2NTY6XFx0XFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpXFxuMjY1NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjY1ODpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbjI2NTk6XFx0XFxuMjY2MDpcXHRcXHQvKiBObyBzb2NrZXQuIERyb3AgcGFja2V0IHNpbGVudGx5LCBpZiBjaGVja3N1bSBpcyB3cm9uZyAqL1xcbjI2NjE6XFx0XFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4yNjYyOlxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbjI2NjU6XFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9OT1BPUlRTKTtcXG4yNjY2OlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxuMjY2NzpcXHRcXG4yNjY4OlxcdFxcdC8qXFxuMjY2OTpcXHRcXHQgKiBIbW0uICBXZSBnb3QgYW4gVURQIHBhY2tldCB0byBhIHBvcnQgdG8gd2hpY2ggd2VcXG4yNjcwOlxcdFxcdCAqIGRvbid0IHdhbm5hIGxpc3Rlbi4gIElnbm9yZSBpdC5cXG4yNjcxOlxcdFxcdCAqL1xcbjI2NzI6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcXG4yNjczOlxcdFxcdHJldHVybiAwO1xcbjI2NzQ6XFx0XFxuMjY3NTpcXHRzaG9ydF9wYWNrZXQ6XFxuMjY3NjpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbjI2Nzc6XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiVURQOiBzaG9ydCBwYWNrZXQ6IEZyb20gJXBJNDoldSAlZC8lZCB0byAlcEk0OiV1XFxcXG5cXFwiLFxcbjI2Nzg6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzYWRkciwgbnRvaHModWgtXFx1MDAzZXNvdXJjZSksXFxuMjY3OTpcXHRcXHRcXHRcXHQgICAgdWxlbiwgc2tiLVxcdTAwM2VsZW4sXFxuMjY4MDpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cXHUwMDNlZGVzdCkpO1xcbjI2ODE6XFx0XFx0Z290byBkcm9wO1xcbjI2ODI6XFx0XFxuMjY4MzpcXHRjc3VtX2Vycm9yOlxcbjI2ODQ6XFx0XFx0LypcXG4yNjg1OlxcdFxcdCAqIFJGQzExMjI6IE9LLiAgRGlzY2FyZHMgdGhlIGJhZCBwYWNrZXQgc2lsZW50bHkgKGFzIGZhciBhc1xcbjI2ODY6XFx0XFx0ICogdGhlIG5ldHdvcmsgaXMgY29uY2VybmVkLCBhbnl3YXkpIGFzIHBlciA0LjEuMy40IChNVVNUKS5cXG4yNjg3OlxcdFxcdCAqL1xcbjI2ODg6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVURQX0NTVU07XFxuMjY4OTpcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJVRFA6IGJhZCBjaGVja3N1bS4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbiAlZFxcXFxuXFxcIixcXG4yNjkwOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2FkZHIsIG50b2hzKHVoLVxcdTAwM2Vzb3VyY2UpLCBcXHUwMDI2ZGFkZHIsIG50b2hzKHVoLVxcdTAwM2VkZXN0KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MjYuMzU0MjAzMDk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MjQyMTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVEUCBSZWNlaXZlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYHVkcF9yY3ZgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCBqdXN0IHJldHVybnMgd2hhdGV2ZXIgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZ2l2ZXMgaXQuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpcyBgdWRwX3JjdmAgYWN0dWFsbHkgKmNhbGxlZCo/IFJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIHNvbWV0aGluZyBsaWtlIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWDigKYgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW4gdGhhdCBnZW5lcmFsIHZpY2luaXR5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGB1ZHBfcmN2YC4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgZG9uZSB3aXRoIHRoYXQgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBjaGVja2luZz8gRmxvdyBjb250cm9sPyBJcyBpdCBjcml0aWNhbCBmb3IgcHJvcGVyIG11bHRpY2FzdCBkZWxpdmVyeT8gVW5kZXJzdGFuZGluZyB0aGUgYHVkcF9yY3ZgIGNhbGwgY2hhaW4gYW5kIGhvdyB0aGUgcmV0dXJuIHZhbHVlIGlzIGhhbmRsZWQgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIFVEUCByZWNlaXZlIHBhdGguIFRoaXMgbG9va3MgbGlrZSB0aGUgcGxhY2UgdG8gZm9jdXMgbXkgZWZmb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MjkuODk2NjI2NjgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk4NTU2Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcF9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdWRwLmg9NDIyPXZvaWQgdWRwNF9od2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNyYywgX19iZTMyIGRzdCk7XFxuaW5jbHVkZS9uZXQvdWRwLmg6NDIzOmludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3VkcC5oLTQyNC1pbnQgdWRwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oPTU3Nz12b2lkIHVkcHY2X2VuY2FwX2VuYWJsZSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oLTU3OS1cXG5pbmNsdWRlL25ldC91ZHAuaDo1ODA6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3Jjdl9zZWdtZW50KHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL25ldC91ZHAuaC01ODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBpcHY0KVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTkyNS1cXHRuZXRfaG90ZGF0YS51ZHBfcHJvdG9jb2wgPSAoc3RydWN0IG5ldF9wcm90b2NvbCkge1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxOTI2OlxcdFxcdC5oYW5kbGVyID1cXHR1ZHBfcmN2LFxcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTI3LVxcdFxcdC5lcnJfaGFuZGxlciA9XFx0dWRwX2VycixcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MTUwPWJvb2wgaXBfY2FsbF9yYV9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0xODYtXFxubmV0L2lwdjQvaXBfaW5wdXQuYzoxODc6SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0xODgtSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYz0xODk9dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjA2LVxcdFxcdH1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIwNzpcXHRcXHRyZXQgPSBJTkRJUkVDVF9DQUxMXzIoaXBwcm90LVxcdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjA4LVxcdFxcdFxcdFxcdCAgICAgIHNrYik7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xNTEwPXZvaWQgdWRwX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTE1MjYtLyogYWxsIGhlYWQgc3RhdGVzIChkc3QsIHNrLCBuZiBjb25udHJhY2spIGV4Y2VwdCBza2IgZXh0ZW5zaW9ucyBhcmVcXG5uZXQvaXB2NC91ZHAuYzoxNTI3OiAqIGNsZWFyZWQgYnkgdWRwX3JjdigpLlxcbm5ldC9pcHY0L3VkcC5jLTE1MjgtICpcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI0MjM9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNDMyLVxcdF9fc2tiX3B1c2goc2tiLCAtc2tiX21hY19vZmZzZXQoc2tiKSk7XFxubmV0L2lwdjQvdWRwLmM6MjQzMzpcXHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIHRydWUpO1xcbm5ldC9pcHY0L3VkcC5jLTI0MzQtXFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjU2OT1zdGF0aWMgaW50IHVkcF91bmljYXN0X3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjU5MC1cXG5uZXQvaXB2NC91ZHAuYzoyNTkxOmludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdWRwLmMtMjU5Mi17XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz04Nzc9c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTg4NS1cXHRfX3NrYl9wdXNoKHNrYiwgLXNrYl9tYWNfb2Zmc2V0KHNrYikpO1xcbm5ldC9pcHY2L3VkcC5jOjg4NjpcXHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIGZhbHNlKTtcXG5uZXQvaXB2Ni91ZHAuYy04ODctXFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz04MTY9c3RhdGljIGludCBzY3RwX2N0bF9zb2NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy04MzktXFxubmV0L3NjdHAvcHJvdG9jb2wuYzo4NDA6c3RhdGljIGludCBzY3RwX3VkcF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtODQxLXtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9ODQ5PWludCBzY3RwX3VkcF9zb2NrX3N0YXJ0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtODY1LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjg2NjpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gc2N0cF91ZHBfcmN2O1xcbm5ldC9zY3RwL3Byb3RvY29sLmMtODY3LVxcdHR1bmNmZy5lbmNhcF9lcnJfbG9va3VwID0gc2N0cF91ZHBfdjRfZXJyO1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy04ODctXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSAxO1xcbm5ldC9zY3RwL3Byb3RvY29sLmM6ODg4OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBzY3RwX3VkcF9yY3Y7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy04ODktXFx0dHVuY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBzY3RwX3VkcF92Nl9lcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjMyLjg5NTE4ODg5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDMwMTczODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBVRFAgUGFja2V0IFJlLVN1Ym1pc3Npb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGB1ZHBfcXVldWVfcmN2X3NrYmAgZnVuY3Rpb24uLi4gaXQgc2VlbXMgdG8gYmUgcmV0dXJuaW5nIGEgcG9zaXRpdmUgdmFsdWUgd2hlbiBpdCAqZW5jYXBzdWxhdGVzKiB0aGUgaW5jb21pbmcgcGFja2V0IGFuZCBuZWVkcyBpdCB0byBiZSByZXN1Ym1pdHRlZC4gVGhhdCdzLi4uIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LlxuXG5SaWdodCwgc28gbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L3VkcC5jYCBhbmQgZGlnIGludG8gYHVkcF9xdWV1ZV9yY3Zfc2tiYC4gSSBuZWVkIHRvIHNlZSAqZXhhY3RseSogd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBwb3NpdGl2ZSByZXR1cm4sIHdoYXQgY29uZGl0aW9ucyBhcmUgYmVpbmcgY2hlY2tlZCwgYW5kIHdoYXQncyBoYXBwZW5pbmcgdG8gdGhlIHBhY2tldCB3aGVuIGl0J3MgZmxhZ2dlZCBmb3IgcmVzdWJtaXNzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBoZXJlIGFuZCBob3cgaXQncyBhZmZlY3RpbmcgdGhlIG5vcm1hbCBkYXRhZ3JhbSBwcm9jZXNzaW5nLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGltcGFjdCBwZXJmb3JtYW5jZSBpZiB3ZSdyZSBub3QgY2FyZWZ1bC4gTGV0J3Mgc2VlIGlmIHRoaXMgYmVoYXZpb3VyIGlzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjQyLjMyNTM2NDg3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MzY5NjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiXFxcXChzdHJ1Y3Qgc29jayBcXFxcKnNrLCBzdHJ1Y3Qgc2tfYnVmZiBcXFxcKnNrYlxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTIzNTA9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjQyMi1cXG5uZXQvaXB2NC91ZHAuYzoyNDIzOnN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3VkcC5jLTI0MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo0NS4yNjkwNjkwMTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NTQ2NTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRFAgUmVjZWl2ZSBRdWV1ZSBGdW5jdGlvbioqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdWRwX3F1ZXVlX3Jjdl9za2JgLiBBbHdheXMgZ29vZCB0byByZWZyZXNoIHRoZSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHBhdGgsIGFuZCB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgbnVhbmNlcy4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgcGF0dGVybnM6IFNLQiBoYW5kbGluZywgc29ja2V0IGxvY2sgYWNxdWlzaXRpb24sIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiByZWFzc2VtYmx5IG9yIG9mZmxvYWQgY29uc2lkZXJhdGlvbnMsIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVjZWl2ZSBxdWV1ZSBpdHNlbGYsIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGNvbnRleHQgdmVyc3VzIHRhc2tsZXQgY29uc2lkZXJhdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSB1cGRhdGVzLiBUaGlzIGlzIHdoZXJlIHRob3NlIHN1YnRsZSBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGFuZCBsb2NrIGhpZXJhcmNoeSB2aW9sYXRpb25zIHRlbmQgdG8gc25lYWsgaW4uIEkgZXhwZWN0IHRvIHNlZSBzb21lIGNsZXZlciB0cmlja3MgZm9yIGhhbmRsaW5nIFVEUCdzIGNvbm5lY3Rpb25sZXNzIG5hdHVyZSBhbmQgcG9zc2libHkgc29tZSBvcHRpbWl6YXRpb25zIGxldmVyYWdpbmcgdGhpbmdzIGxpa2UgY2hlY2tzdW0gb2ZmbG9hZCwgUlNTLCBvciBldmVuIGhhcmR3YXJlIHJlY2VpdmUgZmlsdGVycyBpZiB0aGUgTklDIHN1cHBvcnRzIHRoZW0uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjQ4LjkxNDUzNzAyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQyMzpcXHRzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yNDI0OlxcdHtcXG4yNDI1OlxcdFxcdHN0cnVjdCBza19idWZmICpuZXh0LCAqc2VncztcXG4yNDI2OlxcdFxcdGludCByZXQ7XFxuMjQyNzpcXHRcXG4yNDI4OlxcdFxcdGlmIChsaWtlbHkoIXVkcF91bmV4cGVjdGVkX2dzbyhzaywgc2tiKSkpXFxuMjQyOTpcXHRcXHRcXHRyZXR1cm4gdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xcbjI0MzA6XFx0XFxuMjQzMTpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1ZHBfc2tiX2NiKSBcXHUwMDNlIFNLQl9HU09fQ0JfT0ZGU0VUKTtcXG4yNDMyOlxcdFxcdF9fc2tiX3B1c2goc2tiLCAtc2tiX21hY19vZmZzZXQoc2tiKSk7XFxuMjQzMzpcXHRcXHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIHRydWUpO1xcbjI0MzQ6XFx0XFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbjI0MzU6XFx0XFx0XFx0X19za2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbjI0MzY6XFx0XFxuMjQzNzpcXHRcXHRcXHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XFxuMjQzODpcXHRcXHRcXHRyZXQgPSB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XFxuMjQzOTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4yNDQwOlxcdFxcdFxcdFxcdGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBza2IsIHJldCk7XFxuMjQ0MTpcXHRcXHR9XFxuMjQ0MjpcXHRcXHRyZXR1cm4gMDtcXG4yNDQzOlxcdH1cXG4yNDQ0OlxcdFxcbjI0NDU6XFx0LyogRm9yIFRDUCBzb2NrZXRzLCBza19yeF9kc3QgaXMgcHJvdGVjdGVkIGJ5IHNvY2tldCBsb2NrXFxuMjQ0NjpcXHQgKiBGb3IgVURQLCB3ZSB1c2UgeGNoZygpIHRvIGd1YXJkIGFnYWluc3QgY29uY3VycmVudCBjaGFuZ2VzLlxcbjI0NDc6XFx0ICovXFxuMjQ0ODpcXHRib29sIHVkcF9za19yeF9kc3Rfc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbjI0NDk6XFx0e1xcbjI0NTA6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb2xkO1xcbjI0NTE6XFx0XFxuMjQ1MjpcXHRcXHRpZiAoZHN0X2hvbGRfc2FmZShkc3QpKSB7XFxuMjQ1MzpcXHRcXHRcXHRvbGQgPSB1bnJjdV9wb2ludGVyKHhjaGcoXFx1MDAyNnNrLVxcdTAwM2Vza19yeF9kc3QsIFJDVV9JTklUSUFMSVpFUihkc3QpKSk7XFxuMjQ1NDpcXHRcXHRcXHRkc3RfcmVsZWFzZShvbGQpO1xcbjI0NTU6XFx0XFx0XFx0cmV0dXJuIG9sZCAhPSBkc3Q7XFxuMjQ1NjpcXHRcXHR9XFxuMjQ1NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjQ1ODpcXHR9XFxuMjQ1OTpcXHRcXG4yNDYwOlxcdC8qXFxuMjQ2MTpcXHQgKlxcdE11bHRpY2FzdHMgYW5kIGJyb2FkY2FzdHMgZ28gdG8gZWFjaCBsaXN0ZW5lci5cXG4yNDYyOlxcdCAqXFxuMjQ2MzpcXHQgKlxcdE5vdGU6IGNhbGxlZCBvbmx5IGZyb20gdGhlIEJIIGhhbmRsZXIgY29udGV4dC5cXG4yNDY0OlxcdCAqL1xcbjI0NjU6XFx0c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjI0NjY6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcXG4yNDY3OlxcdFxcdFxcdFxcdFxcdCAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkcilcXG4yNDY4OlxcdHtcXG4yNDY5OlxcdFxcdHN0cnVjdCB1ZHBfdGFibGUgKnVkcHRhYmxlID0gbmV0LVxcdTAwM2VpcHY0LnVkcF90YWJsZTtcXG4yNDcwOlxcdFxcdHVuc2lnbmVkIGludCBoYXNoMiwgaGFzaDJfYW55LCBvZmZzZXQ7XFxuMjQ3MTpcXHRcXHR1bnNpZ25lZCBzaG9ydCBobnVtID0gbnRvaHModWgtXFx1MDAzZWRlc3QpO1xcbjI0NzI6XFx0XFx0c3RydWN0IHNvY2sgKnNrLCAqZmlyc3QgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo0OC45MTQ5MDMwODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MjUyMDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgVURQIFBhY2tldCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBVRFAgcGFja2V0cy4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaGF2aW5nIHNvbWUgc3BlY2lhbCBiZWhhdmlvciByZWxhdGVkIHRvIGVuY2Fwc3VsYXRpb24uIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGUgcGFja2V0ICpuZWVkcyogdG8gYmUgcmVzdWJtaXR0ZWQsIHByZXN1bWFibHkgYmVjYXVzZSBpdCdzIGVuY2Fwc3VsYXRlZCBpbiBzb21lIGZhc2hpb24uIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgZXhhY3RseSBob3cgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgd29ya3MuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaXRzIHJldHVybiB2YWx1ZSBzZW1hbnRpY3MsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IHJldHVybnMgcG9zaXRpdmUsIGFuZCB3aGF0IHRoYXQgcG9zaXRpdmUgdmFsdWUgc2lnbmlmaWVzIGluIHRlcm1zIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LiBFc3NlbnRpYWxseSwgSSBuZWVkIGEgZGV0YWlsZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHBhY2tldHMgYXJlIG1hbmFnZWQgdXBzdHJlYW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo1Mi4zNjc0Mjc0NTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNTA6XFx0c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIzNTE6XFx0e1xcbjIzNTI6XFx0XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4yMzUzOlxcdFxcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xcbjIzNTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRcXHQvKlxcbjIzNTc6XFx0XFx0ICpcXHRDaGFyZ2UgaXQgdG8gdGhlIHNvY2tldCwgZHJvcHBpbmcgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwuXFxuMjM1ODpcXHRcXHQgKi9cXG4yMzU5OlxcdFxcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbjIzNjA6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XFxuMjM2MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjM2MjpcXHRcXHR9XFxuMjM2MzpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbjIzNjQ6XFx0XFxuMjM2NTpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2dWRwX2VuY2FwX25lZWRlZF9rZXkpIFxcdTAwMjZcXHUwMDI2XFxuMjM2NjpcXHRcXHQgICAgUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF90eXBlKSkge1xcbjIzNjc6XFx0XFx0XFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbjIzNjg6XFx0XFxuMjM2OTpcXHRcXHRcXHQvKlxcbjIzNzA6XFx0XFx0XFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cXG4yMzcxOlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQncyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XFxuMjM3MjpcXHRcXHRcXHQgKiBmYWxsIHRocm91Z2ggYW5kIHBhc3MgdGhpcyB1cCB0aGUgVURQIHNvY2tldC5cXG4yMzczOlxcdFxcdFxcdCAqIHVwLVxcdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XFxuMjM3NDpcXHRcXHRcXHQgKiA9MCBpZiBza2Igd2FzIHN1Y2Nlc3NmdWxseSBwYXNzZWQgdG8gdGhlIGVuY2FwXFxuMjM3NTpcXHRcXHRcXHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXFxuMjM3NjpcXHRcXHRcXHQgKiBcXHUwMDNlMCBpZiBza2Igc2hvdWxkIGJlIHBhc3NlZCBvbiB0byBVRFAuXFxuMjM3NzpcXHRcXHRcXHQgKiBcXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXFxuMjM3ODpcXHRcXHRcXHQgKi9cXG4yMzc5OlxcdFxcbjIzODA6XFx0XFx0XFx0LyogaWYgd2UncmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xcbjIzODE6XFx0XFx0XFx0ZW5jYXBfcmN2ID0gUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF9yY3YpO1xcbjIzODI6XFx0XFx0XFx0aWYgKGVuY2FwX3Jjdikge1xcbjIzODM6XFx0XFx0XFx0XFx0aW50IHJldDtcXG4yMzg0OlxcdFxcbjIzODU6XFx0XFx0XFx0XFx0LyogVmVyaWZ5IGNoZWNrc3VtIGJlZm9yZSBnaXZpbmcgdG8gZW5jYXAgKi9cXG4yMzg2OlxcdFxcdFxcdFxcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuMjM4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMjM4ODpcXHRcXG4yMzg5OlxcdFxcdFxcdFxcdHJldCA9IGVuY2FwX3Jjdihzaywgc2tiKTtcXG4yMzkwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbjIzOTE6XFx0XFx0XFx0XFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XFxuMjM5MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLXJldDtcXG4yMzkzOlxcdFxcdFxcdFxcdH1cXG4yMzk0OlxcdFxcdFxcdH1cXG4yMzk1OlxcdFxcbjIzOTY6XFx0XFx0XFx0LyogRkFMTFRIUk9VR0ggLS0gaXQncyBhIFVEUCBQYWNrZXQgKi9cXG4yMzk3OlxcdFxcdH1cXG4yMzk4OlxcdFxcbjIzOTk6XFx0XFx0cHJlZmV0Y2goXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6NTIuMzY3NjExMDM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjM3OTIxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgdGhlIFVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgUGF0aCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgcmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgaWYgYGVuY2FwX3JjdmAgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLiBUaGF0IG5lZ2F0aXZlIHZhbHVlIGZyb20gYGVuY2FwX3JjdmAgc2lnbmlmaWVzIHRoYXQgdGhlIGBza2JgIG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wsIHNheSwgYC1OYC4gU28gd2hlbiBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCByZXR1cm5zIGEgdmFsdWUsIGxldCdzIGNhbGwgaXQgYC1yZXRgLCAgdGhhdCB2YWx1ZSwgd2hlbiByZS1pbnRlcnByZXRlZCwgaXMgYWN0dWFsbHkgKnBvc2l0aXZlKiBhbmQgaW5kaWNhdGVzIGEgcmVzdWJtaXNzaW9uIGlzIG5lZWRlZCBmb3IgcHJvdG9jb2wgYHJldGAuXG5cbk5vdywgZGlnZ2luZyBhIGJpdCBkZWVwZXIgaW50byBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBJIHNlZSB0aGF0IGl0IHVzZXMgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaWYgdGhlIEdTTyBpc24ndCB1bmV4cGVjdGVkLiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0ICBgdWRwX3F1ZXVlX3Jjdl9za2JgIGl0c2VsZiByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUgaWYgdGhlIHBhY2tldCBtdXN0IGJlIHJlc3VibWl0dGVkLlxuXG5Mb29raW5nIGF0IGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIG5leHQuIEhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBhcyBpdCBhcHBlYXJzIHRvIHJldHVybiBgLXJldGAgd2hlbiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybnMgYSBwb3NpdGl2ZSBgcmV0YC4gVGhpcyBtZWFucyB0aGF0IGlmIHJlc3VibWlzc2lvbiBpcyByZXF1aXJlZCAoaW5kaWNhdGVkIGJ5IGB1ZHBfcXVldWVfcmN2X3NrYmAgcmV0dXJuaW5nIGBcdTAwM2UgMGApLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuIEZpbmFsbHksIGB1ZHBfcmN2YCBpdHNlbGYgcmV0dXJucyB3aGF0ZXZlciBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpbiBgbmV0L2lwdjQvaXBfaW5wdXQuY2AgdG8gc2VlIGhvdyB0aGUgd2hvbGUgcHJvY2VzcyBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjU4LjczMTQwNTE2NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4OTpcXHR2b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxcbiAxOTA6XFx0e1xcbiAxOTE6XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCAqaXBwcm90O1xcbiAxOTI6XFx0XFx0aW50IHJhdywgcmV0O1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRyZXN1Ym1pdDpcXG4gMTk1OlxcdFxcdHJhdyA9IHJhd19sb2NhbF9kZWxpdmVyKHNrYiwgcHJvdG9jb2wpO1xcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9wcm90b3NbcHJvdG9jb2xdKTtcXG4gMTk4OlxcdFxcdGlmIChpcHByb3QpIHtcXG4gMTk5OlxcdFxcdFxcdGlmICghaXBwcm90LVxcdTAwM2Vub19wb2xpY3kpIHtcXG4gMjAwOlxcdFxcdFxcdFxcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuIDIwMTpcXHRcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYixcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1kpO1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDQ6XFx0XFx0XFx0XFx0fVxcbiAyMDU6XFx0XFx0XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gMjA2OlxcdFxcdFxcdH1cXG4gMjA3OlxcdFxcdFxcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXFx1MDAzZWhhbmRsZXIsIHRjcF92NF9yY3YsIHVkcF9yY3YsXFxuIDIwODpcXHRcXHRcXHRcXHRcXHQgICAgICBza2IpO1xcbiAyMDk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMjEwOlxcdFxcdFxcdFxcdHByb3RvY29sID0gLXJldDtcXG4gMjExOlxcdFxcdFxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuIDIxMjpcXHRcXHRcXHR9XFxuIDIxMzpcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xcbiAyMTQ6XFx0XFx0fSBlbHNlIHtcXG4gMjE1OlxcdFxcdFxcdGlmICghcmF3KSB7XFxuIDIxNjpcXHRcXHRcXHRcXHRpZiAoeGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuIDIxNzpcXHRcXHRcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOVU5LTk9XTlBST1RPUyk7XFxuIDIxODpcXHRcXHRcXHRcXHRcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCxcXG4gMjE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgSUNNUF9QUk9UX1VOUkVBQ0gsIDApO1xcbiAyMjA6XFx0XFx0XFx0XFx0fVxcbiAyMjE6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9OT1BST1RPKTtcXG4gMjIyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIyMzpcXHRcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xcbiAyMjQ6XFx0XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gMjI1OlxcdFxcdFxcdH1cXG4gMjI2OlxcdFxcdH1cXG4gMjI3OlxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XFxuIDIzMjpcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xcbiAyMzM6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSk7XFxuIDIzNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcXG4gMjM4OlxcdFxcdF9fc2tiX3B1bGwoc2tiLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo1OC43MzE1MDUxNjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1ODgwNjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUHJvdG9jb2wgRGVsaXZlcnkgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgY2hlY2tzIGlmIHRoZSByZXR1cm4gdmFsdWUsIGByZXRgLCBpcyBsZXNzIHRoYW4gemVyby4gSWYgaXQgKmlzKiwgdGhlbiBpdCdzIGludGVycHJldGluZyB0aGF0IG5lZ2F0aXZlIHZhbHVlLiBUaGUgY29kZSBzZXRzIGBwcm90b2NvbGAgdG8gdGhlICphYnNvbHV0ZSB2YWx1ZSogb2YgYHJldGAsIGVmZmVjdGl2ZWx5IGludmVydGluZyBpdCwgYW5kIHRoZW4ganVtcHMgdG8gdGhlIGByZXN1Ym1pdGAgbGFiZWwuIFNvLCBpZiBhIGZ1bmN0aW9uIGxpa2UgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgd2VyZSB0byByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgc3BlY2lmaWNhbGx5IGEgbmVnYXRpdmUgdmFsdWUgdGhhdCdzIHRoZSBuZWdhdGl2ZSBvZiBhIHBvc2l0aXZlIHByb3RvY29sIG51bWJlciAobWVhbmluZyBpdCByZXR1cm5zIGAtcmV0YCwgd2hlcmUgYHJldCBcdTAwM2UgMGAgaXMgdGhlIHByb3RvY29sIG51bWJlciksIHRoYXQgbmVnYXRpdmUgcmV0dXJuIHdpbGwgY29ycmVjdGx5IHRyaWdnZXIgdGhlIHJlc3VibWlzc2lvbiBwYXRoIHdpdGhpbiBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaGUgd2hvbGUgc3lzdGVtIHNlZW1zIHdlbGwgZGVzaWduZWQuIEJ1dCBJIHNob3VsZCBjb25maXJtIHRoaXMgaXMgY29uc2lzdGVudCBhY3Jvc3MgSVB2NCBhbmQgSVB2Ni4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIElQdjYgZXF1aXZhbGVudCwgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAsIGxvY2F0ZWQgaW4gYG5ldC9pcHY2L2lwNl9pbnB1dC5jYC4gSSBoYXZlIHRvIGNvbmZpcm0gdGhpcyBzYW1lIGxvZ2ljIGhvbGRzIHRydWUgZm9yIElQdjYgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjAzLjI5MDMxNTE1NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5Njc5MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXB2Ni5oPTEwODc9aW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9pcHY2Lmg6MTA4ODp2b2lkIGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLFxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMDg5LVxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0zOTg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDItICovXFxubmV0L2lwdjYvaXA2X2lucHV0LmM6NDAzOnZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNDA0LVxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzMtXFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MzQ6XFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCAwLCBmYWxzZSk7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTM1LVxcbi0tXFxubmV0L2lwdjYvdWRwLmM9ODc3PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy04OTItXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxubmV0L2lwdjYvdWRwLmM6ODkzOlxcdFxcdFxcdGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgc2tiLCByZXQsXFxubmV0L2lwdjYvdWRwLmMtODk0LVxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MDUuMzg3MTE3NjA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQzMzkyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YDpcblxuKipBbmFseXppbmcgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGdldHRpbmcgc2l0dWF0ZWQuIFwiaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1XCIuLi4gdGhpcyBzY3JlYW1zIElQdjYgcHJvdG9jb2wgZGVsaXZlcnksIGxpa2VseSBpbnZvbHZpbmcgUmVhZC1Db3B5IFVwZGF0ZSAoUkNVKSBmb3IgY29uY3VycmVuY3kgc2FmZXR5LiBLbm93aW5nIHRoZSBjb250ZXh0IGlzIGNydWNpYWwsIHNvIEknbSBhbHJlYWR5IG1lbnRhbGx5IHRhZ2dpbmcgdGhpcyBhcyBhIGNvcmUgbmV0d29yayBmdW5jdGlvbiwgcHJvYmFibHkgZGVhbGluZyB3aXRoIHBhY2tldCByZWNlcHRpb24gb3IgZm9yd2FyZGluZyBhdCBhIHByZXR0eSBmdW5kYW1lbnRhbCBsZXZlbC4gVGhlIFwiUkNVXCIgcGFydCBpcyBhIGdvb2Qgc2lnbiDigJMgaXQgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgYWxsb3dpbmcgY29uY3VycmVudCByZWFkcywgd2hpbGUgdXBkYXRlcyAoYW5kIG1vZGlmaWNhdGlvbnMpIGFyZSBoYW5kbGVkIGluIGEgc2VwYXJhdGUgcGhhc2VkIG1hbm5lciB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbi4gTWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBzZWUgKmhvdyogdGhleSdyZSB1c2luZyBSQ1UsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwcm90ZWN0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzLiBJcyBpdCBhIHF1ZXVlLCBoYXNoIHRhYmxlLCBhIGxvb2t1cD8gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MDkuMTExNDU5MzU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDM6XFx0dm9pZCBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcixcXG4gNDA0OlxcdFxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcXG4gNDA1OlxcdHtcXG4gNDA2OlxcdFxcdGludCBleHRoZHJfY250ID0gSVA2Q0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZTS0JfSE9QQllIT1AgPyAxIDogMDtcXG4gNDA3OlxcdFxcdGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqaXBwcm90O1xcbiA0MDg6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gNDA5OlxcdFxcdHVuc2lnbmVkIGludCBuaG9mZjtcXG4gNDEwOlxcdFxcdFNLQl9EUihyZWFzb24pO1xcbiA0MTE6XFx0XFx0Ym9vbCByYXc7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdC8qXFxuIDQxNDpcXHRcXHQgKlxcdFBhcnNlIGV4dGVuc2lvbiBoZWFkZXJzXFxuIDQxNTpcXHRcXHQgKi9cXG4gNDE2OlxcdFxcbiA0MTc6XFx0cmVzdWJtaXQ6XFxuIDQxODpcXHRcXHRpZGV2ID0gaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSk7XFxuIDQxOTpcXHRcXHRuaG9mZiA9IElQNkNCKHNrYiktXFx1MDAzZW5ob2ZmO1xcbiA0MjA6XFx0XFx0aWYgKCFoYXZlX2ZpbmFsKSB7XFxuIDQyMTpcXHRcXHRcXHRpZiAoIXBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpKVxcbiA0MjI6XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0MjM6XFx0XFx0XFx0bmV4dGhkciA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpW25ob2ZmXTtcXG4gNDI0OlxcdFxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0cmVzdWJtaXRfZmluYWw6XFxuIDQyNzpcXHRcXHRyYXcgPSByYXc2X2xvY2FsX2RlbGl2ZXIoc2tiLCBuZXh0aGRyKTtcXG4gNDI4OlxcdFxcdGlwcHJvdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbbmV4dGhkcl0pO1xcbiA0Mjk6XFx0XFx0aWYgKGlwcHJvdCkge1xcbiA0MzA6XFx0XFx0XFx0aW50IHJldDtcXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0XFx0aWYgKGhhdmVfZmluYWwpIHtcXG4gNDMzOlxcdFxcdFxcdFxcdGlmICghKGlwcHJvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkpIHtcXG4gNDM0OlxcdFxcdFxcdFxcdFxcdC8qIE9uY2Ugd2UndmUgc2VlbiBhIGZpbmFsIHByb3RvY29sIGRvbid0XFxuIDQzNTpcXHRcXHRcXHRcXHRcXHQgKiBhbGxvdyBlbmNhcHN1bGF0aW9uIG9uIGFueSBub24tZmluYWxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAqIG9uZXMuIFRoaXMgYWxsb3dzIGZvbyBpbiBVRFAgZW5jYXBzdWxhdGlvblxcbiA0Mzc6XFx0XFx0XFx0XFx0XFx0ICogdG8gd29yay5cXG4gNDM4OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA0Mzk6XFx0XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0NDA6XFx0XFx0XFx0XFx0fVxcbiA0NDE6XFx0XFx0XFx0fSBlbHNlIGlmIChpcHByb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU5FVDZfUFJPVE9fRklOQUwpIHtcXG4gNDQyOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxuIDQ0MzpcXHRcXHRcXHRcXHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcXG4gNDQ0OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdFxcdFxcdC8qIE9ubHkgZG8gdGhpcyBvbmNlIGZvciBmaXJzdCBmaW5hbCBwcm90b2NvbCAqL1xcbiA0NDc6XFx0XFx0XFx0XFx0aGF2ZV9maW5hbCA9IHRydWU7XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDQ1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA0NTI6XFx0XFx0XFx0XFx0aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MDkuMTExNTY2MzA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjQ1MzgxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0ZWxsaW5nIG15c2VsZiB0byBhY3R1YWxseSAqcmVhZCogdGhlIHJlc3Qgb2YgdGhlIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGZ1bmN0aW9uLiBObyBza2ltbWluZywgbm8gYXNzdW1wdGlvbnMsIGp1c3QgYSB0aG9yb3VnaCwgbGluZS1ieS1saW5lIGV4YW1pbmF0aW9uLiBUaGlzIGlzbid0IHRoZSBraW5kIG9mIGZ1bmN0aW9uIHlvdSBjYW4ganVzdCBnbGFuY2UgYXQ7IHRoZXJlIGFyZSBsaWtlbHkgc3VidGxlIGludGVyYWN0aW9ucyBhbmQgdGltaW5nIGlzc3VlcyBpbiBwbGF5IHRoYXQgcmVxdWlyZSBhIGRlZXAgdW5kZXJzdGFuZGluZy4gSSdtIG1lbnRhbGx5IHByZXBhcmluZyB0byBkaWcgaW4gYW5kIHJlYWxseSAqdW5kZXJzdGFuZCogd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBJUHY2IHByb3RvY29sIHN0YWNrLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgUkNVLXJlbGF0ZWQgZnVuY3Rpb25zIGNhbiBoYXZlIGNvbXBsZXggbG9ja2luZyBhbmQgbWVtb3J5IHN5bmNocm9uaXphdGlvbiBjb25zaWRlcmF0aW9ucywgc28gSSdtIGJyYWNpbmcgbXlzZWxmIGZvciB0aGF0LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MTIuNDM2MTA2NTAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdFxcdFxcdC8qIHNrYi1cXHUwMDNlZGV2IHBhc3NlZCBtYXkgYmUgbWFzdGVyIGRldiBmb3IgdnJmcy4gKi9cXG4gNDU1OlxcdFxcdFxcdFxcdGlmIChzZGlmKSB7XFxuIDQ1NjpcXHRcXHRcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHNkaWYpO1xcbiA0NTc6XFx0XFx0XFx0XFx0XFx0aWYgKCFkZXYpXFxuIDQ1ODpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuIDQ1OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA0NjA6XFx0XFx0XFx0XFx0XFx0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIDQ2MTpcXHRcXHRcXHRcXHR9XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdFxcdFxcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZoZHItXFx1MDAzZWRhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbiA0NjQ6XFx0XFx0XFx0XFx0ICAgICFpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIsXFxuIDQ2NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmhkci1cXHUwMDNlc2FkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIDQ2NjpcXHRcXHRcXHRcXHQgICAgIWlwdjZfaXNfbWxkKHNrYiwgbmV4dGhkciwgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSkge1xcbiA0Njc6XFx0XFx0XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIElQX0lOQUREUkVSUk9SUyk7XFxuIDQ2ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuIDQ2OTpcXHRcXHRcXHRcXHR9XFxuIDQ3MDpcXHRcXHRcXHR9XFxuIDQ3MTpcXHRcXHRcXHRpZiAoIShpcHByb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU5FVDZfUFJPVE9fTk9QT0xJQ1kpKSB7XFxuIDQ3MjpcXHRcXHRcXHRcXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiA0NzM6XFx0XFx0XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFhGUk1fUE9MSUNZKTtcXG4gNDc0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDc1OlxcdFxcdFxcdFxcdH1cXG4gNDc2OlxcdFxcdFxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIDQ3NzpcXHRcXHRcXHR9XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdFxcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXFx1MDAzZWhhbmRsZXIsIHRjcF92Nl9yY3YsIHVkcHY2X3JjdixcXG4gNDgwOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYik7XFxuIDQ4MTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbiA0ODI6XFx0XFx0XFx0XFx0aWYgKGlwcHJvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkge1xcbiA0ODM6XFx0XFx0XFx0XFx0XFx0LyogTm90IGFuIGV4dGVuc2lvbiBoZWFkZXIsIG1vc3QgbGlrZWx5IFVEUFxcbiA0ODQ6XFx0XFx0XFx0XFx0XFx0ICogZW5jYXBzdWxhdGlvbi4gVXNlIHJldHVybiB2YWx1ZSBhcyBuZXh0aGRyXFxuIDQ4NTpcXHRcXHRcXHRcXHRcXHQgKiBwcm90b2NvbCBub3QgbmhvZmYgKHdoaWNoIHByZXN1bWFibHkgaXNcXG4gNDg2OlxcdFxcdFxcdFxcdFxcdCAqIG5vdCBzZXQgYnkgaGFuZGxlcikuXFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNDg4OlxcdFxcdFxcdFxcdFxcdG5leHRoZHIgPSByZXQ7XFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3VibWl0X2ZpbmFsO1xcbiA0OTA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDkxOlxcdFxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShleHRoZHJfY250KysgXFx1MDAzZT0gSVA2X01BWF9FWFRfSERSU19DTlQpKSB7XFxuIDQ5MjpcXHRcXHRcXHRcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBWNl9UT09fTUFOWV9FWFRIRFJTKTtcXG4gNDkzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDk0OlxcdFxcdFxcdFxcdFxcdH1cXG4gNDk1OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuIDQ5NjpcXHRcXHRcXHRcXHR9XFxuIDQ5NzpcXHRcXHRcXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XFxuIDQ5ODpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcXG4gNDk5OlxcdFxcdFxcdH1cXG4gNTAwOlxcdFxcdH0gZWxzZSB7XFxuIDUwMTpcXHRcXHRcXHRpZiAoIXJhdykge1xcbiA1MDI6XFx0XFx0XFx0XFx0aWYgKHhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjoxMi40MzYyMDA0ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2ODYzMTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJUHY2IFBhY2tldCBEZWxpdmVyeSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBJUHY2IGNvZGUgYW5kIHNvbWV0aGluZydzIGNhdWdodCBteSBleWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBoYXMgdGhpcyBleHBlY3RhdGlvbjogaXQgbmVlZHMgYHJldCBcdTAwM2UgMGAgdG8gdHJpZ2dlciBhIHJlc3VibWl0LiBJbnRlcmVzdGluZy4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBgcmV0YCBjb21lcyBmcm9tLiBBaGEhIFRoZSBmdW5jdGlvbiBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zIHRoaXMgYHJldGAgdmFsdWUuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgcmV0YCBpcyBjb21pbmcgZnJvbSBhIGRvd25zdHJlYW0gZnVuY3Rpb24sIGFuZCBpbiBwYXJ0aWN1bGFyLCB0aGF0IHRoaXMgYHJldGAgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSByZXN1Ym1pdCBpcyByZXF1aXJlZC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmFjdG9ycyBpbXBhY3QgdGhpcyByZXR1cm4gdmFsdWUuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHJldGAgdmFsdWUgaXMuIEl0IGFwcGVhcnMgdG8gYmUgdGllZCB0byBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd29ya3MuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2Ni91ZHAuY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBxdWV1ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjoxNi4zMDQ4MzQwOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3NzpcXHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA4Nzg6XFx0e1xcbiA4Nzk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5leHQsICpzZWdzO1xcbiA4ODA6XFx0XFx0aW50IHJldDtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcXG4gODgzOlxcdFxcdFxcdHJldHVybiB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcXG4gODg2OlxcdFxcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgZmFsc2UpO1xcbiA4ODc6XFx0XFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbiA4ODg6XFx0XFx0XFx0X19za2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHRcXHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XFxuIDg5MTpcXHRcXHRcXHRyZXQgPSB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcXG4gODkyOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiA4OTM6XFx0XFx0XFx0XFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBza2IsIHJldCxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4gODk1OlxcdFxcdH1cXG4gODk2OlxcdFxcdHJldHVybiAwO1xcbiA4OTc6XFx0fVxcbiA4OTg6XFx0XFxuIDg5OTpcXHRzdGF0aWMgYm9vbCBfX3VkcF92Nl9pc19tY2FzdF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiA5MDA6XFx0XFx0XFx0XFx0XFx0ICAgX19iZTE2IGxvY19wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLFxcbiA5MDE6XFx0XFx0XFx0XFx0XFx0ICAgX19iZTE2IHJtdF9wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLFxcbiA5MDI6XFx0XFx0XFx0XFx0XFx0ICAgaW50IGRpZiwgaW50IHNkaWYsIHVuc2lnbmVkIHNob3J0IGhudW0pXFxuIDkwMzpcXHR7XFxuIDkwNDpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuIDkwNTpcXHRcXG4gOTA2OlxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4gOTA3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0aWYgKHVkcF9zayhzayktXFx1MDAzZXVkcF9wb3J0X2hhc2ggIT0gaG51bSB8fFxcbiA5MTA6XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYgfHxcXG4gOTExOlxcdFxcdCAgICAoaW5ldC1cXHUwMDNlaW5ldF9kcG9ydCBcXHUwMDI2XFx1MDAyNiBpbmV0LVxcdTAwM2VpbmV0X2Rwb3J0ICE9IHJtdF9wb3J0KSB8fFxcbiA5MTI6XFx0XFx0ICAgICghaXB2Nl9hZGRyX2FueShcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbiA5MTM6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkciwgcm10X2FkZHIpKSB8fFxcbiA5MTQ6XFx0XFx0ICAgICF1ZHBfc2tfYm91bmRfZGV2X2VxKG5ldCwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpLCBkaWYsIHNkaWYpIHx8XFxuIDkxNTpcXHRcXHQgICAgKCFpcHY2X2FkZHJfYW55KFxcdTAwMjZzay1cXHUwMDNlc2tfdjZfcmN2X3NhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbiA5MTY6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9yY3Zfc2FkZHIsIGxvY19hZGRyKSkpXFxuIDkxNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDkxODpcXHRcXHRpZiAoIWluZXQ2X21jX2NoZWNrKHNrLCBsb2NfYWRkciwgcm10X2FkZHIpKVxcbiA5MTk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5MjA6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDkyMTpcXHR9XFxuIDkyMjpcXHRcXG4gOTIzOlxcdHN0YXRpYyB2b2lkIHVkcDZfY3N1bV96ZXJvX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxuIDkyNDpcXHR7XFxuIDkyNTpcXHRcXHQvKiBSRkMgMjQ2MCBzZWN0aW9uIDguMSBzYXlzIHRoYXQgd2UgU0hPVUxEIGxvZ1xcbiA5MjY6XFx0XFx0ICogdGhpcyBlcnJvci4gV2VsbCwgaXQgaXMgcmVhc29uYWJsZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MTYuMzA0OTk0MDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MjczOTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipVRFB2NiBSZXN1Ym1pc3Npb24gTG9naWMgLSBBIFF1aWNrIENoZWNrKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGNsaWNrZWQuIEkgd2FzIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIElQdjYgVURQIGNvZGUsIGJ1dCBJIHRoaW5rIEkgcmVtZW1iZXIgc29tZXRoaW5nIGltcG9ydGFudC4gV2Fzbid0IGl0IHRoZSBjYXNlIHRoYXQgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBiZWhhdmVzIGxpa2UgaXRzIElQdjQgY291bnRlcnBhcnQsIHNwZWNpZmljYWxseSByZXR1cm5pbmcgYSB2YWx1ZSAqZ3JlYXRlciB0aGFuIHplcm8qIGlmIHRoZSBTS0IgbmVlZHMgdG8gYmUgcmVzdWJtaXR0ZWQ/IEl0J3MgdGhhdCBpbmRpY2F0b3Igd2UncmUgYWZ0ZXIsIHJpZ2h0PyBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCdzIHJldHVybiB2YWx1ZSBpcyB0aGUga2V5IHNpZ25hbCB3ZSdyZSBsb29raW5nIGZvciwganVzdCBhcyBpdCBpcyBpbiB0aGUgSVB2NCBpbXBsZW1lbnRhdGlvbi4gQmV0dGVyIHRvIGJlIHByZWNpc2UgYW5kIHJlLWV4YW1pbmUgdGhhdCBmdW5jdGlvbiB0byBlbGltaW5hdGUgYW55IGFtYmlndWl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5OTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjIwLjA1NzczNTg0OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4ODU0MTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiXFxcXChzdHJ1Y3Qgc29jayBcXFxcKnNrLCBzdHJ1Y3Qgc2tfYnVmZiBcXFxcKnNrYlxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3VkcC5jPTc3Mj1zdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy04MDUtXFxubmV0L2lwdjYvdWRwLmM6ODA2OnN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L3VkcC5jLTgwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjIyLjg0NjI4MzQ1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY5NTE1NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggcmVjZWl2aW5nIGEgc2luZ2xlIFNLQiAoU29ja2V0IEJ1ZmZlcikgd2l0aGluIHRoZSBJUHY2IFVEUCBjb250ZXh0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoYXQgSSBleHBlY3QgdG8gZmluZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljOiB0aGUgaW50YWtlIG9mIHRoZSBkYXRhLCBhbnkgY3J1Y2lhbCBjaGVja3Mgb24gdGhlIHBhY2tldCBoZWFkZXJzIChzb3VyY2UvZGVzdGluYXRpb24gcG9ydHMsIGxlbmd0aHMsIGNoZWNrc3VtcyDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyksIGFuZCBob3cgaXQncyB0aGVuIHF1ZXVlZCBvciBwcm9jZXNzZWQgZnVydGhlciB3aXRoaW4gdGhlIElQdjYgVURQIHN0YWNrLiBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIOKAkyBhcmUgdGhlcmUgbG9ja3MgaW52b2x2ZWQsIGFyZSB0aGluZ3MgYXRvbWljPyBTaW5jZSBpdCdzIGEgXCJxdWV1ZVwiIGZ1bmN0aW9uLCBJIGFzc3VtZSB0aGVyZSdzIHNvbWUga2luZCBvZiBkYXRhIHN0cnVjdHVyZSwgbGlrZWx5IGEgbGlua2VkIGxpc3Qgb3Igc2ltaWxhciwgaW52b2x2ZWQgaW4gaG9sZGluZyBwYWNrZXRzIHRoYXQgaGF2ZW4ndCBiZWVuIGZ1bGx5IGhhbmRsZWQgeWV0LiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmUgKGxpa2VseSBgc3RydWN0IHNvY2tgKSBhbmQgd2hhdCByb2xlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWlnaHQgcGxheSBoZXJlLCBpZiBhbnkuIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHF1ZXVlIGlzIGZ1bGw/IFdoYXQgaWYgY2hlY2tzdW0gdmFsaWRhdGlvbiBmYWlscz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgSSBjYW4gaWRlbnRpZnkgcXVpY2tseSwgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIGlzc3VlcyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzPyBBbmQgZmluYWxseSwgZ2l2ZW4gdGhpcyBpcyBJUHY2LCBJIHdpbGwgd2FudCB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgY2FwYWJpbGl0aWVzLiBNeSBleHBlcnQgaW5zdGluY3QgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmFkbHkgaW1wbGVtZW50ZWQsIHRoZW4gdGhlIHdob2xlIHN5c3RlbSB3aWxsIGJlIGV4cG9zZWQgdG8gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MjYuOTE1ODAyMDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDY6XFx0c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDgwNzpcXHR7XFxuIDgwODpcXHRcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbiA4MDk6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuIDgxMDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuIDgxMTpcXHRcXG4gODEyOlxcdFxcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiA4MTM6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XFxuIDgxNDpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDgxNTpcXHRcXHR9XFxuIDgxNjpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2dWRwdjZfZW5jYXBfbmVlZGVkX2tleSkgXFx1MDAyNlxcdTAwMjZcXG4gODE5OlxcdFxcdCAgICBSRUFEX09OQ0UodXAtXFx1MDAzZWVuY2FwX3R5cGUpKSB7XFxuIDgyMDpcXHRcXHRcXHRpbnQgKCplbmNhcF9yY3YpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIDgyMTpcXHRcXG4gODIyOlxcdFxcdFxcdC8qXFxuIDgyMzpcXHRcXHRcXHQgKiBUaGlzIGlzIGFuIGVuY2Fwc3VsYXRpb24gc29ja2V0IHNvIHBhc3MgdGhlIHNrYiB0b1xcbiA4MjQ6XFx0XFx0XFx0ICogdGhlIHNvY2tldCdzIHVkcF9lbmNhcF9yY3YoKSBob29rLiBPdGhlcndpc2UsIGp1c3RcXG4gODI1OlxcdFxcdFxcdCAqIGZhbGwgdGhyb3VnaCBhbmQgcGFzcyB0aGlzIHVwIHRoZSBVRFAgc29ja2V0LlxcbiA4MjY6XFx0XFx0XFx0ICogdXAtXFx1MDAzZWVuY2FwX3JjdigpIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZTpcXG4gODI3OlxcdFxcdFxcdCAqID0wIGlmIHNrYiB3YXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCB0byB0aGUgZW5jYXBcXG4gODI4OlxcdFxcdFxcdCAqICAgIGhhbmRsZXIgb3Igd2FzIGRpc2NhcmRlZCBieSBpdC5cXG4gODI5OlxcdFxcdFxcdCAqIFxcdTAwM2UwIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIFVEUC5cXG4gODMwOlxcdFxcdFxcdCAqIFxcdTAwM2MwIGlmIHNrYiBzaG91bGQgYmUgcmVzdWJtaXR0ZWQgYXMgcHJvdG8gLU5cXG4gODMxOlxcdFxcdFxcdCAqL1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRcXHQvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXFxuIDgzNDpcXHRcXHRcXHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXFx1MDAzZWVuY2FwX3Jjdik7XFxuIDgzNTpcXHRcXHRcXHRpZiAoZW5jYXBfcmN2KSB7XFxuIDgzNjpcXHRcXHRcXHRcXHRpbnQgcmV0O1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRcXHRcXHQvKiBWZXJpZnkgY2hlY2tzdW0gYmVmb3JlIGdpdmluZyB0byBlbmNhcCAqL1xcbiA4Mzk6XFx0XFx0XFx0XFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4gODQwOlxcdFxcdFxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG4gODQxOlxcdFxcbiA4NDI6XFx0XFx0XFx0XFx0cmV0ID0gZW5jYXBfcmN2KHNrLCBza2IpO1xcbiA4NDM6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKSB7XFxuIDg0NDpcXHRcXHRcXHRcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XFxuIDg0NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLXJldDtcXG4gODQ2OlxcdFxcdFxcdFxcdH1cXG4gODQ3OlxcdFxcdFxcdH1cXG4gODQ4OlxcdFxcbiA4NDk6XFx0XFx0XFx0LyogRkFMTFRIUk9VR0ggLS0gaXQncyBhIFVEUCBQYWNrZXQgKi9cXG4gODUwOlxcdFxcdH1cXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0cHJlZmV0Y2goXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG4gODUzOlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoc2stXFx1MDAzZXNrX2ZpbHRlcikgXFx1MDAyNlxcdTAwMjZcXG4gODU0OlxcdFxcdCAgICB1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuIDg1NTpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjI2LjkxNTk0MDE3MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTc3MDI2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVEUHY2IE11bHRpY2FzdCBEZWxpdmVyeSBSZS1leGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaGFuZHMgYmFjayBhIG5lZ2F0aXZlIHJldHVybiBjb2RlIHdoZW4gYGVuY2FwX3JjdmAgZmFpbHMsIHdoaWNoIG1lYW5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgVGhlcmVmb3JlLCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gaW1wbGllcyB0aGUgcGFja2V0IG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkLCBnb3QgaXQuIE5vdyBJJ20gbG9va2luZyBhdCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQsIHNwZWNpZmljYWxseSwgdGhhdCBpbml0aWFsIGBpZiAoZmlyc3QpYCBibG9jay4gIFdlIGhhdmUgYHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7YCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBgaWYgKHJldCBcdTAwM2UgMCkgcmV0dXJuIHJldDtgLiAgUmlnaHQsIHRoYXQgbWVhbnMgdGhlIHJldHVybiBjb2RlIGRpcmVjdGx5IHByb3BhZ2F0ZXMgdXBzdHJlYW0uIEJ1dCB3YWl0LCBzaW5jZSBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zIGByZXRgLCB3aGljaCBjb3VsZCBiZSBncmVhdGVyIHRoYW4gemVybywgdGhlbiBpdCdzIGRpcmVjdGx5IHJlc3VibWl0dGluZyB0aGUgcGFja2V0IHRvIHRoZSBzdGFjay4gIEkgbmVlZCB0byBjaGVjayBob3cgYHVkcHY2X3JjdmAgaGFuZGxlcyB0aGlzIGluIGBuZXQvaXB2Ni91ZHAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjI5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzEuNDkyOTY5NjY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1MDEyMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB1ZHB2Nl9yY3ZcXFxcKHN0cnVjdCBza19idWZmIFxcXFwqc2tiXFxcXClcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdWRwLmM9MTAzNz1zdGF0aWMgaW50IHVkcDZfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTA2OC1cXG5uZXQvaXB2Ni91ZHAuYzoxMDY5OklORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni91ZHAuYy0xMDcwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzQuMTQ3OTkwOTgyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQwODgzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB1ZHB2Nl9yY3ZgIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBvZiB0aGUgSVB2NiBVRFAgcmVjZWl2ZXIgcHJvY2VzcyB0aG9yb3VnaGx5LiBNeSBleHBlcnRpc2UgaXMgaW4gbmV0d29ya2luZywgYW5kIEkndmUgc2VlbiBhIGxvdCBvZiBVRFAgaW1wbGVtZW50YXRpb25zLCBidXQgZXZlcnkgb25lIGhhcyBpdHMgbnVhbmNlcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW0gdmFsaWRhdGlvbiwgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXBwZXItbGF5ZXIgcHJvdG9jb2xzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCByZWFzc2VtYmx5IG9mIGZyYWdtZW50ZWQgcGFja2V0cyBhbmQgaWYgaXQgaW1wbGVtZW50cyBhbnkgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXMuIFRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHNob3VsZCBtYWtlIHRoZSBmdW5jdGlvbmFsaXR5IGNsZWFyLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93IGFuZCBjcml0aWNhbCBzZWN0aW9ucy4gSSBleHBlY3QgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHJvYnVzdCBhcHByb2FjaCB0byBwb3RlbnRpYWwgbWFsaWNpb3VzIHRyYWZmaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzcuNDEyMDgyMDczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDY5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY5OlxcdElORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbjEwNzI6XFx0XFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyO1xcbjEwNzM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMTA3NDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xcbjEwNzU6XFx0XFx0c3RydWN0IHVkcGhkciAqdWg7XFxuMTA3NjpcXHRcXHRib29sIHJlZmNvdW50ZWQ7XFxuMTA3NzpcXHRcXHR1MzIgdWxlbiA9IDA7XFxuMTA3ODpcXHRcXG4xMDc5OlxcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxuMTA4MDpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdHNhZGRyID0gXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbjEwODM6XFx0XFx0ZGFkZHIgPSBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxuMTA4NDpcXHRcXHR1aCA9IHVkcF9oZHIoc2tiKTtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0dWxlbiA9IG50b2hzKHVoLVxcdTAwM2VsZW4pO1xcbjEwODc6XFx0XFx0aWYgKHVsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMDg4OlxcdFxcdFxcdGdvdG8gc2hvcnRfcGFja2V0O1xcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHQvKiBDaGVjayBmb3IganVtYm8gcGF5bG9hZCAqL1xcbjEwOTE6XFx0XFx0aWYgKHVsZW4gPT0gMClcXG4xMDkyOlxcdFxcdFxcdHVsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDkzOlxcdFxcbjEwOTQ6XFx0XFx0aWYgKHVsZW4gXFx1MDAzYyBzaXplb2YoKnVoKSlcXG4xMDk1OlxcdFxcdFxcdGdvdG8gc2hvcnRfcGFja2V0O1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRpZiAodWxlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKSB7XFxuMTA5ODpcXHRcXHRcXHRpZiAocHNrYl90cmltX3Jjc3VtKHNrYiwgdWxlbikpXFxuMTA5OTpcXHRcXHRcXHRcXHRnb3RvIHNob3J0X3BhY2tldDtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0XFx0c2FkZHIgPSBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlc2FkZHI7XFxuMTEwMjpcXHRcXHRcXHRkYWRkciA9IFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4xMTAzOlxcdFxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbjExMDQ6XFx0XFx0fVxcbjExMDU6XFx0XFxuMTEwNjpcXHRcXHRpZiAodWRwNl9jc3VtX2luaXQoc2tiLCB1aCkpXFxuMTEwNzpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdC8qIENoZWNrIGlmIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBhdmFpbGFibGUsIGUuZy4gZHVlIHRvIGVhcmx5IGRlbXV4ICovXFxuMTExMDpcXHRcXHRzayA9IGluZXQ2X3N0ZWFsX3NvY2sobmV0LCBza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgc2FkZHIsIHVoLVxcdTAwM2Vzb3VyY2UsIGRhZGRyLCB1aC1cXHUwMDNlZGVzdCxcXG4xMTExOlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZyZWZjb3VudGVkLCB1ZHA2X2VoYXNoZm4pO1xcbjExMTI6XFx0XFx0aWYgKElTX0VSUihzaykpXFxuMTExMzpcXHRcXHRcXHRnb3RvIG5vX3NrO1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRpZiAoc2spIHtcXG4xMTE2OlxcdFxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4xMTE3OlxcdFxcdFxcdGludCByZXQ7XFxuMTExODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzcuNDEyMTk4MDYzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODI3OTM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcHJvdG9jb2wgYW5hbHlzaXMuXG5cbioqRGl2aW5nIEJhY2sgaW50byBgdWRwdjZfcmN2YCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgbGV0J3Mgc3RvcCBmb3IgYSBtb21lbnQgYW5kIGdvIGJhY2sgdG8gcmVhZGluZyB0aGUgcmVzdCBvZiBgdWRwdjZfcmN2YC4gSeKAmXZlIGJlZW4gYW5hbHl6aW5nIGl0IGZvciBhIHdoaWxlIG5vdywgYW5kIGl04oCZcyBpbXBvcnRhbnQgdG8gc3RheSBmb2N1c2VkLCByZXZpZXcgdGhlIGNvbnRleHQsIGFuZCB0cmFjZSB0aGUgY29udHJvbCBmbG93LiBUaGVyZSdzIHByb2JhYmx5IHNvbWV0aGluZyBJIG1pc3NlZCBvciBuZWVkIHRvIHJlLWV2YWx1YXRlIGluIGxpZ2h0IG9mIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyByb3V0aW5lIGZpdHMgd2l0aGluIHRoZSBvdmVyYWxsIElQdjYgVURQIHJlY2VpdmluZyBwcm9jZXNzLiBOZWVkIHRvIGNhcmVmdWxseSByZXRyYWNlIHRoZSBzdGVwcyB0byBlbnN1cmUgSSBoYXZlbid0IGdvdHRlbiBsb3N0IGluIHRoZSBkZXRhaWxzLCBvciBtaXNzZWQgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIGZvciBhbm90aGVyIHBhc3MgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjQwLjU5NDk5Mzc5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTE5OlxcdFxcdFxcdGlmICh1bmxpa2VseShyY3VfZGVyZWZlcmVuY2Uoc2stXFx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcXG4xMTIwOlxcdFxcdFxcdFxcdHVkcDZfc2tfcnhfZHN0X3NldChzaywgZHN0KTtcXG4xMTIxOlxcdFxcbjExMjI6XFx0XFx0XFx0aWYgKCF1aC1cXHUwMDNlY2hlY2sgXFx1MDAyNlxcdTAwMjYgIXVkcF9nZXRfbm9fY2hlY2s2X3J4KHNrKSkge1xcbjExMjM6XFx0XFx0XFx0XFx0aWYgKHJlZmNvdW50ZWQpXFxuMTEyNDpcXHRcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuMTEyNTpcXHRcXHRcXHRcXHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xcbjExMjY6XFx0XFx0XFx0fVxcbjExMjc6XFx0XFxuMTEyODpcXHRcXHRcXHRyZXQgPSB1ZHA2X3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XFxuMTEyOTpcXHRcXHRcXHRpZiAocmVmY291bnRlZClcXG4xMTMwOlxcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4xMTMxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTEzMjpcXHRcXHR9XFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdC8qXFxuMTEzNTpcXHRcXHQgKlxcdE11bHRpY2FzdCByZWNlaXZlIGNvZGVcXG4xMTM2OlxcdFxcdCAqL1xcbjExMzc6XFx0XFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoZGFkZHIpKVxcbjExMzg6XFx0XFx0XFx0cmV0dXJuIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgc2FkZHIsIGRhZGRyKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0LyogVW5pY2FzdCAqL1xcbjExNDE6XFx0XFx0c2sgPSBfX3VkcDZfbGliX2xvb2t1cF9za2Ioc2tiLCB1aC1cXHUwMDNlc291cmNlLCB1aC1cXHUwMDNlZGVzdCk7XFxuMTE0MjpcXHRcXHRpZiAoc2spIHtcXG4xMTQzOlxcdFxcdFxcdGlmICghdWgtXFx1MDAzZWNoZWNrIFxcdTAwMjZcXHUwMDI2ICF1ZHBfZ2V0X25vX2NoZWNrNl9yeChzaykpXFxuMTE0NDpcXHRcXHRcXHRcXHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xcbjExNDU6XFx0XFx0XFx0cmV0dXJuIHVkcDZfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcXG4xMTQ2OlxcdFxcdH1cXG4xMTQ3OlxcdG5vX3NrOlxcbjExNDg6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcXG4xMTQ5OlxcdFxcbjExNTA6XFx0XFx0aWYgKCF1aC1cXHUwMDNlY2hlY2spXFxuMTE1MTpcXHRcXHRcXHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xcbjExNTI6XFx0XFxuMTE1MzpcXHRcXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSlcXG4xMTU0OlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4xMTU1OlxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuMTE1ODpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX05PUE9SVFMpO1xcbjExNjE6XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwKTtcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxuMTE2NDpcXHRcXHRyZXR1cm4gMDtcXG4xMTY1OlxcdFxcbjExNjY6XFx0c2hvcnRfcGFja2V0OlxcbjExNjc6XFx0XFx0aWYgKHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRClcXG4xMTY4OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjo0MC41OTUxMjY2OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQyOTY1Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0d29ya2luZyBTdGFjayBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIGB1ZHB2Nl9yY3ZgIGhhbmRzIG9mZiBpdHMgcmV0dXJuIHZhbHVlIHRvIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBUaGVuLCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBjb3JyZWN0bHkgY2hlY2tzIGlmIHRoYXQgcmV0dXJuIHZhbHVlLCBgcmV0YCwgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHJlc3VibWl0cyB0aGUgcGFja2V0IGlmIGl0IGlzLiBTbyB0aGUgZmFjdCB0aGF0IGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIGlzIHJldHVybmluZyBhIHBvc2l0aXZlIGByZXRgIGlzIGtleSBhbmQgdHJpZ2dlcnMgdGhlIGV4cGVjdGVkIHJlc3VibWlzc2lvbi4gR29vZC5cblxuVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEkgZ2F0aGVyLCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBkZWZpY2llbmN5IGluIHRoZSBjb3JlIFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBTcGVjaWZpY2FsbHksIEZPVS1lbmNhcHN1bGF0ZWQgcGFja2V0cyB3aXRoIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUHMgd2VyZW4ndCBiZWluZyBjb3JyZWN0bHkgcGFzc2VkIGRvd24gdG8gdGhlaXIgaW5uZXIgcHJvdG9jb2xzLCBsaWtlIEdSRS4gVGhleSB3ZXJlIGdldHRpbmcgZHJvcHBlZCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIGJ1Zy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0ICphYnNvbHV0ZWx5KiB3YXJyYW50cyBzZXJpb3VzIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgbmVlZHMgdG8gYmUgZnV6emVkLiBUaGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMsIG9idmlvdXNseSwgYXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gVGhlc2UgYXJlIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucyBhbmQgYXJlIG15IHByaW1hcnkgdGFyZ2V0cyBmb3IgYEZvY3VzU3ltYm9sc2AuXG5cbk5leHQsIEkgbmVlZCB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmlnaHQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaGUgdGVzdCBzY3JpcHQgcmVmZXJlbmNlcyBgQ09ORklHX05FVF9GT1VgLiBIbW0sIHRoZSBzY3JpcHQgc2VlbXMgdG8gc3VnZ2VzdCBgQ09ORklHX05FVF9GT1VgIGlzIGJ1aWx0LWluLiBCdXQgdGhlIGNvbmZpZyBmaWxlIHNldHMgYENPTkZJR19JUFY2X0ZPVT1tYCBhbmQgYENPTkZJR19JUFY2X0ZPVV9UVU5ORUw9bWAuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gZXhhY3RseSBob3cgRk9VIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjQ2LjkzODA5NTYyN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MTk1NTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0ZPVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMxNj1jb25maWcgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzIwLVxcbm5ldC9pcHY0L0tjb25maWc6MzIxOmNvbmZpZyBORVRfRk9VXFxubmV0L2lwdjQvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxubmV0L2lwdjQvS2NvbmZpZy0zMzEtXFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjQ5LjAwMDA1OTQ1MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUwOTY1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIElQdjYgb3ZlciBVRFAgVHVubmVsIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgYENPTkZJR19JUFY2X0ZPVWAuIEl0J3MgYSBrZXkgaW5kaWNhdG9yLiBJZiB0aGlzIGlzIGVuYWJsZWQsIHRoZW4gd2UncmUgc2V0IHVwIHRvIGhhbmRsZSBJUHY2IHRyYWZmaWMgZW5jYXBzdWxhdGVkIHdpdGhpbiBVRFAgdHVubmVscy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgb2Z0ZW4gYSBwcmVyZXF1aXNpdGUgZm9yIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9ucywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHNvbWV0aGluZyBsaWtlIElQdjYgb3ZlciBhIG5ldHdvcmsgdGhhdCBvbmx5IG5hdGl2ZWx5IHN1cHBvcnRzIElQdjQsIG9yIHBlcmhhcHMgdG8gaW1wbGVtZW50IGEgVlBOIHNvbHV0aW9uLiBTbywgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgd2FudCB0byBjb25maXJtIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBPdGhlcndpc2UsIHRoZSBiZWhhdmlvciBJIGFtIGV4cGVjdGluZyBtaWdodCBub3Qgd29yayBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjo1My41NTEwMjgzNjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjY1NTY1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfRk9VXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjEwPWNvbmZpZyBJUFY2X0dSRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjo1NS4zNzc1OTI4MTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Mjc4ODU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBgQ09ORklHX05FVF9GT1VgIC0gdGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUHY0LCByaWdodD9cIiBNeSBtZW1vcnkgaXMgam9nZ2luZywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRvIGdldCB0byB0aG9zZSBtb2RpZmllZCBjb2RlIHNlY3Rpb25zLCB3ZSdyZSBnb2luZyB0byBuZWVkIFVEUCBtdWx0aWNhc3QgcmVjZXB0aW9uIGVuYWJsZWQgb24gdGhlIHN5c3RlbS4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC5cblxuTm93LCB0byB0cmlnZ2VyIHRoYXQgc3BlY2lmaWMgYHJldCBcdTAwM2UgMGAgcGF0aCDigJMgdGhlIHJlc3VibWlzc2lvbiBhc3BlY3Qg4oCTIHdlJ3JlIGdvaW5nIHRvIG5lZWQgYSBVRFAgZW5jYXBzdWxhdGlvbiBwcm90b2NvbC4gVGhhdCBwcm90b2NvbCBuZWVkcyB0byBoYXZlIGFuIGBlbmNhcF9yY3ZgIGhvb2sgdGhhdCByZXR1cm5zIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseSwgYnV0IGZyb20gbXkgZXhwZXJpZW5jZSwgRk9VIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBhIFVEUCBlbmNhcHN1bGF0aW9uIHByb3RvY29sIHRoYXQgYmVoYXZlcyB0aGF0IHdheS4gVGhhdCBzb3VuZHMgcmlnaHQgdG8gbWUsIHNvIEkgdGhpbmsgdGhhdCBGT1UgaXMgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS5cblxuU28sIGxldCBtZSBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjQvZm91LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBmdW5jdGlvbnMgbGlrZSBgZm91X3JlY3ZfcHVsbGAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEZPVSBoYW5kbGVzIHJlY2VwdGlvbiBhbmQgaWYgaXRzIGBlbmNhcF9yY3ZgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgdGhpbmcgdGhhdCBpcyByZXR1cm5pbmcgbmVnYXRpdmUgdmFsdWVzIHRoYXQgdHJpZ2dlciByZXN1Ym1pc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDMzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjU5LjYzMDM4NDAyMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNzQxNTUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb3VfcmVjdl9wdWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZvdV9jb3JlLmM9NTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm91ICpmb3VfZnJvbV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNTUtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo1NjpzdGF0aWMgaW50IGZvdV9yZWN2X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZvdSAqZm91LCBzaXplX3QgbGVuKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNTcte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz03Mz1zdGF0aWMgaW50IGZvdV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTc5LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6ODA6XFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxubmV0L2lwdjQvZm91X2NvcmUuYy04MS1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyMD1zdGF0aWMgaW50IGd1ZV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTE1Ny1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjE1ODpcXHRcXHRpZiAoZm91X3JlY3ZfcHVsbChza2IsIGZvdSwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSlcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTE1OS1cXHRcXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjAxLjQ1NzgwNzAyNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcxNjU2MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIHByb2dyYW1taW5nLCBwb3NzaWJseSBkZWJ1Z2dpbmc6XG5cbioqRGl2aW5nIGludG8gYGZvdV91ZHBfcmVjdmAqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgZm91X3VkcF9yZWN2YC4gVGhhdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIFVEUCB0cmFmZmljLCBwcm9iYWJseSBzb21lIHNvcnQgb2YgdHVubmVsIG9yIG92ZXJsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHJlY2VpdmUgZW5kLiBXaGF0J3MgdGhlIHN0YXRlIG9mIHRoZSBzdGFjaz8gQXJlIHdlIGRyb3BwaW5nIHBhY2tldHM/IEFyZSB3ZSBoYW5kbGluZyB0aGUgZGVjYXBzdWxhdGlvbiBjb3JyZWN0bHk/IElzIHRoZXJlIGJ1ZmZlciBleGhhdXN0aW9uPyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGRhdGEsIHNvIGxldCdzIHN0YXJ0IGhlcmUuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGlzLCB1bmRlcnN0YW5kIGl0cyBsb2dpYywgaXRzIGVycm9yIGhhbmRsaW5nLCBhbmQgdHJhY2UgdGhlIHBhY2tldCBmbG93LiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSwgbWVudGFsbHkgbWFwIG91dCB0aGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgb2JzZXJ2ZWQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjA1LjAyOTQ2NTYwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZm91X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MzpcXHRzdGF0aWMgaW50IGZvdV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICA3NDpcXHR7XFxuICA3NTpcXHRcXHRzdHJ1Y3QgZm91ICpmb3UgPSBmb3VfZnJvbV9zb2NrKHNrKTtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0aWYgKCFmb3UpXFxuICA3ODpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxuICA4MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdHJldHVybiAtZm91LVxcdTAwM2Vwcm90b2NvbDtcXG4gIDg0OlxcdFxcbiAgODU6XFx0ZHJvcDpcXG4gIDg2OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgODc6XFx0XFx0cmV0dXJuIDA7XFxuICA4ODpcXHR9XFxuICA4OTpcXHRcXG4gIDkwOlxcdHN0YXRpYyBzdHJ1Y3QgZ3VlaGRyICpndWVfcmVtY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ3VlaGRyICpndWVoZHIsXFxuICA5MTpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmRhdGEsIHNpemVfdCBoZHJsZW4sIHU4IGlwcHJvdG8sXFxuICA5MjpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgbm9wYXJ0aWFsKVxcbiAgOTM6XFx0e1xcbiAgOTQ6XFx0XFx0X19iZTE2ICpwZCA9IGRhdGE7XFxuICA5NTpcXHRcXHRzaXplX3Qgc3RhcnQgPSBudG9ocyhwZFswXSk7XFxuICA5NjpcXHRcXHRzaXplX3Qgb2Zmc2V0ID0gbnRvaHMocGRbMV0pO1xcbiAgOTc6XFx0XFx0c2l6ZV90IHBsZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBoZHJsZW4gK1xcbiAgOTg6XFx0XFx0ICAgIG1heF90KHNpemVfdCwgb2Zmc2V0ICsgc2l6ZW9mKHUxNiksIHN0YXJ0KTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcmVtY3N1bV9vZmZsb2FkKVxcbiAxMDE6XFx0XFx0XFx0cmV0dXJuIGd1ZWhkcjtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgcGxlbikpXFxuIDEwNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA1OlxcdFxcdGd1ZWhkciA9IChzdHJ1Y3QgZ3VlaGRyICopXFx1MDAyNnVkcF9oZHIoc2tiKVsxXTtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0c2tiX3JlbWNzdW1fcHJvY2Vzcyhza2IsICh2b2lkICopZ3VlaGRyICsgaGRybGVuLFxcbiAxMDg6XFx0XFx0XFx0XFx0ICAgIHN0YXJ0LCBvZmZzZXQsIG5vcGFydGlhbCk7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdHJldHVybiBndWVoZHI7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbnQgZ3VlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ3VlaGRyICpndWVoZHIpXFxuIDExNDpcXHR7XFxuIDExNTpcXHRcXHQvKiBObyBzdXBwb3J0IHlldCAqL1xcbiAxMTY6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDExNzpcXHRcXHRyZXR1cm4gMDtcXG4gMTE4OlxcdH1cXG4gMTE5OlxcdFxcbiAxMjA6XFx0c3RhdGljIGludCBndWVfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxMjE6XFx0e1xcbiAxMjI6XFx0XFx0c3RydWN0IGZvdSAqZm91ID0gZm91X2Zyb21fc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjA1LjAyOTYwNDk5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI0NDYwMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVRFAgRW5jYXBzdWxhdGlvbiBQcm90b2NvbCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGBmb3VfdWRwX3JlY3ZgIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIHRoZSBuZWdhdGl2ZSBvZiB0aGUgRk9VIHByb3RvY29sIG51bWJlci4gRXhjZWxsZW50LiBUaGF0J3Mgd2hhdCBJIG5lZWRlZCB0byBlc3RhYmxpc2ggdG8gbW92ZSBmb3J3YXJkLiBTbyBlbmFibGluZyBgTkVUX0ZPVWAgaW4gdGhlIGtlcm5lbCBjb25maWcgc2VlbXMgbGlrZSBhIHNvdW5kIGNob2ljZSBiYXNlZCBvbiB0aGlzLlxuXG5Ob3csIGEgbW9yZSBnZW5lcmFsIHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IGFyZSB0aGVyZSBvdGhlciBVRFAgZW5jYXBzdWxhdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhbHNvIHVzZSBhIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBpbiBhIHNpbWlsYXIgd2F5IHRvIHNpZ25hbCBwcm90b2NvbCB0eXBlPyBJZiBzbywgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlbS4gQSBicm9hZCBzZWFyY2ggZm9yIGBlbmNhcF9yY3ZgIGltcGxlbWVudGF0aW9ucyBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwYXR0ZXJucy4gSSdsbCBmb2N1cyBvbiB0aG9zZSByZXR1cm4gdmFsdWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGxhbmRzY2FwZSBvZiB0aGUgYGVuY2FwX3JjdmAgaW1wbGVtZW50YXRpb25zIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjA4LjI1NDA2ODM1MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4ODUxNDUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmNhcF9yY3YgPVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYz0yNTk9c3RhdGljIHN0cnVjdCBzb2NrZXQgKnJ4ZV9zZXR1cF91ZHBfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgX19iZTE2IHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0yODItXFx0dG5sX2NmZy5lbmNhcF90eXBlID0gMTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYzoyODM6XFx0dG5sX2NmZy5lbmNhcF9yY3YgPSByeGVfdWRwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmMtMjg0LVxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9Mjk3MT1zdGF0aWMgaW50IGFtdF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBhbXRfZGV2ICphbXQpXFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYy0yOTgzLVxcdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XFxuZHJpdmVycy9uZXQvYW10LmM6Mjk4NDpcXHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGFtdF9yY3Y7XFxuZHJpdmVycy9uZXQvYW10LmMtMjk4NS1cXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBhbXRfZXJyX2xvb2t1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz0yNTU9c3RhdGljIGludCBiYXJldWRwX3NvY2tldF9jcmVhdGUoc3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCBfX2JlMTYgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy0yNjctXFx0dHVubmVsX2NmZy5lbmNhcF90eXBlID0gMTtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmM6MjY4OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gYmFyZXVkcF91ZHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY5LVxcdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IGJhcmV1ZHBfZXJyX2xvb2t1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMDI1LVxcdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMDI2OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZ2VuZXZlX3VkcF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXFx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTQwMz1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzMtXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE0MzQ6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzUtXFx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTY0OD1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNjg4LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNjg5OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNjkwLVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gZ3RwX2VuY2FwX2Rlc3Ryb3k7XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTM4ND1pbnQgb3Zwbl91ZHBfc29ja2V0X2F0dGFjaChzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKm92cG5fc29jaywgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzg5LVxcdFxcdC5lbmNhcF90eXBlID0gVURQX0VOQ0FQX09WUE5JTlVEUCxcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjM5MDpcXHRcXHQuZW5jYXBfcmN2ID0gb3Zwbl91ZHBfZW5jYXBfcmVjdixcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM5MS1cXHRcXHQuZW5jYXBfZGVzdHJveSA9IG92cG5fdWRwX2VuY2FwX2Rlc3Ryb3ksXFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmM9MTU1PXN0YXRpYyBzdHJ1Y3Qgc29jayAqcGZjcF9jcmVhdGVfc29jayhzdHJ1Y3QgcGZjcF9kZXYgKnBmY3ApXFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmMtMTcyLVxcdHR1bmNmZy5za191c2VyX2RhdGEgPSBwZmNwO1xcbmRyaXZlcnMvbmV0L3BmY3AuYzoxNzM6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IHBmY3BfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9wZmNwLmMtMTc0LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNTc3PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgaXB2NixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNjE0LVxcdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjM2MTU6XFx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSB2eGxhbl9yY3Y7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM2MTYtXFx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gdnhsYW5fZXJyX2xvb2t1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYz0zNDg9aW50IHdnX3NvY2tldF9pbml0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCB1MTYgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYy0zNTQtXFx0XFx0LmVuY2FwX3R5cGUgPSAxLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYzozNTU6XFx0XFx0LmVuY2FwX3JjdiA9IHdnX3JlY2VpdmVcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMtMzU2LVxcdH07XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTU2Nj1zdGF0aWMgaW50IGZvdV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZm91X2NmZyAqY2ZnLFxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy02MDItXFx0Y2FzZSBGT1VfRU5DQVBfRElSRUNUOlxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6NjAzOlxcdFxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZm91X3VkcF9yZWN2O1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNjA0LVxcdFxcdHR1bm5lbF9jZmcuZ3JvX3JlY2VpdmUgPSBmb3VfZ3JvX3JlY2VpdmU7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTYwOC1cXHRjYXNlIEZPVV9FTkNBUF9HVUU6XFxubmV0L2lwdjQvZm91X2NvcmUuYzo2MDk6XFx0XFx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSBndWVfdWRwX3JlY3Y7XFxubmV0L2lwdjQvZm91X2NvcmUuYy02MTAtXFx0XFx0dHVubmVsX2NmZy5ncm9fcmVjZWl2ZSA9IGd1ZV9ncm9fcmVjZWl2ZTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTIzNTA9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjM4MC1cXHRcXHQvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXFxubmV0L2lwdjQvdWRwLmM6MjM4MTpcXHRcXHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXFx1MDAzZWVuY2FwX3Jjdik7XFxubmV0L2lwdjQvdWRwLmMtMjM4Mi1cXHRcXHRpZiAoZW5jYXBfcmN2KSB7XFxuLS1cXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz03MT12b2lkIHNldHVwX3VkcF90dW5uZWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTgyLVxcdHVkcF9zayhzayktXFx1MDAzZWVuY2FwX3R5cGUgPSBjZmctXFx1MDAzZWVuY2FwX3R5cGU7XFxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmM6ODM6XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfcmN2ID0gY2ZnLVxcdTAwM2VlbmNhcF9yY3Y7XFxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmMtODQtXFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZXJyX3JjdiA9IGNmZy1cXHUwMDNlZW5jYXBfZXJyX3JjdjtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTgwNj1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTgzMy1cXHRcXHQvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXFxubmV0L2lwdjYvdWRwLmM6ODM0OlxcdFxcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cXHUwMDNlZW5jYXBfcmN2KTtcXG5uZXQvaXB2Ni91ZHAuYy04MzUtXFx0XFx0aWYgKGVuY2FwX3Jjdikge1xcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9MTQzPXN0YXRpYyB2b2lkIGwydHBfdHVubmVsX2ZyZWUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNTQtXFx0XFx0XFx0V1JJVEVfT05DRSh1ZHBfc2soc2spLVxcdTAwM2VlbmNhcF90eXBlLCAwKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxNTU6XFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfcmN2ID0gTlVMTDtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNTYtXFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZGVzdHJveSA9IE5VTEw7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjQzPWludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4MS1cXHRcXHRcXHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9MMlRQSU5VRFAsXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY4MjpcXHRcXHRcXHQuZW5jYXBfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfcmVjdixcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjgzLVxcdFxcdFxcdC5lbmNhcF9lcnJfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfZXJyX3JlY3YsXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NS1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTg0OT1pbnQgc2N0cF91ZHBfc29ja19zdGFydChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg2NS1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IDE7XFxubmV0L3NjdHAvcHJvdG9jb2wuYzo4NjY6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IHNjdHBfdWRwX3JjdjtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg2Ny1cXHR0dW5jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IHNjdHBfdWRwX3Y0X2VycjtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtODg3LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjg4ODpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gc2N0cF91ZHBfcmN2O1xcbm5ldC9zY3RwL3Byb3RvY29sLmMtODg5LVxcdHR1bmNmZy5lbmNhcF9lcnJfbG9va3VwID0gc2N0cF91ZHBfdjZfZXJyO1xcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmM9NjYyPXN0YXRpYyBpbnQgdGlwY191ZHBfZW5hYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYmVhcmVyICpiLFxcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNzc1LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG5uZXQvdGlwYy91ZHBfbWVkaWEuYzo3NzY6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IHRpcGNfdWRwX3JlY3Y7XFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNzc3LVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MTAuMTQyNTg4MzUxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTQ0NzM1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFVEUCBFbmNhcHN1bGF0aW9uIFJlY2VpdmVycyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGd1ZV91ZHBfcmVjdmAuIEkga25vdyB0aGF0J3MgZ29pbmcgdG8gYmUgaW4gYG5ldC9pcHY0L2ZvdV9jb3JlLmNgLCBzbyBJJ2xsIGNoZWNrIHRoZXJlIGZvciBzdGFydGVycy4gSSByZW1lbWJlciB0aGF0J3MgdGhlIEdlbmVyaWMgVURQIEVuY2Fwc3VsYXRpb24gcmVjZWl2ZXIuIFRoZW4sIEkgbmVlZCB0byBjb21wYXJlIHRoYXQgdG8gYGwydHBfdWRwX2VuY2FwX3JlY3ZgLiBUaGlzIGlzIEwyVFAgb3ZlciBVRFAgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhZmZpYyBpcyBmbG93aW5nLiBJIHdpbGwgY2hlY2sgdGhlIHJlbGF0aW9uc2hpcCBvZiBib3RoLCBzaW5jZSB0aGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIHdob2xlIHJlY2VpdmluZyBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI4MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjEzLjUzNzA2NDc4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ4MTY4MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfdWRwX2VuY2FwX3JlY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2wydHAucnN0PTYxOT1lbmNhcHN1bGF0ZWQgVURQIHNvY2tldCBieSBzZXR0aW5nIGVuY2FwX3JjdiBhbmQgZW5jYXBfZGVzdHJveVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9sMnRwLnJzdDo2MjA6Y2FsbGJhY2tzIG9uIHRoZSBVRFAgc29ja2V0LiBsMnRwX3VkcF9lbmNhcF9yZWN2IGlzIGNhbGxlZCB3aGVuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2wydHAucnN0LTYyMS1wYWNrZXRzIGFyZSByZWNlaXZlZCBvbiB0aGUgc29ja2V0LiBsMnRwX3VkcF9lbmNhcF9kZXN0cm95IGlzIGNhbGxlZFxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9MTAwNT1zdGF0aWMgdm9pZCBsMnRwX3Nlc3Npb25fcXVldWVfcHVyZ2Uoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbilcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwMTUtLyogVURQIGVuY2Fwc3VsYXRpb24gcmVjZWl2ZSBoYW5kbGVyLiBTZWUgbmV0L2lwdjQvdWRwLmMgZm9yIGRldGFpbHMuICovXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTAxNjppbnQgbDJ0cF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTAxNy17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTE0LX1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMTE1OkVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdWRwX2VuY2FwX3JlY3YpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTExMTYtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjQzPWludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4MS1cXHRcXHRcXHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9MMlRQSU5VRFAsXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY4MjpcXHRcXHRcXHQuZW5jYXBfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfcmVjdixcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjgzLVxcdFxcdFxcdC5lbmNhcF9lcnJfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfZXJyX3JlY3YsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yNTQ9dm9pZCBsMnRwX3JlY3ZfY29tbW9uKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNTYtXFx0XFx0ICAgICAgaW50IGxlbmd0aCk7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjU3OmludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjU4LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz00NTc9c3RhdGljIGludCBwcHBvbDJ0cF9iYWNrbG9nX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy00NjAtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo0NjE6XFx0cmMgPSBsMnRwX3VkcF9lbmNhcF9yZWN2KHNrLCBza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtNDYyLVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MTUuMzg1MjM3MzcyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDUzODg0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoZSBjb250ZXh0IGlzIHRyb3VibGVzaG9vdGluZy9hbmFseXppbmcgbmV0d29yayB0cmFmZmljIG9yIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uXG5cbioqRGl2aW5nIGludG8gYGwydHBfdWRwX2VuY2FwX3JlY3ZgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiT2theSwgcHJvYmxlbSBhdCBoYW5kLi4uIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IGN1bHByaXQ/IExldCdzIGNoZWNrIGBsMnRwX3VkcF9lbmNhcF9yZWN2YC5cIiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBjb3JlIG9mIHJlY2VpdmluZyBMMlRQIGVuY2Fwc3VsYXRlZCB0cmFmZmljIG92ZXIgVURQLCBzbyB0aGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIHJlY2VpdmVyLCB0aGUgZ2F0ZWtlZXBlci4gQW55dGhpbmcgYW1pc3MgdGhlcmUsIGFuZCB0aGUgcmVzdCBvZiB0aGUgZmxvdyBpcyBkZWFkIGluIHRoZSB3YXRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMuIEl0IGlzIGxpa2VseSB0aGF0IHRoZSBjdXJyZW50IGlzc3VlIGxpZXMgd2l0aCB0aGF0IHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgcHJvY2Vzcy4gSSB3aWxsIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGljYXRpb25zIGFzIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI5MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjE4LjkzMDYyODgxOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2wydHAvbDJ0cF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAxNjpcXHRpbnQgbDJ0cF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuMTAxNzpcXHR7XFxuMTAxODpcXHRcXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uID0gTlVMTDtcXG4xMDE5OlxcdFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDtcXG4xMDIwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4xMDIxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKnB0ciwgKm9wdHI7XFxuMTAyMjpcXHRcXHR1MTYgaGRyZmxhZ3M7XFxuMTAyMzpcXHRcXHR1MTYgdmVyc2lvbjtcXG4xMDI0OlxcdFxcdGludCBsZW5ndGg7XFxuMTAyNTpcXHRcXG4xMDI2OlxcdFxcdC8qIFVEUCBoYXMgdmVyaWZpZWQgY2hlY2tzdW0gKi9cXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0LyogVURQIGFsd2F5cyB2ZXJpZmllcyB0aGUgcGFja2V0IGxlbmd0aC4gKi9cXG4xMDI5OlxcdFxcdF9fc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbjEwMzA6XFx0XFxuMTAzMTpcXHRcXHQvKiBTaG9ydCBwYWNrZXQ/ICovXFxuMTAzMjpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBMMlRQX0hEUl9TSVpFX01BWCkpXFxuMTAzMzpcXHRcXHRcXHRnb3RvIHBhc3M7XFxuMTAzNDpcXHRcXG4xMDM1OlxcdFxcdC8qIFBvaW50IHRvIEwyVFAgaGVhZGVyICovXFxuMTAzNjpcXHRcXHRvcHRyID0gc2tiLVxcdTAwM2VkYXRhO1xcbjEwMzc6XFx0XFx0cHRyID0gc2tiLVxcdTAwM2VkYXRhO1xcbjEwMzg6XFx0XFxuMTAzOTpcXHRcXHQvKiBHZXQgTDJUUCBoZWFkZXIgZmxhZ3MgKi9cXG4xMDQwOlxcdFxcdGhkcmZsYWdzID0gbnRvaHMoKihfX2JlMTYgKilwdHIpO1xcbjEwNDE6XFx0XFxuMTA0MjpcXHRcXHQvKiBHZXQgcHJvdG9jb2wgdmVyc2lvbiAqL1xcbjEwNDM6XFx0XFx0dmVyc2lvbiA9IGhkcmZsYWdzIFxcdTAwMjYgTDJUUF9IRFJfVkVSX01BU0s7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdC8qIEdldCBsZW5ndGggb2YgTDJUUCBwYWNrZXQgKi9cXG4xMDQ2OlxcdFxcdGxlbmd0aCA9IHNrYi1cXHUwMDNlbGVuO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRcXHQvKiBJZiB0eXBlIGlzIGNvbnRyb2wgcGFja2V0LCBpdCBpcyBoYW5kbGVkIGJ5IHVzZXJzcGFjZS4gKi9cXG4xMDQ5OlxcdFxcdGlmIChoZHJmbGFncyBcXHUwMDI2IEwyVFBfSERSRkxBR19UKVxcbjEwNTA6XFx0XFx0XFx0Z290byBwYXNzO1xcbjEwNTE6XFx0XFxuMTA1MjpcXHRcXHQvKiBTa2lwIGZsYWdzICovXFxuMTA1MzpcXHRcXHRwdHIgKz0gMjtcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0aWYgKHZlcnNpb24gPT0gTDJUUF9IRFJfVkVSXzIpIHtcXG4xMDU2OlxcdFxcdFxcdHUxNiB0dW5uZWxfaWQsIHNlc3Npb25faWQ7XFxuMTA1NzpcXHRcXG4xMDU4OlxcdFxcdFxcdC8qIElmIGxlbmd0aCBpcyBwcmVzZW50LCBza2lwIGl0ICovXFxuMTA1OTpcXHRcXHRcXHRpZiAoaGRyZmxhZ3MgXFx1MDAyNiBMMlRQX0hEUkZMQUdfTClcXG4xMDYwOlxcdFxcdFxcdFxcdHB0ciArPSAyO1xcbjEwNjE6XFx0XFxuMTA2MjpcXHRcXHRcXHQvKiBFeHRyYWN0IHR1bm5lbCBhbmQgc2Vzc2lvbiBJRCAqL1xcbjEwNjM6XFx0XFx0XFx0dHVubmVsX2lkID0gbnRvaHMoKihfX2JlMTYgKilwdHIpO1xcbjEwNjQ6XFx0XFx0XFx0cHRyICs9IDI7XFxuMTA2NTpcXHRcXHRcXHRzZXNzaW9uX2lkID0gbnRvaHMoKihfX2JlMTYgKilwdHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzoxOC45MzA3NjA1ODhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjkzMDU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbDJ0cF91ZHBfZW5jYXBfcmVjdmAncyBDb25jbHVzaW9uKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluLiBJJ20gZm9jdXNpbmcgb24gdGhlIGVuZCBvZiB0aGUgYGwydHBfdWRwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jb21pbmcgVURQIGVuY2Fwc3VsYXRlZCBMMlRQIHRyYWZmaWMgaXMgZmluYWxseSBwcm9jZXNzZWQsIG9yIGlmIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSB0cmlnZ2VyZWQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBhIHZ1bG5lcmFiaWxpdHkgKm1pZ2h0KiBleGlzdCwgb3IgaWYgdGhlIGN1cnJlbnQgY29kZSBoYW5kbGVzIGFsbCBhbnRpY2lwYXRlZCBzY2VuYXJpb3MuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGVuc3VyZSBwcm9wZXIgcGFja2V0IGhhbmRsaW5nLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBtYWxmb3JtZWQgcGFja2V0cyBhcmUgY2F1c2luZyBpc3N1ZXM/IExldCBtZSBjaGVjayBmb3IgdW5leHBlY3RlZCBlcnJvciByZXR1cm5zIGZyb20gdGhlIGxvd2VyIGxheWVycywgYW5kIGNvbnNpZGVyIHRoZWlyIGltcGxpY2F0aW9ucy4gSSBhbSBsb29raW5nIGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCBwcm9ibGVtcyBhcyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUgb2Ygd2hhdCBoYXBwZW5zIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgcmVjZWl2aW5nIHJvdXRpbmUsIGFuZCBpZiBpdCdzIHRoZSByaWdodCBmaW5hbCByZXN0aW5nIHBsYWNlIGZvciB0aGUgcmVjZWl2ZWQgcGFja2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNjYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjIyLjM2MzY5Mzg1NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2wydHAvbDJ0cF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2NjpcXHRcXHRcXHRwdHIgKz0gMjtcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0XFx0c2Vzc2lvbiA9IGwydHBfdjJfc2Vzc2lvbl9nZXQobmV0LCB0dW5uZWxfaWQsIHNlc3Npb25faWQpO1xcbjEwNjk6XFx0XFx0fSBlbHNlIHtcXG4xMDcwOlxcdFxcdFxcdHUzMiBzZXNzaW9uX2lkO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHRcXHRwdHIgKz0gMjtcXHQvKiBza2lwIHJlc2VydmVkIGJpdHMgKi9cXG4xMDczOlxcdFxcdFxcdHNlc3Npb25faWQgPSBudG9obCgqKF9fYmUzMiAqKXB0cik7XFxuMTA3NDpcXHRcXHRcXHRwdHIgKz0gNDtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0XFx0c2Vzc2lvbiA9IGwydHBfdjNfc2Vzc2lvbl9nZXQobmV0LCBzaywgc2Vzc2lvbl9pZCk7XFxuMTA3NzpcXHRcXHR9XFxuMTA3ODpcXHRcXG4xMDc5OlxcdFxcdGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi1cXHUwMDNlcmVjdl9za2IpIHtcXG4xMDgwOlxcdFxcdFxcdGlmIChzZXNzaW9uKVxcbjEwODE6XFx0XFx0XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0XFx0LyogTm90IGZvdW5kPyBQYXNzIHRvIHVzZXJzcGFjZSB0byBkZWFsIHdpdGggKi9cXG4xMDg0OlxcdFxcdFxcdGdvdG8gcGFzcztcXG4xMDg1OlxcdFxcdH1cXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0dHVubmVsID0gc2Vzc2lvbi1cXHUwMDNldHVubmVsO1xcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHQvKiBDaGVjayBwcm90b2NvbCB2ZXJzaW9uICovXFxuMTA5MDpcXHRcXHRpZiAodmVyc2lvbiAhPSB0dW5uZWwtXFx1MDAzZXZlcnNpb24pIHtcXG4xMDkxOlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxuMTA5MjpcXHRcXHRcXHRnb3RvIGludmFsaWQ7XFxuMTA5MzpcXHRcXHR9XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdGlmICh2ZXJzaW9uID09IEwyVFBfSERSX1ZFUl8zIFxcdTAwMjZcXHUwMDI2XFxuMTA5NjpcXHRcXHQgICAgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzZXNzaW9uLCBza2IsIFxcdTAwMjZwdHIsIFxcdTAwMjZvcHRyKSkge1xcbjEwOTc6XFx0XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG4xMDk4OlxcdFxcdFxcdGdvdG8gaW52YWxpZDtcXG4xMDk5OlxcdFxcdH1cXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0bDJ0cF9yZWN2X2NvbW1vbihzZXNzaW9uLCBza2IsIHB0ciwgb3B0ciwgaGRyZmxhZ3MsIGxlbmd0aCk7XFxuMTEwMjpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRyZXR1cm4gMDtcXG4xMTA1OlxcdFxcbjExMDY6XFx0aW52YWxpZDpcXG4xMTA3OlxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2dHVubmVsLVxcdTAwM2VzdGF0cy5yeF9pbnZhbGlkKTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0cGFzczpcXG4xMTEwOlxcdFxcdC8qIFB1dCBVRFAgaGVhZGVyIGJhY2sgKi9cXG4xMTExOlxcdFxcdF9fc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbjExMTI6XFx0XFxuMTExMzpcXHRcXHRyZXR1cm4gMTtcXG4xMTE0OlxcdH1cXG4xMTE1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdWRwX2VuY2FwX3JlY3YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzoyMi4zNjM4MjU4NTVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTczNzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgc28gYGwydHBfdWRwX2VuY2FwX3JlY3ZgIGlzIHRlbGxpbmcgbWUgc29tZXRoaW5nIGltcG9ydGFudC4gSXQncyByZXR1cm5pbmcgYSAxIGlmIGEgcGFja2V0IG5lZWRzIHRvIGJlIHBhc3NlZCB1cCB0byB1c2Vyc3BhY2UgdmlhIFVEUC4gQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJ3QqKiByZXR1cm4gYW55dGhpbmcgbmVnYXRpdmUuIFRoYXQgZWxpbWluYXRlcyBzb21lIHBvc3NpYmxlIGF2ZW51ZXMgb2YgaW52ZXN0aWdhdGlvbi4gVGhpcyBpcyB1c2VmdWwgZGF0YS5cblxuVGhlIG5lZ2F0aXZlIHJldHVybiB2YWx1ZXMsIHRoZW4sIGFyZSBwcmltYXJpbHkgY29taW5nIGZyb20gYE5FVF9GT1VgLiBXZSBzaG91bGQgY2hlY2sgYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgIHRvIGZpbmQgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjI2LjQzNTU2NTc4NloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMzQ3ODkxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYXJldWRwX3VkcF9lbmNhcF9yZWN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JhcmV1ZHAuYz00OT1zdHJ1Y3QgYmFyZXVkcF9kZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTYwLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzo2MTpzdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy02Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmM9MjU1PXN0YXRpYyBpbnQgYmFyZXVkcF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgX19iZTE2IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY3LVxcdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjI2ODpcXHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTI2OS1cXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBiYXJldWRwX2Vycl9sb29rdXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjI4LjI2OTA1MDE1OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzExOTgzNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBwcm9ncmFtbWluZzpcblxuKipBbmFseXppbmcgdGhlIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgYSBiYXJlIFVEUCBlbmNhcHN1bGF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBsaWtlbHkgb24gdGhlIGRldGFpbHMgb2YgcmVjZWl2aW5nIFVEUCBwYWNrZXRzIHRoYXQgYXJlIHNvbWVob3cgXCJlbmNhcHN1bGF0ZWQuXCIgVGhpcyBzdWdnZXN0cyBhIHByb3RvY29sIG9yIG1lY2hhbmlzbSBvbiB0b3Agb2Ygc3RhbmRhcmQgVURQLCBhbmQgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzOiBpcyBpdCBhIHR1bm5lbCwgYSBjdXN0b20gZnJhbWluZyBmb3JtYXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJhdyBpbmNvbWluZyBkYXRhZ3JhbSBhbmQgZXh0cmFjdHMgdGhlIHJlbGV2YW50IGVuY2Fwc3VsYXRlZCBkYXRhLiBLZXkgcXVlc3Rpb25zIEkgaGF2ZSBhcmUgd2hhdCB0aGUgZXhwZWN0ZWQgZGF0YWdyYW0gc3RydWN0dXJlIGlzLCB0aGUgbWV0aG9kcyB1c2VkIHRvIGRldGVybWluZSBwYWNrZXQgYm91bmRhcmllcyBpZiBhbnksIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWFsZm9ybWVkIG9yIGluY29tcGxldGUgZGF0YS4gTXkgbmV4dCBzdGVwcyBpbnZvbHZlIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLCBkYXRhIGJ1ZmZlcnMsIGFuZCBhbnkgc3RhdGUgdmFyaWFibGVzIHVzZWQgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MzEuOTgxMDM2MDYxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9iYXJldWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjE6XFx0c3RhdGljIGludCBiYXJldWRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3QgPSBOVUxMO1xcbiAgNjQ6XFx0XFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Moa2V5KSA9IHsgfTtcXG4gIDY1OlxcdFxcdHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcDtcXG4gIDY2OlxcdFxcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcXG4gIDY3OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuICA2ODpcXHRcXHRfX2JlMTYgcHJvdG87XFxuICA2OTpcXHRcXHR2b2lkICpvaXBoO1xcbiAgNzA6XFx0XFx0aW50IGVycjtcXG4gIDcxOlxcdFxcdGludCBuaDtcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0YmFyZXVkcCA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiAgNzQ6XFx0XFx0aWYgKCFiYXJldWRwKVxcbiAgNzU6XFx0XFx0XFx0Z290byBkcm9wO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSAgaHRvbnMoRVRIX1BfSVApKVxcbiAgNzg6XFx0XFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDtcXG4gIDc5OlxcdFxcdGVsc2VcXG4gIDgwOlxcdFxcdFxcdGZhbWlseSA9IEFGX0lORVQ2O1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRpZiAoYmFyZXVkcC1cXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSkge1xcbiAgODM6XFx0XFx0XFx0X191OCBpcHZlcnNpb247XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdFxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgQkFSRVVEUF9CQVNFX0hMRU4sIFxcdTAwMjZpcHZlcnNpb24sXFxuICA4NjpcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihpcHZlcnNpb24pKSkge1xcbiAgODc6XFx0XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXFx1MDAzZWRldik7XFxuICA4ODpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4OTpcXHRcXHRcXHR9XFxuICA5MDpcXHRcXHRcXHRpcHZlcnNpb24gXFx1MDAzZVxcdTAwM2U9IDQ7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdFxcdGlmIChpcHZlcnNpb24gPT0gNCkge1xcbiAgOTM6XFx0XFx0XFx0XFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuICA5NDpcXHRcXHRcXHR9IGVsc2UgaWYgKGlwdmVyc2lvbiA9PSA2IFxcdTAwMjZcXHUwMDI2IGJhcmV1ZHAtXFx1MDAzZW11bHRpX3Byb3RvX21vZGUpIHtcXG4gIDk1OlxcdFxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuICA5NjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAgOTc6XFx0XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXFx1MDAzZWRldik7XFxuICA5ODpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA5OTpcXHRcXHRcXHR9XFxuIDEwMDpcXHRcXHR9IGVsc2UgaWYgKGJhcmV1ZHAtXFx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9NUExTX1VDKSkge1xcbiAxMDE6XFx0XFx0XFx0c3RydWN0IGlwaGRyICp0dW5uZWxfaGRyO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHR0dW5uZWxfaGRyID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiAxMDQ6XFx0XFx0XFx0aWYgKHR1bm5lbF9oZHItXFx1MDAzZXZlcnNpb24gPT0gNCkge1xcbiAxMDU6XFx0XFx0XFx0XFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdCh0dW5uZWxfaGRyLVxcdTAwM2VkYWRkcikpIHtcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdHByb3RvID0gYmFyZXVkcC1cXHUwMDNlZXRoZXJ0eXBlO1xcbiAxMDc6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChiYXJldWRwLVxcdTAwM2VtdWx0aV9wcm90b19tb2RlIFxcdTAwMjZcXHUwMDI2XFxuIDEwODpcXHRcXHRcXHRcXHRcXHQgICBpcHY0X2lzX211bHRpY2FzdCh0dW5uZWxfaGRyLVxcdTAwM2VkYWRkcikpIHtcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfTVBMU19NQyk7XFxuIDExMDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzozMS45ODExNzE1MzFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDU4Mzc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBhcyBmYXIgYXMgaGFuZGxpbmcgZW5jYXBzdWxhdGVkIFVEUCB0cmFmZmljIGlzIGNvbmNlcm5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgZXNwZWNpYWxseSBhdCB0aGUgZW5kLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBsb2dpYywgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgZmluYWwgc3RhdGUgdHJhbnNpdGlvbnMuIEknbSBhc3N1bWluZywgYmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlIHdpdGggc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMsIHRoYXQgdGhlIGVuZCB3aWxsIGJlIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSBmaW5hbCBzdGVwcyB0aGlzIGZ1bmN0aW9uIHRha2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzIGF0IHRoZSBjb25jbHVzaW9uIG9mIHRoaXMgcm91dGluZT8gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGNvZGUgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjM1LjI5MTc1NzgzOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9iYXJldWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTExLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTExOlxcdFxcdFxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVxcdTAwM2VkZXYpO1xcbiAxMTI6XFx0XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMTM6XFx0XFx0XFx0XFx0fVxcbiAxMTQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTE1OlxcdFxcdFxcdFxcdGludCBhZGRyX3R5cGU7XFxuIDExNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqdHVubmVsX2hkcl92NjtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0XFx0XFx0dHVubmVsX2hkcl92NiA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiAxMTk6XFx0XFx0XFx0XFx0YWRkcl90eXBlID1cXG4gMTIwOlxcdFxcdFxcdFxcdGlwdjZfYWRkcl90eXBlKChzdHJ1Y3QgaW42X2FkZHIgKilcXHUwMDI2dHVubmVsX2hkcl92Ni1cXHUwMDNlZGFkZHIpO1xcbiAxMjE6XFx0XFx0XFx0XFx0aWYgKCEoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpIHtcXG4gMTIyOlxcdFxcdFxcdFxcdFxcdHByb3RvID0gYmFyZXVkcC1cXHUwMDNlZXRoZXJ0eXBlO1xcbiAxMjM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChiYXJldWRwLVxcdTAwM2VtdWx0aV9wcm90b19tb2RlIFxcdTAwMjZcXHUwMDI2XFxuIDEyNDpcXHRcXHRcXHRcXHRcXHQgICAoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpIHtcXG4gMTI1OlxcdFxcdFxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfTVBMU19NQyk7XFxuIDEyNjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMjc6XFx0XFx0XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXFx1MDAzZWRldik7XFxuIDEyODpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDEyOTpcXHRcXHRcXHRcXHR9XFxuIDEzMDpcXHRcXHRcXHR9XFxuIDEzMTpcXHRcXHR9IGVsc2Uge1xcbiAxMzI6XFx0XFx0XFx0cHJvdG8gPSBiYXJldWRwLVxcdTAwM2VldGhlcnR5cGU7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmIChpcHR1bm5lbF9wdWxsX2hlYWRlcihza2IsIEJBUkVVRFBfQkFTRV9ITEVOLFxcbiAxMzY6XFx0XFx0XFx0XFx0XFx0IHByb3RvLFxcbiAxMzc6XFx0XFx0XFx0XFx0XFx0ICFuZXRfZXEoYmFyZXVkcC1cXHUwMDNlbmV0LFxcbiAxMzg6XFx0XFx0XFx0XFx0XFx0IGRldl9uZXQoYmFyZXVkcC1cXHUwMDNlZGV2KSkpKSB7XFxuIDEzOTpcXHRcXHRcXHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoYmFyZXVkcC1cXHUwMDNlZGV2KTtcXG4gMTQwOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBrZXkpO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHR0dW5fZHN0ID0gdWRwX3R1bl9yeF9kc3Qoc2tiLCBmYW1pbHksIGtleSwgMCwgMCk7XFxuIDE0NjpcXHRcXHRpZiAoIXR1bl9kc3QpIHtcXG4gMTQ3OlxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVxcdTAwM2VkZXYpO1xcbiAxNDg6XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2dHVuX2RzdC1cXHUwMDNlZHN0KTtcXG4gMTUxOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gYmFyZXVkcC1cXHUwMDNlZGV2O1xcbiAxNTI6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogU2F2ZSBvZmZzZXQgb2Ygb3V0ZXIgaGVhZGVyIHJlbGF0aXZlIHRvIHNrYi1cXHUwMDNlaGVhZCxcXG4gMTU1OlxcdFxcdCAqIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0IHRoZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgaW5uZXIgaGVhZGVyXFxuIDE1NjpcXHRcXHQgKiBhbmQgbWlnaHQgY2hhbmdlIHNrYi1cXHUwMDNlaGVhZC5cXG4gMTU3OlxcdFxcdCAqL1xcbiAxNTg6XFx0XFx0bmggPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZDtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjM1LjI5MTg1NjEwOFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwNDI0MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBhbmFseXplLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGluc3RydWN0aW9uIGlzIGNsZWFyIOKAkyBJJ20gbW92aW5nIG9uIHRvIGRpc3NlY3QgdGhlIGZ1bmN0aW9uIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YC4gSSd2ZSBhbHJlYWR5IGV4YW1pbmVkIHNvbWUgcmVsYXRlZCBwYXJ0cywgYnV0IG5vdyBpdCdzIHRpbWUgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgKG9yIGF0IGxlYXN0LCBsb2dpY2FsbHksIGlmIGl0J3MgZGVuc2UpIGFuZCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGZvciBhbnl0aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LCBhbnkgcG90ZW50aWFsIGdvdGNoYXMsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUuIEknbGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGFib3V0IGVycm9yIGhhbmRsaW5nLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gcGFyc2luZyBwb3RlbnRpYWxseSBtYWxpY2lvdXMgVURQIHBhY2tldHMgd2l0aGluIHRoaXMgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZW5jYXBzdWxhdGlvbiBpcyBwZXJmb3JtaW5nIGFzIGV4cGVjdGVkLCBlbnN1cmluZyB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgaXNuJ3QgY29tcHJvbWlzZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHBhc3NlZCBhcm91bmQgaW4gdGhpcyBjcml0aWNhbCBhcmVhLCBrZWVwaW5nIGluIG1pbmQgbXkgcGFzdCBleHBlcmllbmNlIHdpdGggdGhlc2UgaW1wbGVtZW50YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MzkuNTUyMjgzMDUzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JhcmV1ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKSB7XFxuIDE2MzpcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXFx1MDAzZWRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XFxuIDE2NDpcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4gMTY1OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTY2OlxcdFxcdH1cXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0LyogR2V0IHRoZSBvdXRlciBoZWFkZXIuICovXFxuIDE2OTpcXHRcXHRvaXBoID0gc2tiLVxcdTAwM2VoZWFkICsgbmg7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGlmICghaXB2Nl9tb2RfZW5hYmxlZCgpIHx8IGZhbWlseSA9PSBBRl9JTkVUKVxcbiAxNzI6XFx0XFx0XFx0ZXJyID0gSVBfRUNOX2RlY2Fwc3VsYXRlKG9pcGgsIHNrYik7XFxuIDE3MzpcXHRcXHRlbHNlXFxuIDE3NDpcXHRcXHRcXHRlcnIgPSBJUDZfRUNOX2RlY2Fwc3VsYXRlKG9pcGgsIHNrYik7XFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuIDE3NzpcXHRcXHRcXHRpZiAobG9nX2Vjbl9lcnJvcikge1xcbiAxNzg6XFx0XFx0XFx0XFx0aWYgICghaXB2Nl9tb2RfZW5hYmxlZCgpIHx8IGZhbWlseSA9PSBBRl9JTkVUKVxcbiAxNzk6XFx0XFx0XFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIm5vbi1FQ1QgZnJvbSAlcEk0IFxcXCJcXG4gMTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIndpdGggVE9TPSUjeFxcXFxuXFxcIixcXG4gMTgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNigoc3RydWN0IGlwaGRyICopb2lwaCktXFx1MDAzZXNhZGRyLFxcbiAxODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAoKHN0cnVjdCBpcGhkciAqKW9pcGgpLVxcdTAwM2V0b3MpO1xcbiAxODM6XFx0XFx0XFx0XFx0ZWxzZVxcbiAxODQ6XFx0XFx0XFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIm5vbi1FQ1QgZnJvbSAlcEk2XFxcXG5cXFwiLFxcbiAxODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2KChzdHJ1Y3QgaXB2NmhkciAqKW9pcGgpLVxcdTAwM2VzYWRkcik7XFxuIDE4NjpcXHRcXHRcXHR9XFxuIDE4NzpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMSkge1xcbiAxODg6XFx0XFx0XFx0XFx0REVWX1NUQVRTX0lOQyhiYXJldWRwLVxcdTAwM2VkZXYsIHJ4X2ZyYW1lX2Vycm9ycyk7XFxuIDE4OTpcXHRcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4gMTkwOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDE5NTpcXHRcXHRlcnIgPSBncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2YmFyZXVkcC1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbiAxOTY6XFx0XFx0aWYgKGxpa2VseShlcnIgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbiAxOTc6XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9hZGQoYmFyZXVkcC1cXHUwMDNlZGV2LCBsZW4pO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMjAwOlxcdGRyb3A6XFxuIDIwMTpcXHRcXHQvKiBDb25zdW1lIGJhZCBwYWNrZXQgKi9cXG4gMjAyOlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjA1OlxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0c3RhdGljIGludCBiYXJldWRwX2Vycl9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyMDg6XFx0e1xcbiAyMDk6XFx0XFx0cmV0dXJuIDA7XFxuIDIxMDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjM5LjU1MjM3NDI5M1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3OTE0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGVjb2RpbmcgYSBOZXR3b3JrIEVuY2Fwc3VsYXRpb24gUHV6emxlKipcblxuQWxyaWdodCwgc28gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgIGlzIHJldHVybmluZyBhIHplcm8uIFRoYXQncyBub3QgdGhlIHByb2JsZW0uIFRoYXQncyBhIHN1Y2Nlc3MsIGF0IGxlYXN0IGZyb20gKml0cyogcGVyc3BlY3RpdmUuICBJIGtuZXcgdGhhdC4gU28sIEkgbmVlZCB0byBsb29rIHVwc3RyZWFtLiBJdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gYmUgYE5FVF9GT1VgIHRoYXQncyB0aGUgY3VscHJpdCwgcmV0dXJuaW5nIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8uIFRoYXQncyB0aGUgb25lIHRoYXQncyB0cmlnZ2VyaW5nIHRoZSByZXN1Ym1pc3Npb24uIFRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIGRpZyBpbnRvIGBndHBfZW5jYXBfcmVjdmAgbmV4dCwgdGhhdCdzIHdoZXJlIHRoZSBwcm9ibGVtIGlzIGFsbW9zdCBjZXJ0YWlubHkgb3JpZ2luYXRpbmcsIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjQzLjQ5MDI5MDgwNloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NzUzMzcyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz04ODU9c3RhdGljIHZvaWQgZ3RwX2VuY2FwX2Rpc2FibGUoc3RydWN0IGd0cF9kZXYgKmd0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkwMS0gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo5MDI6c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE0MDM9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfY3JlYXRlX3NvY2soaW50IHR5cGUsIHN0cnVjdCBndHBfZGV2ICpndHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNDMzLVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNDM0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNDM1LVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE2NDg9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfZW5jYXBfZW5hYmxlX3NvY2tldChpbnQgZmQsIGludCB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY4OC1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTY4OTpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5MC1cXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzo0NS41NDc4M1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA3Nzk5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBndHBfZW5jYXBfcmVjdmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgZ3RwX2VuY2FwX3JlY3ZgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uLCBvciBhdCBsZWFzdCBhIGtleSBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93LiBJdCdzIHRoZSBwb2ludCB3aGVyZSBHVFAgcGFja2V0cyBhcmUgYmVpbmcgaGFuZGxlZCwgcHJlc3VtYWJseSByZWNlaXZlZCBhbmQgZGVjYXBzdWxhdGVkLiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSB3b3JraW5nIG9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCB0aGlzIGlzIHdvcmtpbmcsIG9yIHdoZXJlIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgbWlnaHQgYmUgbHVya2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2hlcmUgYW55IGlzc3VlcyB3aXRoIHBhY2tldCBoYW5kbGluZyB3b3VsZCBiZSBtYW5pZmVzdGluZy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjQ4Ljk1NTYzMjc1OFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAyOlxcdHN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MDM6XFx0e1xcbiA5MDQ6XFx0XFx0c3RydWN0IGd0cF9kZXYgKmd0cDtcXG4gOTA1OlxcdFxcdGludCByZXQgPSAwO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRndHAgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcXG4gOTA4OlxcdFxcdGlmICghZ3RwKVxcbiA5MDk6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDkxMDpcXHRcXG4gOTExOlxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJlbmNhcF9yZWN2IHNrPSVwXFxcXG5cXFwiLCBzayk7XFxuIDkxMjpcXHRcXG4gOTEzOlxcdFxcdHN3aXRjaCAoUkVBRF9PTkNFKHVkcF9zayhzayktXFx1MDAzZWVuY2FwX3R5cGUpKSB7XFxuIDkxNDpcXHRcXHRjYXNlIFVEUF9FTkNBUF9HVFAwOlxcbiA5MTU6XFx0XFx0XFx0bmV0ZGV2X2RiZyhndHAtXFx1MDAzZWRldiwgXFxcInJlY2VpdmVkIEdUUDAgcGFja2V0XFxcXG5cXFwiKTtcXG4gOTE2OlxcdFxcdFxcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xcbiA5MTc6XFx0XFx0XFx0YnJlYWs7XFxuIDkxODpcXHRcXHRjYXNlIFVEUF9FTkNBUF9HVFAxVTpcXG4gOTE5OlxcdFxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJyZWNlaXZlZCBHVFAxVSBwYWNrZXRcXFxcblxcXCIpO1xcbiA5MjA6XFx0XFx0XFx0cmV0ID0gZ3RwMXVfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xcbiA5MjE6XFx0XFx0XFx0YnJlYWs7XFxuIDkyMjpcXHRcXHRkZWZhdWx0OlxcbiA5MjM6XFx0XFx0XFx0cmV0ID0gLTE7IC8qIFNob3VsZG4ndCBoYXBwZW4uICovXFxuIDkyNDpcXHRcXHR9XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuIDkyNzpcXHRcXHRjYXNlIDE6XFxuIDkyODpcXHRcXHRcXHRuZXRkZXZfZGJnKGd0cC1cXHUwMDNlZGV2LCBcXFwicGFzcyB1cCB0byB0aGUgcHJvY2Vzc1xcXFxuXFxcIik7XFxuIDkyOTpcXHRcXHRcXHRicmVhaztcXG4gOTMwOlxcdFxcdGNhc2UgMDpcXG4gOTMxOlxcdFxcdFxcdGJyZWFrO1xcbiA5MzI6XFx0XFx0Y2FzZSAtMTpcXG4gOTMzOlxcdFxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJHVFAgcGFja2V0IGhhcyBiZWVuIGRyb3BwZWRcXFxcblxcXCIpO1xcbiA5MzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDkzNTpcXHRcXHRcXHRyZXQgPSAwO1xcbiA5MzY6XFx0XFx0XFx0YnJlYWs7XFxuIDkzNzpcXHRcXHR9XFxuIDkzODpcXHRcXG4gOTM5OlxcdFxcdHJldHVybiByZXQ7XFxuIDk0MDpcXHR9XFxuIDk0MTpcXHRcXG4gOTQyOlxcdHN0YXRpYyB2b2lkIGd0cF9kZXZfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDk0MzpcXHR7XFxuIDk0NDpcXHRcXHRzdHJ1Y3QgZ3RwX2RldiAqZ3RwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0Z3RwX2VuY2FwX2Rpc2FibGUoZ3RwKTtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdFxcbiA5NDk6XFx0c3RhdGljIGlubGluZSB2b2lkIGd0cDBfcHVzaF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBkcF9jdHggKnBjdHgpXFxuIDk1MDpcXHR7XFxuIDk1MTpcXHRcXHRpbnQgcGF5bG9hZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6NDguOTU1Nzk3OTc4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTU5NDM1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEdUUCBFbmNhcHN1bGF0aW9uIFJldHVybiBDb2RlcyoqXG5cbk9rYXksIHNvIGBndHBfZW5jYXBfcmVjdmAgaXMgb25seSBnaXZpbmcgbWUgdGhyZWUgcG9zc2libGUgcmV0dXJuIHZhbHVlczogMSwgMCwgb3IgLTEuIEFuZCBJIGtub3cgdGhhdCAtMSBpcyB0aGVuIGNvbnZlcnRlZCB0byAwLiBUaGF0J3MgZ29vZCB0byBrbm93LCBidXQgbm90IHF1aXRlIHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBJdCdzIG5vdCByZXR1cm5pbmcgYW55dGhpbmcgbGlrZSBhIG5lZ2F0aXZlIHZhbHVlIGxlc3MgdGhhbiB6ZXJvLCBzdWNoIGFzIHdoYXQgSSdkIHNlZSB3aXRoIGAtSVBQUk9UT19JUElQYC4gSG1tLi4uIGl0IHNlZW1zIGxpa2UgYE5FVF9GT1VgIGlzIHRoZSBpbmRpY2F0b3IgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZW4uXG5cbkxldCdzIHNoaWZ0IGdlYXJzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAuIFNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgdGVsbGluZyBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjUyLjU1MTc0MzgyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwOTk2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmV2ZV91ZHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz01NzA9c3RhdGljIGludCBnZW5ldmVfcG9zdF9kZWNhcF9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTY1MC0vKiBDYWxsYmFjayBmcm9tIG5ldC9pcHY0L3VkcC5jIHRvIHJlY2VpdmUgcGFja2V0cyAqL1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjY1MTpzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtNjUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMDI1LVxcdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMDI2OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZ2VuZXZlX3VkcF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXFx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzo1NC40NDI3NDc3NzhaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MzQ0NDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAqKlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YC4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgc29tZSBmdW5jdGlvbiBpbnZvbHZlZCBpbiByZWNlaXZpbmcgZW5jYXBzdWxhdGVkIEdlbmV2ZSBwYWNrZXRzIG92ZXIgVURQLiBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgdXMgdGhhdCBtdWNoLiBHaXZlbiB0aGF0IEknbSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGlvbiwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0OiB3aGF0IGFyZSB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCwgd2hhdCdzIHRoZSB0eXBpY2FsIG5ldHdvcmsgZmxvdywgYW5kIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHM/IElzIGl0IHBhcnQgb2YgdGhlIGZhc3QgcGF0aCwgb3IgaXMgaXQgbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBldmVuIGlmIGl0IGlzIG5vdCAqb24qIHRoZSBmYXN0IHBhdGg/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgcGFyc2luZyB0aGUgVURQIGhlYWRlciwgdmVyaWZ5aW5nIGl0cyBjaGVja3N1bSwgYW5kIHRoZW4gcGVlbGluZyBvZmYgdGhlIEdlbmV2ZSBoZWFkZXIgdG8gZ2V0IGF0IHRoZSBpbm5lciBwYWNrZXQuIEkgbmVlZCB0byBrbm93IGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgbGlrZSBmcmFnbWVudGVkIFVEUCBwYWNrZXRzIGFuZCBpZiBpdCBoYXMgYW55IHNlY3VyaXR5IGNoZWNrcyBhcyB0aGUgR2VuZXZlIGhlYWRlciBjb250YWlucyBtZXRhZGF0YSB0aGF0IGEgbWFsaWNpb3VzIGFjdG9yIG1pZ2h0IHNlZWsgdG8gdXNlIHRvIGNvbXByb21pc2UgYSBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBkZWFscyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gSSdsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgcGF5bG9hZCBpcyBoYW5kZWQgb2ZmLiBEb2VzIGl0IGNvcHkgdGhlIGRhdGEsIG9yIHBhc3MgYSBwb2ludGVyPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBhbmQgdGhyZWFkIHNhZmV0eT8gSSBrbm93IGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgZW5jYXBzdWxhdGlvbiBmdW5jdGlvbnMgdG8gYmUgZWZmaWNpZW50LCBzbyBJJ2xsIGJlIHRoaW5raW5nIGFib3V0IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzLCB0b28uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODgyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6NTguNjM2MTk0OTU5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NTE6XFx0c3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA2NTI6XFx0e1xcbiA2NTM6XFx0XFx0c3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaDtcXG4gNjU0OlxcdFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU7XFxuIDY1NTpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xcbiA2NTY6XFx0XFx0X19iZTE2IGlubmVyX3Byb3RvO1xcbiA2NTc6XFx0XFx0aW50IG9wdHNfbGVuO1xcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHQvKiBOZWVkIFVEUCBhbmQgR2VuZXZlIGhlYWRlciB0byBiZSBwcmVzZW50ICovXFxuIDY2MDpcXHRcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBHRU5FVkVfQkFTRV9ITEVOKSkpXFxuIDY2MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY2MjpcXHRcXG4gNjYzOlxcdFxcdC8qIFJldHVybiBwYWNrZXRzIHdpdGggcmVzZXJ2ZWQgYml0cyBzZXQgKi9cXG4gNjY0OlxcdFxcdGdlbmV2ZWggPSBnZW5ldmVfaGRyKHNrYik7XFxuIDY2NTpcXHRcXHRpZiAodW5saWtlbHkoZ2VuZXZlaC1cXHUwMDNldmVyICE9IEdFTkVWRV9WRVIpKVxcbiA2NjY6XFx0XFx0XFx0Z290byBkcm9wO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHRcXHRncyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiA2Njk6XFx0XFx0aWYgKCFncylcXG4gNjcwOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNjcxOlxcdFxcbiA2NzI6XFx0XFx0Z2VuZXZlID0gZ2VuZXZlX2xvb2t1cF9za2IoZ3MsIHNrYik7XFxuIDY3MzpcXHRcXHRpZiAoIWdlbmV2ZSlcXG4gNjc0OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVxcdTAwM2Vwcm90b190eXBlO1xcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRpZiAodW5saWtlbHkoKCFnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFxcdTAwMjZcXHUwMDI2XFxuIDY3OTpcXHRcXHRcXHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcXG4gNjgwOlxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtXFx1MDAzZWRldik7XFxuIDY4MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY4MjpcXHRcXHR9XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdG9wdHNfbGVuID0gZ2VuZXZlaC1cXHUwMDNlb3B0X2xlbiAqIDQ7XFxuIDY4NTpcXHRcXHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBHRU5FVkVfQkFTRV9ITEVOICsgb3B0c19sZW4sIGlubmVyX3Byb3RvLFxcbiA2ODY6XFx0XFx0XFx0XFx0XFx0ICFuZXRfZXEoZ2VuZXZlLVxcdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVxcdTAwM2VkZXYpKSkpIHtcXG4gNjg3OlxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtXFx1MDAzZWRldik7XFxuIDY4ODpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY4OTpcXHRcXHR9XFxuIDY5MDpcXHRcXG4gNjkxOlxcdFxcdC8qXFxuIDY5MjpcXHRcXHQgKiBBZnRlciBoaW50IHByb2Nlc3NpbmcsIHRoZSB0cmFuc3BvcnQgaGVhZGVyIHBvaW50cyB0byB0aGUgaW5uZXIgb25lXFxuIDY5MzpcXHRcXHQgKiBhbmQgd2UgY2FuJ3QgdXNlIGFueW1vcmUgb24gZ2VuZXZlX2hkcigpLlxcbiA2OTQ6XFx0XFx0ICovXFxuIDY5NTpcXHRcXHRnZW5ldmVoID0gZ2VuZXZlX2hkcihza2IpO1xcbiA2OTY6XFx0XFx0aWYgKGdlbmV2ZV9wb3N0X2RlY2FwX2hpbnQoc2ssIHNrYiwgc2l6ZW9mKHN0cnVjdCBnZW5ldmVoZHIpICtcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdCAgIG9wdHNfbGVuLCBcXHUwMDI2Z2VuZXZlaCkpIHtcXG4gNjk4OlxcdFxcdFxcdERFVl9TVEFUU19JTkMoZ2VuZXZlLVxcdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XFxuIDY5OTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDcwMDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjU4LjYzNjM2NDE4OVoiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA5Njc2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgIEZ1bmN0aW9uJ3MgVGFpbCoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSB0YWlsIGVuZCBvZiB0aGUgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAgZnVuY3Rpb24uIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBjcml0aWNhbCBwYXRoIGxpa2VseSByZXZlYWxzIGl0c2VsZiwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGVycm9yIGNvbmRpdGlvbnMuIEl0J3MgdGhlIHBsYWNlIHdoZXJlIHRoZSBwcm9jZXNzZWQgcGFja2V0cyBhcmUgZmluYWxseSBoYW5kbGVkLCBhbmQgdGhpcyBpcyB3aGVyZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1pZ2h0IGJlIGx1cmtpbmcuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IGl0J3MgZG9pbmcgd2l0aCB0aGUgZGF0YSBvbmNlIGl0J3MgYmVlbiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLiBJcyBpdCBtZXJlbHkgZW5xdWV1aW5nLCBvciBpcyB0aGVyZSBtb3JlIGNvbXBsZXggcHJvY2Vzc2luZyBoYXBwZW5pbmcgdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQsIG9yIGV2ZW4gaGF2ZSBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IElzIHRoZXJlIGFueSBwYWNrZXQgYWNjb3VudGluZyBwZXJmb3JtZWQgaGVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjAxLjg0NjA0MjkxNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAxOlxcdFxcbiA3MDI6XFx0XFx0Z2VuZXZlX3J4KGdlbmV2ZSwgZ3MsIHNrYiwgZ2VuZXZlaCk7XFxuIDcwMzpcXHRcXHRyZXR1cm4gMDtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0ZHJvcDpcXG4gNzA2OlxcdFxcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xcbiA3MDc6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDcwODpcXHRcXHRyZXR1cm4gMDtcXG4gNzA5OlxcdH1cXG4gNzEwOlxcdFxcbiA3MTE6XFx0LyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2ezQsNn0vdWRwLmMgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdHVubmVsIGZvciBlcnJvcnMgKi9cXG4gNzEyOlxcdHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNzEzOlxcdHtcXG4gNzE0OlxcdFxcdHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWg7XFxuIDcxNTpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xcbiA3MTY6XFx0XFx0dTggemVyb192bmlbM10gPSB7IDAgfTtcXG4gNzE3OlxcdFxcdHU4ICp2bmkgPSB6ZXJvX3ZuaTtcXG4gNzE4OlxcdFxcbiA3MTk6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIEdFTkVWRV9CQVNFX0hMRU4pKVxcbiA3MjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdGdlbmV2ZWggPSBnZW5ldmVfaGRyKHNrYik7XFxuIDcyMzpcXHRcXHRpZiAoZ2VuZXZlaC1cXHUwMDNldmVyICE9IEdFTkVWRV9WRVIpXFxuIDcyNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzI1OlxcdFxcbiA3MjY6XFx0XFx0aWYgKGdlbmV2ZWgtXFx1MDAzZXByb3RvX3R5cGUgIT0gaHRvbnMoRVRIX1BfVEVCKSlcXG4gNzI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRncyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiA3MzA6XFx0XFx0aWYgKCFncylcXG4gNzMxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAoZ2VuZXZlX2dldF9za19mYW1pbHkoZ3MpID09IEFGX0lORVQpIHtcXG4gNzM0OlxcdFxcdFxcdHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XFxuIDczNTpcXHRcXHRcXHRfX2JlMzIgYWRkcjQgPSAwO1xcbiA3MzY6XFx0XFxuIDczNzpcXHRcXHRcXHRpZiAoIWdzLVxcdTAwM2Vjb2xsZWN0X21kKSB7XFxuIDczODpcXHRcXHRcXHRcXHR2bmkgPSBnZW5ldmVfaGRyKHNrYiktXFx1MDAzZXZuaTtcXG4gNzM5OlxcdFxcdFxcdFxcdGFkZHI0ID0gaXBoLVxcdTAwM2VkYWRkcjtcXG4gNzQwOlxcdFxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0XFx0cmV0dXJuIGdlbmV2ZV9sb29rdXAoZ3MsIGFkZHI0LCB2bmkpID8gMCA6IC1FTk9FTlQ7XFxuIDc0MzpcXHRcXHR9XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA3NDY6XFx0XFx0aWYgKGdlbmV2ZV9nZXRfc2tfZmFtaWx5KGdzKSA9PSBBRl9JTkVUNikge1xcbiA3NDc6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbiA3NDg6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyIGFkZHI2O1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjAxLjg0NjE5ODU5NVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE0MTQ1MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBFbmNhcHN1bGF0aW9uIElzc3VlKipcblxuSG1tLCBzbyBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCBpcyByZXR1cm5pbmcgMC4gVGhhdCdzLi4uIG5vdCBpbW1lZGlhdGVseSBhbGFybWluZywgYnV0IGl0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFR5cGljYWxseSwgYSB6ZXJvIHJldHVybiBmcm9tIGEgcmVjZWl2ZSBmdW5jdGlvbiBpc24ndCBhICpmYWlsdXJlKiwgaXQgdXN1YWxseSBpbXBsaWVzIGEgc3VjY2Vzc2Z1bCwgYnV0IHBvdGVudGlhbGx5IGVtcHR5LCByZWFkIG9yIHNvbWUgb3RoZXIgXCJPS1wiIGNvbmRpdGlvbi4gSG93ZXZlciwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGluIHRoZXNlIGVuY2Fwc3VsYXRpb24gcGF0aHMsIGEgemVybyByZXR1cm4gKmNhbiogbWFzayB1bmRlcmx5aW5nIGlzc3VlcywgZXNwZWNpYWxseSBpbiBjb3JuZXIgY2FzZXMuXG5cbk15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IGlmIHdlJ3JlIHNlZWluZyBhbiB1bmV4cGVjdGVkIHplcm8gZnJvbSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCwgaXQgbWlnaHQgYmUgYW4gaXNzdWUgdGhhdCB3ZSBtaWdodCBvdGhlcndpc2UgY2F0Y2ggd2l0aCBgTkVUX0ZPVWAuICBJdCdzIHZlcnkgY29tbW9uIHRvIHNlZSB0aGF0IHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLiAgVGhhdCdzIGdlbmVyYWxseSB0aGUgZnVuY3Rpb24gSSdkIGV4cGVjdCB0byBmbGFnIHNvbWV0aGluZyBnb2luZyBhd3J5IGluIHRoZSBmcmFtZSBwcm9jZXNzaW5nLlxuXG5MZXQgbWUgc3dpdGNoIGdlYXJzIGFuZCBxdWlja2x5IGV4YW1pbmUgYHZ4bGFuX3JjdmAuIFNpbmNlIEdlbmV2ZSBhbmQgVlhMQU4gc2hhcmUgYSBzaW1pbGFyIGFyY2hpdGVjdHVyYWwgcGFyYWRpZ20sIGFuZCB0aGUgZW5jYXBzdWxhdGlvbiBvciBkZWNhcHN1bGF0aW9uIHBhdGhzIGNhbiBnZXQgcXVpdGUgY29tcGxpY2F0ZWQsIGl0J3Mgd29ydGggY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGltbWVkaWF0ZSBjb3JyZWxhdGlvbiBvciBpZiB0aGUgYmVoYXZpb3IgbWlnaHQgYmUgc2ltaWxhciBpbiB0aGF0IGZ1bmN0aW9uLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGJhc2VsaW5lIGFuZCBhIGNvbXBhcmlzb24gcG9pbnQuIEknbGwgZm9jdXMgb24gaG93IFZYTEFOIGhhbmRsZXMgemVybyByZXR1cm4gdmFsdWVzIGZvciBjb3JyZWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwNTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjA2LjI2MDM0NjcwN1oiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNDEyMDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGxhbl9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2MjI9c3RhdGljIGJvb2wgdnhsYW5fZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCB2eGxhbl9zb2NrICp2cywgdm9pZCAqb2lwaCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ1LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNjQ2OnN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTY0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzU3Nz1zdGF0aWMgc3RydWN0IHZ4bGFuX3NvY2sgKnZ4bGFuX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBib29sIGlwdjYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzYxNC1cXHR0dW5uZWxfY2ZnLmVuY2FwX3R5cGUgPSAxO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozNjE1OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gdnhsYW5fcmN2O1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNjE2LVxcdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IHZ4bGFuX2Vycl9sb29rdXA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3R1bm5lbC5jLTQ3LSAqICA0KSB2ZXRoMCdzIGluZ3Jlc3MgcXVldWUgcmVjZWl2ZSB0aGUgdHVubmVsZWQgcGFja2V0IGF0IG5hbWVzcGFjZSBhdF9uczAuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90dW5uZWwuYzo0ODogKiAgNSkgVHVubmVsIHByb3RvY29sIGhhbmRsZXIsIGV4OiB2eGxhbl9yY3YsIGRlY2FwIHRoZSBwYWNrZXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90dW5uZWwuYy00OS0gKiAgNikgRm9yd2FyZCB0aGUgcGFja2V0IHRvIHRoZSBvdmVybGF5IHRubCBkZXYuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjA4LjA3NDQ5ODg3MVoiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcyNzg5NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdnhsYW5fcmN2YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGB2eGxhbl9yY3ZgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LCBhbmQgdGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGFuc3dlcnMuIEkga25vdyBpdCdzIGEga2V5IHBhcnQgb2YgdGhlIFZ4TEFOIHJlY2VpdmluZyBwYXRoLCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NTcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxMS4zNDcyOTA2MTFaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjQ2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjQ2OlxcdHN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNjQ3OlxcdHtcXG4xNjQ4OlxcdFxcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSA9IE5VTEw7XFxuMTY0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgdnhsYW5oZHIgKnZoO1xcbjE2NTA6XFx0XFx0c3RydWN0IHZ4bGFuX2RldiAqdnhsYW47XFxuMTY1MTpcXHRcXHRzdHJ1Y3QgdnhsYW5fc29jayAqdnM7XFxuMTY1MjpcXHRcXHRzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgX21kO1xcbjE2NTM6XFx0XFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9IFxcdTAwMjZfbWQ7XFxuMTY1NDpcXHRcXHRfX2JlMTYgcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9URUIpO1xcbjE2NTU6XFx0XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbjE2NTY6XFx0XFx0Ym9vbCByYXdfcHJvdG8gPSBmYWxzZTtcXG4xNjU3OlxcdFxcdHZvaWQgKm9pcGg7XFxuMTY1ODpcXHRcXHRfX2JlMzIgdm5pID0gMDtcXG4xNjU5OlxcdFxcdGludCBuaDtcXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0LyogTmVlZCBVRFAgYW5kIFZYTEFOIGhlYWRlciB0byBiZSBwcmVzZW50ICovXFxuMTY2MjpcXHRcXHRyZWFzb24gPSBwc2tiX21heV9wdWxsX3JlYXNvbihza2IsIFZYTEFOX0hMRU4pO1xcbjE2NjM6XFx0XFx0aWYgKHJlYXNvbilcXG4xNjY0OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNjY1OlxcdFxcbjE2NjY6XFx0XFx0dmggPSB2eGxhbl9oZHIoc2tiKTtcXG4xNjY3OlxcdFxcdC8qIFZOSSBmbGFnIGFsd2F5cyByZXF1aXJlZCB0byBiZSBzZXQgKi9cXG4xNjY4OlxcdFxcdGlmICghKHZoLVxcdTAwM2V2eF9mbGFncyBcXHUwMDI2IFZYTEFOX0hGX1ZOSSkpIHtcXG4xNjY5OlxcdFxcdFxcdG5ldGRldl9kYmcoc2tiLVxcdTAwM2VkZXYsIFxcXCJpbnZhbGlkIHZ4bGFuIGZsYWdzPSUjeCB2bmk9JSN4XFxcXG5cXFwiLFxcbjE2NzA6XFx0XFx0XFx0XFx0ICAgbnRvaGwodmgtXFx1MDAzZXZ4X2ZsYWdzKSwgbnRvaGwodmgtXFx1MDAzZXZ4X3ZuaSkpO1xcbjE2NzE6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1ZYTEFOX0lOVkFMSURfSERSO1xcbjE2NzI6XFx0XFx0XFx0LyogUmV0dXJuIG5vbiB2eGxhbiBwa3QgKi9cXG4xNjczOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNjc0OlxcdFxcdH1cXG4xNjc1OlxcdFxcbjE2NzY6XFx0XFx0dnMgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcXG4xNjc3OlxcdFxcdGlmICghdnMpXFxuMTY3ODpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTY3OTpcXHRcXG4xNjgwOlxcdFxcdHZuaSA9IHZ4bGFuX3ZuaSh2aC1cXHUwMDNldnhfdm5pKTtcXG4xNjgxOlxcdFxcbjE2ODI6XFx0XFx0dnhsYW4gPSB2eGxhbl92c19maW5kX3ZuaSh2cywgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIHZuaSwgXFx1MDAyNnZuaW5vZGUpO1xcbjE2ODM6XFx0XFx0aWYgKCF2eGxhbikge1xcbjE2ODQ6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1ZYTEFOX1ZOSV9OT1RfRk9VTkQ7XFxuMTY4NTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTY4NjpcXHRcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdGlmICh2aC1cXHUwMDNldnhfZmxhZ3MgXFx1MDAyNiB2eGxhbi1cXHUwMDNlY2ZnLnJlc2VydmVkX2JpdHMudnhfZmxhZ3MgfHxcXG4xNjg5OlxcdFxcdCAgICB2aC1cXHUwMDNldnhfdm5pIFxcdTAwMjYgdnhsYW4tXFx1MDAzZWNmZy5yZXNlcnZlZF9iaXRzLnZ4X3ZuaSkge1xcbjE2OTA6XFx0XFx0XFx0LyogSWYgdGhlIGhlYWRlciB1c2VzIGJpdHMgYmVzaWRlcyB0aG9zZSBlbmFibGVkIGJ5IHRoZVxcbjE2OTE6XFx0XFx0XFx0ICogbmV0ZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHRyZWF0IHRoaXMgYXMgYSBtYWxmb3JtZWQgcGFja2V0LlxcbjE2OTI6XFx0XFx0XFx0ICogVGhpcyBiZWhhdmlvciBkaXZlcmdlcyBmcm9tIFZYTEFOIFJGQyAoUkZDNzM0OCkgd2hpY2hcXG4xNjkzOlxcdFxcdFxcdCAqIHN0aXB1bGF0ZXMgdGhhdCBiaXRzIGluIHJlc2VydmVkIGluIHJlc2VydmVkIGZpZWxkcyBhcmUgdG8gYmVcXG4xNjk0OlxcdFxcdFxcdCAqIGlnbm9yZWQuIFRoZSBhcHByb2FjaCBoZXJlIG1haW50YWlucyBjb21wYXRpYmlsaXR5IHdpdGhcXG4xNjk1OlxcdFxcdFxcdCAqIHByZXZpb3VzIHN0YWNrIGNvZGUsIGFuZCBhbHNvIGlzIG1vcmUgcm9idXN0IGFuZCBwcm92aWRlcyBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjExLjM0NzQ3MDEyMVoiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM3NDgzNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZ4bGFuX3JjdjogVGhlIEZpbmFsIEZyb250aWVyIChmb3IgTm93KSoqXG5cbk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRhaWwgZW5kIG9mIGB2eGxhbl9yY3ZgLiBJJ3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIHdoaWxlIG5vdywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSBtZW50YWwgbW9kZWwgb2YgaXRzIGZpbmFsIG9wZXJhdGlvbnMuIFdoZXJlIGRvZXMgdGhlIGRhdGEgZmluYWxseSBnbz8gV2hhdCdzIHRoZSB1bHRpbWF0ZSBwYXRoIGFmdGVyIHRoZSBkZWNhcHN1bGF0aW9uIGFuZCBiYXNpYyBjaGVja3M/IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGdsYXJpbmcgaXNzdWVzIG9uIG15IHJhZGFyLiBJcyB0aGVyZSBhbnl0aGluZyBpbiB0aGlzIGNvZGUgcGF0aCB0aGF0IGNvdWxkIGJlIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIHBlcmhhcHMgaW50cm9kdWNlIGEgc3VidGxlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIGhvdyBpdCBoYW5kbGVzIHRoZSBmaW5hbCBwYWNrZXQgcGxhY2VtZW50PyBBIGZpbmFsIHJldmlldyBvZiB0aGUgZW5kIG9mIHRoaXMgcHJvY2VzcyBzaG91bGQgY29tcGxldGUgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxODkyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxNS4xODQ5NTYxMjNaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODAwOlxcdFxcdGRldl9kc3RhdHNfcnhfYWRkKHZ4bGFuLVxcdTAwM2VkZXYsIHNrYi1cXHUwMDNlbGVuKTtcXG4xODAxOlxcdFxcdHZ4bGFuX3ZuaWZpbHRlcl9jb3VudCh2eGxhbiwgdm5pLCB2bmlub2RlLCBWWExBTl9WTklfU1RBVFNfUlgsIHNrYi1cXHUwMDNlbGVuKTtcXG4xODAyOlxcdFxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZ2eGxhbi1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbjE4MDM6XFx0XFxuMTgwNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xODA1OlxcdFxcbjE4MDY6XFx0XFx0cmV0dXJuIDA7XFxuMTgwNzpcXHRcXG4xODA4OlxcdGRyb3A6XFxuMTgwOTpcXHRcXHRyZWFzb24gPSByZWFzb24gPzogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuMTgxMDpcXHRcXHQvKiBDb25zdW1lIGJhZCBwYWNrZXQgKi9cXG4xODExOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbjE4MTI6XFx0XFx0cmV0dXJuIDA7XFxuMTgxMzpcXHR9XFxuMTgxNDpcXHRcXG4xODE1OlxcdHN0YXRpYyBpbnQgdnhsYW5fZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuMTgxNjpcXHR7XFxuMTgxNzpcXHRcXHRzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbjtcXG4xODE4OlxcdFxcdHN0cnVjdCB2eGxhbl9zb2NrICp2cztcXG4xODE5OlxcdFxcdHN0cnVjdCB2eGxhbmhkciAqaGRyO1xcbjE4MjA6XFx0XFx0X19iZTMyIHZuaTtcXG4xODIxOlxcdFxcbjE4MjI6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIFZYTEFOX0hMRU4pKVxcbjE4MjM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgyNDpcXHRcXG4xODI1OlxcdFxcdGhkciA9IHZ4bGFuX2hkcihza2IpO1xcbjE4MjY6XFx0XFxuMTgyNzpcXHRcXHRpZiAoIShoZHItXFx1MDAzZXZ4X2ZsYWdzIFxcdTAwMjYgVlhMQU5fSEZfVk5JKSlcXG4xODI4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4Mjk6XFx0XFxuMTgzMDpcXHRcXHR2cyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbjE4MzE6XFx0XFx0aWYgKCF2cylcXG4xODMyOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4MzM6XFx0XFxuMTgzNDpcXHRcXHR2bmkgPSB2eGxhbl92bmkoaGRyLVxcdTAwM2V2eF92bmkpO1xcbjE4MzU6XFx0XFx0dnhsYW4gPSB2eGxhbl92c19maW5kX3ZuaSh2cywgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIHZuaSwgTlVMTCk7XFxuMTgzNjpcXHRcXHRpZiAoIXZ4bGFuKVxcbjE4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTgzODpcXHRcXG4xODM5OlxcdFxcdHJldHVybiAwO1xcbjE4NDA6XFx0fVxcbjE4NDE6XFx0XFxuMTg0MjpcXHRzdGF0aWMgaW50IGFycF9yZWR1Y2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHZuaSlcXG4xODQzOlxcdHtcXG4xODQ0OlxcdFxcdHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xODQ1OlxcdFxcdHN0cnVjdCBhcnBoZHIgKnBhcnA7XFxuMTg0NjpcXHRcXHR1OCAqYXJwcHRyLCAqc2hhO1xcbjE4NDc6XFx0XFx0X19iZTMyIHNpcCwgdGlwO1xcbjE4NDg6XFx0XFx0c3RydWN0IG5laWdoYm91ciAqbjtcXG4xODQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxNS4xODUxNTUyMDNaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwODgzNjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbjogRGlzc2VjdGluZyB0aGUgVlhMQU4gUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gYHZ4bGFuX3JjdmAgaXMgcmV0dXJuaW5nIDAsIHdoaWNoIG1lYW5zIHdlJ3JlIGhpdHRpbmcgdGhlIHJpZ2h0IHBhdGggdG8gYmVnaW4gd2l0aCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBmb2N1cyBvbiBgTkVUX0ZPVWAuIE5vdywgaG9sZCBvbiwgYENPTkZJR19ORVRfRk9VYCBpcyB0cmlzdGF0ZS4gQ29uc2lkZXJpbmcgd2hhdCB0aGUgdGVzdCBzY3JpcHQgaXMgZG9pbmcsIGFuZCB0aGUgbW9kdWxlcyBpdCdzIGxvYWRpbmcsIGBmb3VgIGFuZCBgZm91NmAsIGl0IG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGVuYWJsZWQuXG5cblNvLCBsZXQncyBlbmFibGUgYE5FVF9GT1VgLCB0aGF0J3MgYSBnaXZlbi4gV2UnbGwgYWxzbyBuZWVkIGBJUFY2X0ZPVWAgYW5kIGBJUFY2X0ZPVV9UVU5ORUxgIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGUgSVB2NiBzaWRlIG9mIHRoaW5ncy4gR2l2ZW4gdGhlIEdSRSB0dW5uZWxzIGVtcGxveWVkIGluIHRoaXMgdGVzdCwgd2Ugc2hvdWxkIGFsc28gZW5hYmxlIGBORVRfSVBHUkVgIGFuZCBgSVBWNl9HUkVgIGFzIHdlbGwuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfTkVUX0lQR1JFYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4NzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxOS44OTM5OTM3NVoiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTA4ODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQR1JFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXFxubmV0L2lwdjQvS2NvbmZpZzoxOTI6Y29uZmlnIE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMTkzLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjA2LVxcbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiSVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6MjEuNzU5MDg4MDFaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5OTQ1MzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19JUFY2X0dSRWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBsaWtlbHkga25lZS1kZWVwIGluIGEgbmV0d29ya2luZy1yZWxhdGVkIGlzc3VlLCBwcm9iYWJseSBrZXJuZWwgY29uZmlndXJhdGlvbiBvciBzb21lIGZvcm0gb2YgbmV0d29yayBwcm90b2NvbCBhbmFseXNpcy4gVGhlIGltbWVkaWF0ZSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfSVBWNl9HUkVgIHN1Z2dlc3RzIEknbSBmb2N1c2luZyBvbiBJUHY2LW92ZXItR1JFIHR1bm5lbGluZy4gSXTigJlzIGEgY29yZSBjb21wb25lbnQgaW4gbWFueSBuZXR3b3JrIGFyY2hpdGVjdHVyZXMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIGNvbXBsZXggcm91dGluZyByZXF1aXJlbWVudHMsIHNvIHRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAuXG5cbkknbSBwcm9iYWJseSBhc2tpbmcgbXlzZWxmIGEgZmV3IGtleSBxdWVzdGlvbnM6IElzIElQdjYtb3Zlci1HUkUgZW5hYmxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24/IElmIHNvLCB3aGF0IGFyZSBpdHMgc2V0dGluZ3M/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzPyBBbSBJIGRlYWxpbmcgd2l0aCBhIGJ1aWxkIGZhaWx1cmUsIGEgcnVudGltZSBpc3N1ZSwgb3Igc2ltcGx5IGF0dGVtcHRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBkaWFnbm9zdGljIG9yIGRlcGxveW1lbnQgcHVycG9zZXM/IFRoaXMgbGluZSBvZiB0aGlua2luZyBoZWxwcyBtZSBxdWlja2x5IG5hcnJvdyBkb3duIHRoZSBzY29wZSBhbmQgc2VsZWN0IHRoZSBjb3JyZWN0IGRlYnVnZ2luZyBzdHJhdGVneSwgb3IgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgYWN0aW9ucy4gVGhlIGFic2VuY2Ugb2YgdGhpcyBrZXkgZmVhdHVyZSBtYXkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byBzb2x2ZSB0aGUgbmV0d29yayBjb21tdW5pY2F0aW9uIGlzc3VlIEkgYW0gZmFjaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ2OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjI1LjY1ODU0NDA4NloiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTk3OTI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9HUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6MjcuNDg4NTMwOFoiLCJTZXEiOjgxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTUyMjkyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGFzc3VtaW5nIEknbSB0aGUgb25lIHdvcmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIElQIFR1bm5lbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGdvYWwgaXMgdG8gZ2V0IHRoaXMgSVAgdHVubmVsaW5nIHN5c3RlbSB1cCBhbmQgcnVubmluZy4gVGhlIGluaXRpYWwgY29uZmlncyB0byBhY3RpdmF0ZSBzZWVtIHRvIGJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBORVRfRk9VYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gVGhvc2UgY292ZXIgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBmb3IgYm90aCBnZW5lcmljIHJvdXRpbmcgZW5jYXBzdWxhdGlvbiBhbmQgdGhlIG1vcmUgbW9kZXJuIEZPVSAoVURQIGVuY2Fwc3VsYXRpb24gb3ZlciBJUCkgYXNwZWN0cyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMuXG5cbldhaXQgYSBzZWNvbmTigKYgSSd2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcsIGEgZGV0YWlsIHRoYXQncyBlc3NlbnRpYWwgZm9yIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGhlcmUuIEFtIEkgbWlzc2luZyBzb21ldGhpbmcgcmVnYXJkaW5nIHRoZSBmaW5lciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEZPVSB0dW5uZWxpbmc/IExldCdzIGNoZWNrIGBORVRfRk9VX0lQX1RVTk5FTFNgLiBJJ3ZlIGdvdCBhIGh1bmNoIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIEZPVSBlbmNhcHN1bGF0aW9uIHdpdGhpbiBJUCB0dW5uZWxzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGNvbmZpcm0gdGhhdCdzIGVuYWJsZWQgYXMgd2VsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODozNC40NDA4MjUyMTRaIiwiU2VxIjo4MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzI4MzYwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMyMT1jb25maWcgTkVUX0ZPVVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMjktXFxubmV0L2lwdjQvS2NvbmZpZzozMzA6Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbm5ldC9pcHY0L0tjb25maWctMzMxLVxcdGJvb2wgXFxcIklQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODozNi4yNzM2Njg3NTdaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2ODkwMjg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORVRfRk9VX0lQX1RVTk5FTFMgSGVscCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGBORVRfRk9VX0lQX1RVTk5FTFNgIHRoaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiwgb3IgaGVscCB0ZXh0LCBoYXMgdG8gc2F5IGFib3V0IGl0LiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSdtIHN1cmUgc29tZW9uZSdzIGRldGFpbGVkIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCB1c2FnZSBzb21ld2hlcmUuIEhvcGVmdWxseSwgaXQncyB3ZWxsLXdyaXR0ZW4sIGNsZWFybHkgZXhwbGFpbmluZyB0aGUgcHVycG9zZSwgYW55IHJlbGV2YW50IHBhcmFtZXRlcnMsIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBMZXQncyBnZXQgY3JhY2tpbmcgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjQxLjU0MjU3NDM1NloiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuIDMzMTpcXHRcXHRib29sIFxcXCJJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1xcXCJcXG4gMzMyOlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQSVAgfHwgTkVUX0lQR1JFIHx8IElQVjZfU0lUXFxuIDMzMzpcXHRcXHRzZWxlY3QgTkVUX0ZPVVxcbiAzMzQ6XFx0XFx0aGVscFxcbiAzMzU6XFx0XFx0ICBBbGxvdyBjb25maWd1cmF0aW9uIG9mIEZPVSBvciBHVUUgZW5jYXBzdWxhdGlvbiBmb3IgSVAgdHVubmVscy5cXG4gMzM2OlxcdFxcdCAgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIElQIHR1bm5lbHMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlXFxuIDMzNzpcXHRcXHQgIEZPVSBvciBHVUUgZW5jYXBzdWxhdGlvbi5cXG4gMzM4OlxcdFxcbiAzMzk6XFx0Y29uZmlnIElORVRfQUhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6NDEuNTQyNjY2MTY2WiIsIlNlcSI6ODUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTkzMjI5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRk9VIGFuZCBJUCBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIG9uIGNvbmZpZ3VyaW5nIEZPVSBlbmNhcHN1bGF0aW9uIGZvciBJUCB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgR1JFIHR1bm5lbHMgaGVyZS4gVGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IHRvIGdldCB0aGF0IGZ1bmN0aW9uYWxpdHksIEkgZGVmaW5pdGVseSBuZWVkIGBORVRfRk9VX0lQX1RVTk5FTFNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEknbGwgYWRkIHRoYXQgdG8gdGhlIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgYSBjcnVjaWFsIG5leHQgc3RlcDogV2hhdCBhYm91dCBJUHY2PyBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyBhbiBhbmFsb2dvdXMgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIElQdjYgc3VwcG9ydCwgZW5zdXJpbmcgY29tcGxldGUgY292ZXJhZ2UuIExldCBtZSBzZWUgaWYgc29tZXRoaW5nIHNpbWlsYXIgZXhpc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6NDUuMzQxOTkxNDdaIiwiU2VxIjo4NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDE1Nzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGT1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTIxMD1jb25maWcgSVBWNl9HUkVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxubmV0L2lwdjYvS2NvbmZpZzoyMzA6XFx0ZGVmYXVsdCBORVRfRk9VIFxcdTAwMjZcXHUwMDI2IElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG5uZXQvaXB2Ni9LY29uZmlnOjIzNDpcXHRkZWZhdWx0IE5FVF9GT1VfSVBfVFVOTkVMUyBcXHUwMDI2XFx1MDAyNiBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjM1LVxcdHNlbGVjdCBJUFY2X1RVTk5FTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODo0NS42MjYxNTQyOTZaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxNTAwNjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGT1UgTXVsdGljYXN0IFJlc3VibWlzc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9GT1VgIGFuZCBgSVBWNl9GT1VfVFVOTkVMYCBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHdlIGhhdmUgYE5FVF9GT1VgIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYnV0IEknbGwgZXhwbGljaXRseSBsaXN0IGFsbCB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgY2xhcml0eTogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIGhlYXJ0IG9mIGl0LiBUaGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaGVyZSBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5IHBhdGguIEl0J3MgdG91Y2hpbmcgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBHb29kLCB0aG9zZSBhcmVuJ3Qgb3Zlcmx5IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBtYWtpbmcgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AuIFRoZXkgYXJlIHNwZWNpZmljYWxseSB0aWVkIHRvIG11bHRpY2FzdCBVRFAgZGVsaXZlcnksIHdoaWNoIG5hcnJvd3MgdGhlIHNjb3BlIGFuZCBtYWtlcyBhbmFseXNpcyBlYXNpZXIuXG5cblRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgdG8gdGVzdHMgKCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdgKSwgYnV0IHRoZSByZWFsIG1lYXQgaXMgaW4gdGhlIGNvcmUgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC5cblxuSSdtIHRoaW5raW5nLCBpcyBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBldmVuIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZT8gQWgsIHllcywgaWYgeW91IHNlbmQgYSBVRFAgcGFja2V0IHRvIGEgbXVsdGljYXN0IGFkZHJlc3MgYW5kIHlvdSBoYXZlIGEgRk9VIHR1bm5lbCBjb25maWd1cmVkIHRvIHJlY2VpdmUgb24gdGhhdCBwb3J0LCBpdCB3aWxsLCBvZiBjb3Vyc2UsIHRyaWdnZXIgdGhlIHJlc3VibWlzc2lvbiBwYXRoLiBOb3csIHRoZSBjb250ZXh0IGlzIGNsZWFyLlxuXG5UaGUgY3J1eCBvZiB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgYnVnLiBJdCBzZWVtcyB0aGF0IFVEUCBtdWx0aWNhc3QgcGFja2V0cyBlbmNhcHN1bGF0ZWQgaW4gRk9VIHdlcmVuJ3QgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLCBhbmQgd2VyZSBpbnN0ZWFkIGp1c3QgZ2V0dGluZyBjb25zdW1lZC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBidWcgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjazsgaXQncyBjaGFuZ2luZyByZWFjaGFibGUga2VybmVsIGxvZ2ljLiBJdCBkaXJlY3RseSBhZmZlY3RzIHRoZSBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5LiBHaXZlbiB0aGlzLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGlzIG5ldyByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlxuXG5JbiBzdW1tYXJ5LCBteSBmb2N1cyBzeW1ib2xzIGFyZTogYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gQW5kIEkgYmV0dGVyIGFkZCBgTkVUX0lQR1JFX0RFTVVYYCB0byB0aGUgY29uZmlnIGxpc3QganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODo1NS41NDExNjQyMjdaIiwiU2VxIjo4OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTI6XFx0Y29uZmlnIE5FVF9JUEdSRVxcbiAxOTM6XFx0XFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgdHVubmVscyBvdmVyIElQXFxcIlxcbiAxOTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG4gMTk1OlxcdFxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxuIDE5NjpcXHRcXHRoZWxwXFxuIDE5NzpcXHRcXHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXFxuIDE5ODpcXHRcXHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcXG4gMTk5OlxcdFxcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xcbiAyMDA6XFx0XFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xcbiAyMDE6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIG9mIElQdjQgb3IgSVB2NiBvdmVyIGV4aXN0aW5nIElQdjQgaW5mcmFzdHJ1Y3R1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjU1LjU0MTI0ODczN1oiLCJTZXEiOjg5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNjAwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqSVBHUkUgQ29uZmlndXJhdGlvbjogRGVwZW5kZW5jaWVzIFx1MDAyNiBOZXh0IFN0ZXBzKipcblxuQWxyaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBgTkVUX0lQR1JFYCBoZXJlLiBJbW1lZGlhdGVseSwgaXQgY2xpY2tzIHRoYXQgYE5FVF9JUEdSRWAgZGVmaW5pdGVseSByZWxpZXMgb24gYE5FVF9JUEdSRV9ERU1VWGAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuIFRoZXJlZm9yZSwgYSBkZWZpbml0aXZlIGluY2x1c2lvbiBvZiBgTkVUX0lQR1JFX0RFTVVYYCBpcyByZXF1aXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgaXMgaGFuZGxlZC5cblxuTm93LCBsZXQncyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYElQVjZfR1JFYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEknbSBzdXJlIHRoZXJlIGFyZSBzb21lIHJlbGF0aW9uc2hpcHMsIGl0J3MgdGltZSB0byBjaGVjayB3aGF0J3MgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjU5LjYwNDg1Mjg0OVoiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRjb25maWcgSVBWNl9HUkVcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbiAyMTI6XFx0XFx0c2VsZWN0IElQVjZfVFVOTkVMXFxuIDIxMzpcXHRcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG4gMjE1OlxcdFxcdGhlbHBcXG4gMjE2OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMjE3OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAyMTg6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDIxOTpcXHRcXHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjU5LjYwNDk0MDU5OVoiLCJTZXEiOjkxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU1NjkyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVkdWN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCBpdCdzIGJlY29taW5nIGNsZWFyZXIuIFNwZWNpZmljYWxseSwgSSd2ZSBjb25maXJtZWQgdGhhdCBgSVBWNl9HUkVgIGFsc28gcmVxdWlyZXMgYE5FVF9JUEdSRV9ERU1VWGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBkZW11bHRpcGxleGluZyBhc3BlY3QgaXMgY3J1Y2lhbC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSB0aGVzZTpcblxuKiAgIGBORVRfRk9VYFxuKiAgIGBORVRfRk9VX0lQX1RVTk5FTFNgXG4qICAgYElQVjZfRk9VYFxuKiAgIGBJUFY2X0ZPVV9UVU5ORUxgXG4qICAgYE5FVF9JUEdSRWBcbiogICBgTkVUX0lQR1JFX0RFTVVYYFxuKiAgIGBJUFY2X0dSRWBcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBhcmUgc25lYWtpbHkgaW52b2x2ZWQgaGVyZS5cblxuVGhlIHRlc3Qgc2NyaXB0IHVzZXMgYGlwIGZvdSBhZGQgcG9ydCA0Nzk3IGlwcHJvdG8gNDdgIHRvIHRlc3QgdGhlIG1vZHVsZSwgc28gSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgYGZvdWAgbW9kdWxlIGlzIGludm9sdmVkLCBvYnZpb3VzbHkuIFRoZSBzY3JpcHQgYWxzbyB1c2VzIGBpcCBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgLi4uIGVuY2FwIGZvdWAuIEhtbSwgdGhhdCB1c2VzIGBncmV0YXBgLiBBbmQgSSB3YXMgdGhpbmtpbmcgYGdyZXRhcGAgd2FzIHBhcnQgb2YgYE5FVF9JUEdSRWAuIFRoYXQgKmZlZWxzKiByaWdodCwgYnV0IGlzIHRoZXJlIGEgbnVhbmNlPyBIYW5nIG9uLCBpdCBzZWVtcyBgZ3JldGFwYCBtaWdodCBhY3R1YWxseSBiZSBwYXJ0IG9mIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIFRoYXQgY291bGQgY2hhbmdlIGV2ZXJ5dGhpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MDQuOTYwNjM0NjE4WiIsIlNlcSI6OTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA3OlxcdGNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxuIDIwODpcXHRcXHRib29sIFxcXCJJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXFxcIlxcbiAyMDk6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXFx1MDAyNlxcdTAwMjYgTkVUX0lQR1JFXFxuIDIxMDpcXHRcXHRoZWxwXFxuIDIxMTpcXHRcXHQgIE9uZSBhcHBsaWNhdGlvbiBvZiBHUkUvSVAgaXMgdG8gY29uc3RydWN0IGEgYnJvYWRjYXN0IFdBTiAoV2lkZSBBcmVhXFxuIDIxMjpcXHRcXHQgIE5ldHdvcmspLCB3aGljaCBsb29rcyBsaWtlIGEgbm9ybWFsIEV0aGVybmV0IExBTiAoTG9jYWwgQXJlYVxcbiAyMTM6XFx0XFx0ICBOZXR3b3JrKSwgYnV0IGNhbiBiZSBkaXN0cmlidXRlZCBhbGwgb3ZlciB0aGUgSW50ZXJuZXQuIElmIHlvdSB3YW50XFxuIDIxNDpcXHRcXHQgIHRvIGRvIHRoYXQsIHNheSBZIGhlcmUgYW5kIHRvIFxcXCJJUCBtdWx0aWNhc3Qgcm91dGluZ1xcXCIgYmVsb3cuXFxuIDIxNTpcXHRcXG4gMjE2OlxcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM5OjA0Ljk2MDcyMzczOFoiLCJTZXEiOjkzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg5ODc3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIEdSRSBCcm9hZGNhc3QgT3B0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBHUkUgYW5kIGJyb2FkY2FzdCB0cmFmZmljLiBSaWdodCwgYE5FVF9JUEdSRV9CUk9BRENBU1RgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBoZXJlLiBJdCdzIGVzc2VudGlhbCBmb3IgZW5hYmxpbmcgYnJvYWRjYXN0IEdSRSBvdmVyIElQLCBzcGVjaWZpY2FsbHkgZm9yIGBncmV0YXBgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0OyB3ZSBuZWVkIHRvIGluY2x1ZGUgaXQuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgSVB2NiBzaWRlIG9mIHRoaW5ncz8gV2UndmUgZ290IElQdjQgY292ZXJlZCwgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9uIHRoZSBJUHY2IGZyb250LiBJcyB0aGVyZSBhIHNpbWlsYXIgb3B0aW9uLCBhIGBJUFY2X0dSRV9CUk9BRENBU1RgIGVxdWl2YWxlbnQ/IEknZCBiZXR0ZXIgY2hlY2sgdGhlIGBJUFY2X0dSRWAgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHN1cmUuIE5lZWQgdG8gZW5zdXJlIGZ1bGwgY29tcGF0aWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM5OjA4LjY1MDYwMzQ2MloiLCJTZXEiOjk0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMjAyNjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9HUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MTAuNDcyNjM4MDUzWiIsIlNlcSI6OTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzYzNzMzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkNoZWNraW5nIGZvciBJUFY2X0dSRV9CUk9BRENBU1QqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvciBwcmVzZW5jZSBvZiBgSVBWNl9HUkVfQlJPQURDQVNUYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhhdCBzcGVjaWZpYyBpZGVudGlmaWVyIGFuZCBsb29rIGludG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBkb2N1bWVudGF0aW9uLCBvciBjb2RlIHRoYXQgd291bGQgZGVmaW5lIHRoaXMgc2V0dGluZy4gSXMgaXQgYSBkZWZpbmVkIGNvbnN0YW50IGluIG15IGN1cnJlbnQgZW52aXJvbm1lbnQ/IElzIGl0IHBhcnQgb2YgYSBzcGVjaWZpYyBtb2R1bGUgb3IgbGlicmFyeT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgSSBjYW4gcmVsaWFibHkgdmVyaWZ5IGlmIHRoaXMgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIG9yIHN1cHBvcnRlZCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBzdXBwb3J0IG9yIGxhY2sgb2Ygc3VwcG9ydCBoYXMuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byB0YWtlIHNwZWNpZmljIGFjdGlvbiBiYXNlZCBvbiB0aGUgcmVzdWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzk4NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM5OjE0LjU0OTAxMzA1M1oiLCJTZXEiOjk2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDMxOTI3NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfR1JFX0JST0FEQ0FTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MTYuMzY5MzQwMTM3WiIsIlNlcSI6OTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTAzNjM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcy5cblxuKipBbmFseXppbmcgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cblJpZ2h0LCB0aGF0J3MgYSBxdWljayBhbmQgZGVjaXNpdmUgXCJOb1wiIGFzIGFuIGluaXRpYWwgYXNzZXNzbWVudC4gQ2xlYXJseSwgdGhlIHByb2JsZW0gc3RhdGVtZW50IGlzIGxlYWRpbmcgbWUgc29tZXdoZXJlLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBhbmQgYXNzZXNzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodHMgYnJpbmcgdG8gbWluZCB0aGVzZSBvcHRpb25zIEkga25vdyBmcm9tIGV4cGVyaWVuY2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHR1bm5lbGluZzogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYE5FVF9JUEdSRV9CUk9BRENBU1RgLCBhbmQgYElQVjZfR1JFYC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLiBXZSdsbCBjYWxsIHRoZSByZXN1bHQgb2YgdGhpcyBhc3Nlc3NtZW50IFwic2V0LXJlc3VsdHNcIiAtIEknbGwgbmVlZCB0byB3b3JrIHdpdGggdGhvc2UgbGF0ZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODE4MCwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MjEuNjE5NzA1ODY4WiIsIlNlcSI6OTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5NDAzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiSVBWNl9GT1VcIixcbiAgICBcIklQVjZfRk9VX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUEdSRV9CUk9BRENBU1RcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBVRFAgbXVsdGljYXN0IHBhY2tldHMgZW5jYXBzdWxhdGVkIGluIEZPVSB3ZXJlIG5vdCBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSBidXQgd2VyZSBpbnN0ZWFkIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayAoVURQIG11bHRpY2FzdCBkZWxpdmVyeSkuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiSVBWNl9GT1VcIixcbiAgICBcIklQVjZfRk9VX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUEdSRV9CUk9BRENBU1RcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBVRFAgbXVsdGljYXN0IHBhY2tldHMgZW5jYXBzdWxhdGVkIGluIEZPVSB3ZXJlIG5vdCBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSBidXQgd2VyZSBpbnN0ZWFkIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayAoVURQIG11bHRpY2FzdCBkZWxpdmVyeSkuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 10:18:22 +0000 UTC FinishedAt: 2026-07-08 10:39:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "IPV6_FOU", "IPV6_FOU_TUNNEL", "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IPGRE_BROADCAST", "IPV6_GRE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "IPV6_FOU", "IPV6_FOU_TUNNEL", "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IPGRE_BROADCAST", "IPV6_GRE" ], "series_id": "3b495335-fc34-4368-954b-95670cc744d9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__udp4_lib_mcast_deliver", "__udp6_lib_mcast_deliver" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRV9CUk9BRENBU1QmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXImIzM0OywKICAgICYjMzQ7X191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIFVEUCBtdWx0aWNhc3QgcGFja2V0cyBlbmNhcHN1bGF0ZWQgaW4gRk9VIHdlcmUgbm90IHByb3Blcmx5IHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIGJ1dCB3ZXJlIGluc3RlYWQgY29uc3VtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIChVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5KS4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJlc3VibWlzc2lvbiBwYXRoIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDJjNDNmNTA1Yjk3YWY0ZTJlZjcwMzk5YjMxNmUwZTM0MTFiNTk4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTA6MzU6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuY1xuaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcC5jXG5AQCAtMjQ3Niw2ICYjNDM7MjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90O1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRib29sIHVzZV9oYXNoMjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aGFzaDJfYW55ID0gMDtcbiBcdGhhc2gyID0gMDtcbkBAIC0yNTIwLDggJiM0MzsyNTIxLDkgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKSBcdTAwM2UgMClcbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0cmV0ID0gdWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gLXJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuY1xuaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtOTQ5LDYgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGhhc2gyX2FueSA9IDA7XG4gXHRoYXNoMiA9IDA7XG5AQCAtOTk4LDggJiM0Mzs5OTksOSBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRpZiAoZmlyc3QpIHtcbi1cdFx0aWYgKHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fSBlbHNlIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uN2U5YWU5MzdjZmZhN2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTM5LDYgJiM0MzszOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXG4gXHRmaWJfdGVzdHMuc2ggXFxcbiBcdGZpbl9hY2tfbGF0LnNoIFxcXG4mIzQzO1x0Zm91X21jYXN0X2VuY2FwLnNoIFxcXG4gXHRmcV9iYW5kX3BrdGxpbWl0LnNoIFxcXG4gXHRncmVfZ3NvLnNoIFxcXG4gXHRncmVfaXB2Nl9sbGFkZHIuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ1xuaW5kZXggZTFjZTM1YzJhYmJlZjMuLjk2ZmZmY2E2NTQ3YzlhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ1xuQEAgLTM4LDYgJiM0MzszOCw4IEBAIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW1cbiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tXG4gQ09ORklHX0lQX1NDVFA9bVxuIENPTkZJR19JUFY2PXlcbiYjNDM7Q09ORklHX0lQVjZfRk9VPW1cbiYjNDM7Q09ORklHX0lQVjZfRk9VX1RVTk5FTD1tXG4gQ09ORklHX0lQVjZfR1JFPW1cbiBDT05GSUdfSVBWNl9JTEE9bVxuIENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MDIxMGQzOWZiYTMzZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxuQEAgLTAsMCAmIzQzOzEsMTcyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcbiYjNDM7IyB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC5cbiYjNDM7I1xuJiM0MzsjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXG4mIzQzOyMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0XG4mIzQzOyMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxuJiM0MzsjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXG4mIzQzOyMgdHVubmVsIHdpdGggYSBtdWx0aWNhc3QgcmVtb3RlIGFkZHJlc3MgYW5kIHNlbmRpbmcgcGluZyB0aHJvdWdoIGl0LlxuJiM0MzsjXG4mIzQzOyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcbiYjNDM7IyB0aGUgdW5pY2FzdCBwYXRoICh1ZHBbNl1fdW5pY2FzdF9yY3Zfc2tiKSwgc28gd2UgZGlzYWJsZSBpdCB0byBmb3JjZVxuJiM0MzsjIHBhY2tldHMgdGhyb3VnaCB0aGUgbXVsdGljYXN0IGRlbGl2ZXJ5IGZ1bmN0aW9uLlxuJiM0MztcbiYjNDM7c291cmNlIGxpYi5zaFxuJiM0MztcbiYjNDM7TlNFTkRFUj1cJiMzNDtcJiMzNDtcbiYjNDM7TlJFQ1Y9XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MztGT1VfUE9SVDQ9NDc5N1xuJiM0MztGT1VfUE9SVDY9NDc5OFxuJiM0MztNQ0FTVDQ9MjM5LjAuMC4xXG4mIzQzO01DQVNUNj1mZjBlOjoxXG4mIzQzO1xuJiM0MztUVU40X1M9MTkyLjE2OC45OS4xXG4mIzQzO1RVTjRfUj0xOTIuMTY4Ljk5LjJcbiYjNDM7VFVONl9TPTIwMDE6ZGI4Ojk5OjoxXG4mIzQzO1RVTjZfUj0yMDAxOmRiODo5OTo6MlxuJiM0MztcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRjbGVhbnVwX2FsbF9uc1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7c2V0dXBfY29tbW9uKCkge1xuJiM0MztcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcbiYjNDM7XG4mIzQzO1x0IyBDcmVhdGUgdmV0aCBwYWlyIGRpcmVjdGx5IGluc2lkZSBuYW1lc3BhY2VzIHRvIGF2b2lkIG5hbWVcbiYjNDM7XHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cbiYjNDM7XHRpcCBsaW5rIGFkZCB2ZXRoX3MgbmV0bnMgXCYjMzQ7JE5TRU5ERVJcJiMzNDsgdHlwZSB2ZXRoIFxcXG4mIzQzO1x0XHRwZWVyIG5hbWUgdmV0aF9yIG5ldG5zIFwmIzM0OyROUkVDVlwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBsaW5rIHNldCB2ZXRoX3MgdXBcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzZXQgdmV0aF9yIHVwXG4mIzQzO1xuJiM0MztcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyROUkVDVlwmIzM0OyBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXBfaXB2NCgpIHtcbiYjNDM7XHQjIElQdjQgRk9VIChDT05GSUdfTkVUX0ZPVSkgaXMgYnVpbHQgaW4gb24ga2VybmVscyBjb25maWd1cmVkIGZvclxuJiM0MztcdCMgdGhlc2UgdGVzdHMsIHNvIG5vIG1vZHVsZSBsb2FkIGlzIG5lZWRlZCBoZXJlLlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB2ZXRoX3NcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgMTAuMC4wLjIvMjQgZGV2IHZldGhfclxuJiM0MztcbiYjNDM7XHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRNQ0FTVDQvMzJcJiMzNDsgZGV2IHZldGhfciBhdXRvam9pblxuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfc1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfclxuJiM0MztcbiYjNDM7XHQjIFNlbmRlcjogR1JFVEFQIHdpdGggRk9VIGVuY2FwIChubyBGT1UgbGlzdGVuZXIgbmVlZGVkIG9uIFRYIHNpZGUpXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNFwmIzM0OyBsb2NhbCAxMC4wLjAuMSBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDRcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IFwmIzM0OyRNQ0FTVDRcJiMzNDtcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBsaW5rIHNldCBlb3VkcDQgdXBcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBhZGRyIGFkZCBcJiMzNDskVFVONF9TLzI0XCYjMzQ7IGRldiBlb3VkcDRcbiYjNDM7XG4mIzQzO1x0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICYjNDM7IEdSRVRBUFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5SRUNWXCYjMzQ7IGlwIGZvdSBhZGQgcG9ydCBcJiMzNDskRk9VX1BPUlQ0XCYjMzQ7IGlwcHJvdG8gNDdcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNFwmIzM0OyBsb2NhbCAxMC4wLjAuMiBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDRcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IFwmIzM0OyRNQ0FTVDRcJiMzNDtcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzZXQgZW91ZHA0IHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU40X1IvMjRcJiMzNDsgZGV2IGVvdWRwNFxuJiM0MztcbiYjNDM7XHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcbiYjNDM7XHQjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuXG4mIzQzO1x0bG9jYWwgcmVjdl9tYWNcbiYjNDM7XHRyZWN2X21hYz0kKGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIHNob3cgZW91ZHA0IHwgYXdrICYjMzk7L2V0aGVyL3twcmludCAkMn0mIzM5OylcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBuZWlnaCBhZGQgXCYjMzQ7JFRVTjRfUlwmIzM0OyBsbGFkZHIgXCYjMzQ7JHJlY3ZfbWFjXCYjMzQ7IGRldiBlb3VkcDRcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXBfaXB2NigpIHtcbiYjNDM7XHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IG9yIHRoZSBmb3U2IG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLlxuJiM0MztcdFsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRtb2Rwcm9iZSAtcSBmb3U2IHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIDIwMDE6ZGI4OjoxLzY0IGRldiB2ZXRoX3Mgbm9kYWRcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjIvNjQgZGV2IHZldGhfciBub2RhZFxuJiM0MztcbiYjNDM7XHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRNQ0FTVDYvMTI4XCYjMzQ7IGRldiB2ZXRoX3IgYXV0b2pvaW5cbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcbiYjNDM7XG4mIzQzO1x0IyBTZW5kZXI6IGlwNmdyZXRhcCB3aXRoIEZPVSBlbmNhcFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcXFxuJiM0MztcdFx0cmVtb3RlIFwmIzM0OyRNQ0FTVDZcJiMzNDsgbG9jYWwgMjAwMTpkYjg6OjEgXFxcbiYjNDM7XHRcdGVuY2FwIGZvdSBlbmNhcC1zcG9ydCBcJiMzNDskRk9VX1BPUlQ2XCYjMzQ7IGVuY2FwLWRwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgXFxcbiYjNDM7XHRcdGtleSA0MlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGxpbmsgc2V0IGVvdWRwNiB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU42X1MvNjRcJiMzNDsgZGV2IGVvdWRwNiBub2RhZFxuJiM0MztcbiYjNDM7XHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICYjNDM7IGlwNmdyZXRhcFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5SRUNWXCYjMzQ7IGlwIGZvdSBhZGQgcG9ydCBcJiMzNDskRk9VX1BPUlQ2XCYjMzQ7IGlwcHJvdG8gNDcgLTZcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNlwmIzM0OyBsb2NhbCAyMDAxOmRiODo6MiBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNlwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IDQyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2V0IGVvdWRwNiB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBhZGRyIGFkZCBcJiMzNDskVFVONl9SLzY0XCYjMzQ7IGRldiBlb3VkcDYgbm9kYWRcbiYjNDM7XG4mIzQzO1x0IyBTdGF0aWMgbmVpZ2ggb24gc2VuZGVyOiBuZWlnaGJvciBkaXNjb3ZlcnkgY2Fubm90IHRyYXZlcnNlIHRoZVxuJiM0MztcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbiYjNDM7XHRsb2NhbCByZWN2X21hY1xuJiM0MztcdHJlY3ZfbWFjPSQoaXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJiMzOTsvZXRoZXIve3ByaW50ICQyfSYjMzk7KVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IG5laWdoIGFkZCBcJiMzNDskVFVONl9SXCYjMzQ7IGxsYWRkciBcJiMzNDskcmVjdl9tYWNcJiMzNDsgZGV2IGVvdWRwNlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztnZXRfcnhfcGFja2V0cygpIHtcbiYjNDM7XHRsb2NhbCBkZXY9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IC1zIGxpbmsgc2hvdyBcJiMzNDskZGV2XCYjMzQ7IHwgYXdrICYjMzk7L1JYOi97Z2V0bGluZTsgcHJpbnQgJDJ9JiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cnVuX3BpbmdfdGVzdCgpIHtcbiYjNDM7XHRsb2NhbCBmYW1pbHk9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBkc3Q9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCBuYW1lPVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1x0bG9jYWwgY291bnQ9MTAwXG4mIzQzO1x0bG9jYWwgcnhfYmVmb3JlIHJ4X2FmdGVyIHJ4X2RlbHRhXG4mIzQzO1xuJiM0MztcdCMgV2FybXVwOiBsZXQgYW55IGluaXRpYWwgYnJvYWRjYXN0L05EIHRyYWZmaWMgc2V0dGxlXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlNFTkRFUlwmIzM0OyBwaW5nIFwmIzM0OyRmYW1pbHlcJiMzNDsgLWMgMSAtVyAxIFwmIzM0OyRkc3RcJiMzNDsgXFxcbiYjNDM7XHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdHNsZWVwIDFcbiYjNDM7XG4mIzQzO1x0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXCYjMzQ7JGRldlwmIzM0OylcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyROU0VOREVSXCYjMzQ7IHBpbmcgXCYjMzQ7JGZhbWlseVwmIzM0OyAtaSAwLjAxIC1jICRjb3VudCAtVyAxIFwmIzM0OyRkc3RcJiMzNDsgXFxcbiYjNDM7XHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdHNsZWVwIDFcbiYjNDM7XHRyeF9hZnRlcj0kKGdldF9yeF9wYWNrZXRzIFwmIzM0OyRkZXZcJiMzNDspXG4mIzQzO1xuJiM0MztcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDskcnhfZGVsdGFcJiMzNDsgLWdlIFwmIzM0OyRjb3VudFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRSRVQ9JGtzZnRfcGFzc1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdFJFVD0ka3NmdF9mYWlsXG4mIzQzO1x0ZmlcbiYjNDM7XHRsb2dfdGVzdCBcJiMzNDskbmFtZSAocmVjZWl2ZWQgJHJ4X2RlbHRhLyRjb3VudClcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c2V0dXBfY29tbW9uXG4mIzQzO3NldHVwX2lwdjRcbiYjNDM7cnVuX3BpbmdfdGVzdCAtNCBlb3VkcDQgXCYjMzQ7JFRVTjRfUlwmIzM0OyBcJiMzNDtGT1UvR1JFVEFQIElQdjQgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCYjMzQ7XG4mIzQzO1xuJiM0MztpZiBzZXR1cF9pcHY2OyB0aGVuXG4mIzQzO1x0cnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgXCYjMzQ7JFRVTjZfUlwmIzM0OyBcJiMzNDtGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRsb2dfdGVzdF9za2lwIFwmIzM0O0ZPVS9pcDZncmV0YXAgSVB2NiBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXRcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2V4aXQgXCYjMzQ7JEVYSVRfU1RBVFVTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7SVBWNl9GT1UmIzM0OywKICAgICYjMzQ7SVBWNl9GT1VfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0JST0FEQ0FTVCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZSBub3QgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgYnV0IHdlcmUgaW5zdGVhZCBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgKFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkpLiBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmVzdWJtaXNzaW9uIHBhdGggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyYzQzZjUwNWI5N2FmNGUyZWY3MDM5OWIzMTZlMGUzNDExYjU5ODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDEwOjM1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCA1OTI0OGE1OTM1OGNhNS4uZDNkZGNiZmM4NDc3MWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3VkcC5jCkBAIC0yNDc2LDYgJiM0MzsyNDc2LDcgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90OwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCWJvb2wgdXNlX2hhc2gyOwomIzQzOwlpbnQgcmV0OwogCiAJaGFzaDJfYW55ID0gMDsKIAloYXNoMiA9IDA7CkBAIC0yNTIwLDggJiM0MzsyNTIxLDkgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0KIAogCWlmIChmaXJzdCkgewotCQlpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgJmd0OyAwKQotCQkJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJCXJldCA9IHVkcF9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpOwomIzQzOwkJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIC1yZXQ7CiAJfSBlbHNlIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCV9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSUdOT1JFRE1VTFRJKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtOTQ5LDYgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJYm9vbCB1c2VfaGFzaDI7CiYjNDM7CWludCByZXQ7CiAKIAloYXNoMl9hbnkgPSAwOwogCWhhc2gyID0gMDsKQEAgLTk5OCw4ICYjNDM7OTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0KIAogCWlmIChmaXJzdCkgewotCQlpZiAodWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKSAmZ3Q7IDApCi0JCQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJcmV0ID0gdWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCV9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCkBAIC0zOSw2ICYjNDM7MzksNyBAQCBURVNUX1BST0dTIDo9IFwKIAlmaWJfcnVsZV90ZXN0cy5zaCBcCiAJZmliX3Rlc3RzLnNoIFwKIAlmaW5fYWNrX2xhdC5zaCBcCiYjNDM7CWZvdV9tY2FzdF9lbmNhcC5zaCBcCiAJZnFfYmFuZF9wa3RsaW1pdC5zaCBcCiAJZ3JlX2dzby5zaCBcCiAJZ3JlX2lwdjZfbGxhZGRyLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnCmluZGV4IGUxY2UzNWMyYWJiZWYzLi45NmZmZmNhNjU0N2M5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnCkBAIC0zOCw2ICYjNDM7MzgsOCBAQCBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfU0NUUD1tCiBDT05GSUdfSVBWNj15CiYjNDM7Q09ORklHX0lQVjZfRk9VPW0KJiM0MztDT05GSUdfSVBWNl9GT1VfVFVOTkVMPW0KIENPTkZJR19JUFY2X0dSRT1tCiBDT05GSUdfSVBWNl9JTEE9bQogQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcwMjEwZDM5ZmJhMzNkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaApAQCAtMCwwICYjNDM7MSwxNzIgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IHRoYXQgVURQIGVuY2Fwc3VsYXRpb24gKEZPVSkgY29ycmVjdGx5IGhhbmRsZXMgcGFja2V0IHJlc3VibWl0CiYjNDM7IyB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC4KJiM0MzsjCiYjNDM7IyBXaGVuIGEgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXQgYXJyaXZlcyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQLAomIzQzOyMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0CiYjNDM7IyBpdCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSByYXRoZXIgdGhhbiBjb25zdW1pbmcgaXQuCiYjNDM7IyBUaGlzIHRlc3QgdmVyaWZpZXMgYm90aCBJUHY0IGFuZCBJUHY2IHBhdGhzIGJ5IGNyZWF0aW5nIGEgRk9VL0dSRVRBUAomIzQzOyMgdHVubmVsIHdpdGggYSBtdWx0aWNhc3QgcmVtb3RlIGFkZHJlc3MgYW5kIHNlbmRpbmcgcGluZyB0aHJvdWdoIGl0LgomIzQzOyMKJiM0MzsjIFRoZSBlYXJseSBkZW11eCBvcHRpbWl6YXRpb24gY2FuIG1hc2sgdGhpcyBpc3N1ZSBieSByb3V0aW5nIHBhY2tldHMgdmlhCiYjNDM7IyB0aGUgdW5pY2FzdCBwYXRoICh1ZHBbNl1fdW5pY2FzdF9yY3Zfc2tiKSwgc28gd2UgZGlzYWJsZSBpdCB0byBmb3JjZQomIzQzOyMgcGFja2V0cyB0aHJvdWdoIHRoZSBtdWx0aWNhc3QgZGVsaXZlcnkgZnVuY3Rpb24uCiYjNDM7CiYjNDM7c291cmNlIGxpYi5zaAomIzQzOwomIzQzO05TRU5ERVI9JiMzNDsmIzM0OwomIzQzO05SRUNWPSYjMzQ7JiMzNDsKJiM0MzsKJiM0MztGT1VfUE9SVDQ9NDc5NwomIzQzO0ZPVV9QT1JUNj00Nzk4CiYjNDM7TUNBU1Q0PTIzOS4wLjAuMQomIzQzO01DQVNUNj1mZjBlOjoxCiYjNDM7CiYjNDM7VFVONF9TPTE5Mi4xNjguOTkuMQomIzQzO1RVTjRfUj0xOTIuMTY4Ljk5LjIKJiM0MztUVU42X1M9MjAwMTpkYjg6OTk6OjEKJiM0MztUVU42X1I9MjAwMTpkYjg6OTk6OjIKJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOwljbGVhbnVwX2FsbF9ucwomIzQzO30KJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO3NldHVwX2NvbW1vbigpIHsKJiM0MzsJc2V0dXBfbnMgTlNFTkRFUiBOUkVDVgomIzQzOwomIzQzOwkjIENyZWF0ZSB2ZXRoIHBhaXIgZGlyZWN0bHkgaW5zaWRlIG5hbWVzcGFjZXMgdG8gYXZvaWQgbmFtZQomIzQzOwkjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS4KJiM0MzsJaXAgbGluayBhZGQgdmV0aF9zIG5ldG5zICYjMzQ7JE5TRU5ERVImIzM0OyB0eXBlIHZldGggXAomIzQzOwkJcGVlciBuYW1lIHZldGhfciBuZXRucyAmIzM0OyROUkVDViYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBsaW5rIHNldCB2ZXRoX3MgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNldCB2ZXRoX3IgdXAKJiM0MzsKJiM0MzsJIyBTYW1lIHN5c2N0bCBjb250cm9scyBlYXJseSBkZW11eCBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LgomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JE5SRUNWJiMzNDsgc3lzY3RsIC13cSBuZXQuaXB2NC5pcF9lYXJseV9kZW11eD0wCiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2lwdjQoKSB7CiYjNDM7CSMgSVB2NCBGT1UgKENPTkZJR19ORVRfRk9VKSBpcyBidWlsdCBpbiBvbiBrZXJuZWxzIGNvbmZpZ3VyZWQgZm9yCiYjNDM7CSMgdGhlc2UgdGVzdHMsIHNvIG5vIG1vZHVsZSBsb2FkIGlzIG5lZWRlZCBoZXJlLgomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgYWRkciBhZGQgMTAuMC4wLjEvMjQgZGV2IHZldGhfcwomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3IKJiM0MzsKJiM0MzsJIyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlcgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkICYjMzQ7JE1DQVNUNC8zMiYjMzQ7IGRldiB2ZXRoX3IgYXV0b2pvaW4KJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgcm91dGUgYWRkIDIzOS4wLjAuMC84IGRldiB2ZXRoX3IKJiM0MzsKJiM0MzsJIyBTZW5kZXI6IEdSRVRBUCB3aXRoIEZPVSBlbmNhcCAobm8gRk9VIGxpc3RlbmVyIG5lZWRlZCBvbiBUWCBzaWRlKQomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDQmIzM0OyBsb2NhbCAxMC4wLjAuMSBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgXAomIzQzOwkJa2V5ICYjMzQ7JE1DQVNUNCYjMzQ7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBsaW5rIHNldCBlb3VkcDQgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGFkZHIgYWRkICYjMzQ7JFRVTjRfUy8yNCYjMzQ7IGRldiBlb3VkcDQKJiM0MzsKJiM0MzsJIyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICYjNDM7IEdSRVRBUAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JE5SRUNWJiMzNDsgaXAgZm91IGFkZCBwb3J0ICYjMzQ7JEZPVV9QT1JUNCYjMzQ7IGlwcHJvdG8gNDcKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXAomIzQzOwkJcmVtb3RlICYjMzQ7JE1DQVNUNCYjMzQ7IGxvY2FsIDEwLjAuMC4yIFwKJiM0MzsJCWVuY2FwIGZvdSBlbmNhcC1zcG9ydCAmIzM0OyRGT1VfUE9SVDQmIzM0OyBlbmNhcC1kcG9ydCAmIzM0OyRGT1VfUE9SVDQmIzM0OyBcCiYjNDM7CQlrZXkgJiMzNDskTUNBU1Q0JiMzNDsKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNldCBlb3VkcDQgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBhZGRyIGFkZCAmIzM0OyRUVU40X1IvMjQmIzM0OyBkZXYgZW91ZHA0CiYjNDM7CiYjNDM7CSMgU3RhdGljIG5laWdoIG9uIHNlbmRlcjogQVJQIHJlcGxpZXMgY2Fubm90IHRyYXZlcnNlIHRoZQomIzQzOwkjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuCiYjNDM7CWxvY2FsIHJlY3ZfbWFjCiYjNDM7CXJlY3ZfbWFjPSQoaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNob3cgZW91ZHA0IHwgYXdrICYjMzk7L2V0aGVyL3twcmludCAkMn0mIzM5OykKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IG5laWdoIGFkZCAmIzM0OyRUVU40X1ImIzM0OyBsbGFkZHIgJiMzNDskcmVjdl9tYWMmIzM0OyBkZXYgZW91ZHA0CiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2lwdjYoKSB7CiYjNDM7CSMgU2tpcCBjbGVhbmx5IGlmIElQdjYgb3IgdGhlIGZvdTYgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUuCiYjNDM7CVsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CW1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBhZGRyIGFkZCAyMDAxOmRiODo6MS82NCBkZXYgdmV0aF9zIG5vZGFkCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjIvNjQgZGV2IHZldGhfciBub2RhZAomIzQzOwomIzQzOwkjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgJiMzNDskTUNBU1Q2LzEyOCYjMzQ7IGRldiB2ZXRoX3IgYXV0b2pvaW4KJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IC02IHJvdXRlIGFkZCBmZjAwOjovOCBkZXYgdmV0aF9zCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3IKJiM0MzsKJiM0MzsJIyBTZW5kZXI6IGlwNmdyZXRhcCB3aXRoIEZPVSBlbmNhcAomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDYmIzM0OyBsb2NhbCAyMDAxOmRiODo6MSBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgXAomIzQzOwkJa2V5IDQyCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBsaW5rIHNldCBlb3VkcDYgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGFkZHIgYWRkICYjMzQ7JFRVTjZfUy82NCYjMzQ7IGRldiBlb3VkcDYgbm9kYWQKJiM0MzsKJiM0MzsJIyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyIChJUHY2KSAmIzQzOyBpcDZncmV0YXAKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUkVDViYjMzQ7IGlwIGZvdSBhZGQgcG9ydCAmIzM0OyRGT1VfUE9SVDYmIzM0OyBpcHByb3RvIDQ3IC02CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDYmIzM0OyBsb2NhbCAyMDAxOmRiODo6MiBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgXAomIzQzOwkJa2V5IDQyCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgJiMzNDskVFVONl9SLzY0JiMzNDsgZGV2IGVvdWRwNiBub2RhZAomIzQzOwomIzQzOwkjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlCiYjNDM7CSMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC4KJiM0MzsJbG9jYWwgcmVjdl9tYWMKJiM0MzsJcmVjdl9tYWM9JChpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJiMzOTsvZXRoZXIve3ByaW50ICQyfSYjMzk7KQomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbmVpZ2ggYWRkICYjMzQ7JFRVTjZfUiYjMzQ7IGxsYWRkciAmIzM0OyRyZWN2X21hYyYjMzQ7IGRldiBlb3VkcDYKJiM0Mzt9CiYjNDM7CiYjNDM7Z2V0X3J4X3BhY2tldHMoKSB7CiYjNDM7CWxvY2FsIGRldj0mIzM0OyQxJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyAtcyBsaW5rIHNob3cgJiMzNDskZGV2JiMzNDsgfCBhd2sgJiMzOTsvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0mIzM5OwomIzQzO30KJiM0MzsKJiM0MztydW5fcGluZ190ZXN0KCkgewomIzQzOwlsb2NhbCBmYW1pbHk9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZHN0PSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDQmIzM0OwomIzQzOwlsb2NhbCBjb3VudD0xMDAKJiM0MzsJbG9jYWwgcnhfYmVmb3JlIHJ4X2FmdGVyIHJ4X2RlbHRhCiYjNDM7CiYjNDM7CSMgV2FybXVwOiBsZXQgYW55IGluaXRpYWwgYnJvYWRjYXN0L05EIHRyYWZmaWMgc2V0dGxlCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlNFTkRFUiYjMzQ7IHBpbmcgJiMzNDskZmFtaWx5JiMzNDsgLWMgMSAtVyAxICYjMzQ7JGRzdCYjMzQ7IFwKJiM0MzsJCSZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJc2xlZXAgMQomIzQzOwomIzQzOwlyeF9iZWZvcmU9JChnZXRfcnhfcGFja2V0cyAmIzM0OyRkZXYmIzM0OykKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROU0VOREVSJiMzNDsgcGluZyAmIzM0OyRmYW1pbHkmIzM0OyAtaSAwLjAxIC1jICRjb3VudCAtVyAxICYjMzQ7JGRzdCYjMzQ7IFwKJiM0MzsJCSZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJc2xlZXAgMQomIzQzOwlyeF9hZnRlcj0kKGdldF9yeF9wYWNrZXRzICYjMzQ7JGRldiYjMzQ7KQomIzQzOwomIzQzOwlyeF9kZWx0YT0kKChyeF9hZnRlciAtIHJ4X2JlZm9yZSkpCiYjNDM7CiYjNDM7CWlmIFsgJiMzNDskcnhfZGVsdGEmIzM0OyAtZ2UgJiMzNDskY291bnQmIzM0OyBdOyB0aGVuCiYjNDM7CQlSRVQ9JGtzZnRfcGFzcwomIzQzOwllbHNlCiYjNDM7CQlSRVQ9JGtzZnRfZmFpbAomIzQzOwlmaQomIzQzOwlsb2dfdGVzdCAmIzM0OyRuYW1lIChyZWNlaXZlZCAkcnhfZGVsdGEvJGNvdW50KSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2NvbW1vbgomIzQzO3NldHVwX2lwdjQKJiM0MztydW5fcGluZ190ZXN0IC00IGVvdWRwNCAmIzM0OyRUVU40X1ImIzM0OyAmIzM0O0ZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXQmIzM0OwomIzQzOwomIzQzO2lmIHNldHVwX2lwdjY7IHRoZW4KJiM0MzsJcnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgJiMzNDskVFVONl9SJiMzNDsgJiMzNDtGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0JiMzNDsKJiM0MztlbHNlCiYjNDM7CWxvZ190ZXN0X3NraXAgJiMzNDtGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2V4aXQgJiMzNDskRVhJVF9TVEFUVVMmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVEUCBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC91ZHAuY2AgYW5kIGBuZXQvaXB2Ni91ZHAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgaW4gYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiAgRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbmQgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGljYXN0LgoKUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybmVkIGEgcG9zaXRpdmUgdmFsdWUgKGltcGx5aW5nIGFuIGVycm9yLCBJIGFzc3VtZSksIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHdvdWxkIGp1c3QgYGNvbnN1bWVfc2tiKHNrYilgLiBOb3csIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJldGAgdmFyaWFibGUgYW5kIGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUuIElmIGByZXRgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCAqcmV0dXJucyogYSBuZWdhdGVkIGByZXRgIChpbiBJUHY0KSBvciBqdXN0IGByZXRgIChpbiBJUHY2KS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nLgoKVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIHByb3BhZ2F0ZSBlcnJvciBjb25kaXRpb25zIGZyb20gdGhlIHF1ZXVpbmcgc3RhZ2UgdXAgdG8gdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBsYXllci4gSSYjMzk7bSBndWVzc2luZyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgc2lsZW50bHkgZHJvcHBpbmcgcGFja2V0cyBpbiBlcnJvciBjYXNlcywgYW5kIHRoaXMgcGF0Y2ggYWltcyB0byBtYWtlIHRoZSBlcnJvciBoYW5kbGluZyBtb3JlIGV4cGxpY2l0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHdlIHByb3BhZ2F0aW5nIHRoZXNlIGVycm9yIGNvZGVzPyAgV2hhdCBkbyB0aGVzZSBlcnJvciBjb2RlcyByZXByZXNlbnQ/IEl04oCZcyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGF0IHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYnV0IHdoYXRldmVyIHRoZXkgYXJlLCB0aGUgcGF0Y2ggaXMgY2xlYXJseSB0cnlpbmcgdG8gc2lnbmFsIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwgdGhhbiBhIHNpbXBsZSBkaXNjYXJkLgoKTGV0IG1lIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBhcmUgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyYjMzk7IHJldHVybiB2YWx1ZXMgYXJlIHVzZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYz0yNDQ4PWJvb2wgdWRwX3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjQ2NC0gKi9cbm5ldC9pcHY0L3VkcC5jOjI0NjU6c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdWRwLmMtMjQ2Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgdWRwaGRyICAqdWgsXG4tLVxubmV0L2lwdjQvdWRwLmM9MjU5MT1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI2NDktXHRpZiAocnQtXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpXG5uZXQvaXB2NC91ZHAuYzoyNjUwOlx0XHRyZXR1cm4gX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKG5ldCwgc2tiLCB1aCwgc2FkZHIsIGRhZGRyKTtcbm5ldC9pcHY0L3VkcC5jLTI2NTEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaC03LSMgV2hlbiBhIEZPVS1lbmNhcHN1bGF0ZWQgcGFja2V0IGFycml2ZXMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2g6ODojIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcigpIC8gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKCkgbXVzdCByZXN1Ym1pdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaC05LSMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGVjb2RpbmcgdGhlIFVEUCBSZWNlaXZlIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIGRvd24gdGhpcyBtdWx0aWNhc3QgZGVsaXZlcnkgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJldHVybiB2YWx1ZSBvZiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyBjcml0aWNhbCwgcmlnaHQ/IFRoYXQmIzM5O3Mgd2hhdCBgdWRwX3JjdmAgaXMgcGFzc2luZyBiYWNrLiBSaWdodCwgYHVkcF9yY3ZgIGlzIHRoZSBJUHY0IFVEUCByZWNlaXZlIGhhbmRsZXIsIHNvIGl0IG1ha2VzIHNlbnNlIGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBIb2xkIG9uLi4uIEkgbmVlZCB0byByZW1lbWJlciB3aGF0IGtpbmQgb2YgdHlwZSBgdWRwX3JjdmAgcmV0dXJucy4uLiBJdCByZXR1cm5zIGFuIGBpbnRgLiBPa2F5LCBnb3QgaXQuCgpUaW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZzogSSBuZWVkIHRvIG9wZW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCBgdWRwX3JjdmAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIEkmIzM5O2xsIHNlZSBob3cgdGhhdCByZXR1cm4gdmFsdWUgaXMgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZsb3cgaXMgZXNzZW50aWFsIHRvIG9wdGltaXplIFVEUCBwZXJmb3JtYW5jZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgYGludGAgc2lnbmlmaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB1ZHBfcmN2XFwoc3RydWN0IHNrX2J1ZmYgXFwqc2tiXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3VkcC5oPTQyMj12b2lkIHVkcDRfaHdjc3VtKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QpO1xuaW5jbHVkZS9uZXQvdWRwLmg6NDIzOmludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvdWRwLmgtNDI0LWludCB1ZHBfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTI1Njk9c3RhdGljIGludCB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNTkwLVxubmV0L2lwdjQvdWRwLmM6MjU5MTppbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdWRwLmMtMjU5Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgVURQIFJlY2VpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgdGhlIHJlY2VpdmluZyBlbmQgb2YgYSBVRFAgZGF0YWdyYW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGB1ZHBfcmN2YCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGV4YW1pbmUgaW4gYG5ldC9pcHY0L3VkcC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yLCBtb3JlIGFjY3VyYXRlbHksIHRoZSBwcmVkaWN0YWJsZSBwcm9jZXNzKSBvZiBoYW5kbGluZyBpbmNvbWluZyBVRFAgcGFja2V0cyByZWFsbHkgYmVnaW5zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZmxvdyBjb250cm9sLi4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTkxOlx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjI1OTI6XHR7XG4yNTkzOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTtcbjI1OTQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4yNTk1Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xuMjU5NjpcdFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcbjI1OTc6XHRcdF9fYmUzMiBzYWRkciwgZGFkZHI7XG4yNTk4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbjI1OTk6XHRcdGJvb2wgcmVmY291bnRlZDtcbjI2MDA6XHRcdGludCBkcm9wX3JlYXNvbjtcbjI2MDE6XHRcbjI2MDI6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4yNjAzOlx0XG4yNjA0Olx0XHQvKlxuMjYwNTpcdFx0ICogIFZhbGlkYXRlIHRoZSBwYWNrZXQuXG4yNjA2Olx0XHQgKi9cbjI2MDc6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG4yNjA4Olx0XHRcdGdvdG8gZHJvcDtcdFx0LyogTm8gc3BhY2UgZm9yIGhlYWRlci4gKi9cbjI2MDk6XHRcbjI2MTA6XHRcdHVoICAgPSB1ZHBfaGRyKHNrYik7XG4yNjExOlx0XHR1bGVuID0gbnRvaHModWgtXHUwMDNlbGVuKTtcbjI2MTI6XHRcdHNhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4yNjEzOlx0XHRkYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMjYxNDpcdFxuMjYxNTpcdFx0aWYgKHVsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4yNjE2Olx0XHRcdGdvdG8gc2hvcnRfcGFja2V0O1xuMjYxNzpcdFxuMjYxODpcdFx0aWYgKHVsZW4gXHUwMDNjIHNpemVvZigqdWgpKVxuMjYxOTpcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjA6XHRcbjI2MjE6XHRcdGlmICh1bGVuIFx1MDAzYyBza2ItXHUwMDNlbGVuKSB7XG4yNjIyOlx0XHRcdGlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCB1bGVuKSlcbjI2MjM6XHRcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjQ6XHRcbjI2MjU6XHRcdFx0dWggPSB1ZHBfaGRyKHNrYik7XG4yNjI2Olx0XHR9XG4yNjI3Olx0XG4yNjI4Olx0XHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXG4yNjI5Olx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjI2MzA6XHRcbjI2MzE6XHRcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cdTAwM2Vzb3VyY2UsIGRhZGRyLCB1aC1cdTAwM2VkZXN0LFxuMjYzMjpcdFx0XHRcdCAgICAgXHUwMDI2cmVmY291bnRlZCwgdWRwX2VoYXNoZm4pO1xuMjYzMzpcdFx0aWYgKElTX0VSUihzaykpXG4yNjM0Olx0XHRcdGdvdG8gbm9fc2s7XG4yNjM1Olx0XG4yNjM2Olx0XHRpZiAoc2spIHtcbjI2Mzc6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMjYzODpcdFx0XHRpbnQgcmV0O1xuMjYzOTpcdFxuMjY0MDpcdFx0XHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcbjI2NDE6XHRcdFx0XHR1ZHBfc2tfcnhfZHN0X3NldChzaywgZHN0KTtcbjI2NDI6XHRcbjI2NDM6XHRcdFx0cmV0ID0gdWRwX3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XG4yNjQ0Olx0XHRcdGlmIChyZWZjb3VudGVkKVxuMjY0NTpcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbjI2NDY6XHRcdFx0cmV0dXJuIHJldDtcbjI2NDc6XHRcdH1cbjI2NDg6XHRcbjI2NDk6XHRcdGlmIChydC1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcbjI2NTA6XHRcdFx0cmV0dXJuIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgdWgsIHNhZGRyLCBkYWRkcik7XG4yNjUxOlx0XG4yNjUyOlx0XHRzayA9IF9fdWRwNF9saWJfbG9va3VwX3NrYihza2IsIHVoLVx1MDAzZXNvdXJjZSwgdWgtXHUwMDNlZGVzdCk7XG4yNjUzOlx0XHRpZiAoc2spXG4yNjU0Olx0XHRcdHJldHVybiB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcbjI2NTU6XHRub19zazpcbjI2NTY6XHRcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxuMjY1NzpcdFx0XHRnb3RvIGRyb3A7XG4yNjU4Olx0XHRuZl9yZXNldF9jdChza2IpO1xuMjY1OTpcdFxuMjY2MDpcdFx0LyogTm8gc29ja2V0LiBEcm9wIHBhY2tldCBzaWxlbnRseSwgaWYgY2hlY2tzdW0gaXMgd3JvbmcgKi9cbjI2NjE6XHRcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4yNjYyOlx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjI2NjM6XHRcbjI2NjQ6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcbjI2NjU6XHRcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfTk9QT1JUUyk7XG4yNjY2Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xuMjY2NzpcdFxuMjY2ODpcdFx0LypcbjI2Njk6XHRcdCAqIEhtbS4gIFdlIGdvdCBhbiBVRFAgcGFja2V0IHRvIGEgcG9ydCB0byB3aGljaCB3ZVxuMjY3MDpcdFx0ICogZG9uJiMzOTt0IHdhbm5hIGxpc3Rlbi4gIElnbm9yZSBpdC5cbjI2NzE6XHRcdCAqL1xuMjY3MjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbjI2NzM6XHRcdHJldHVybiAwO1xuMjY3NDpcdFxuMjY3NTpcdHNob3J0X3BhY2tldDpcbjI2NzY6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fU01BTEw7XG4yNjc3Olx0XHRuZXRfZGJnX3JhdGVsaW1pdGVkKFwmIzM0O1VEUDogc2hvcnQgcGFja2V0OiBGcm9tICVwSTQ6JXUgJWQvJWQgdG8gJXBJNDoldVxcblwmIzM0OyxcbjI2Nzg6XHRcdFx0XHQgICAgXHUwMDI2c2FkZHIsIG50b2hzKHVoLVx1MDAzZXNvdXJjZSksXG4yNjc5Olx0XHRcdFx0ICAgIHVsZW4sIHNrYi1cdTAwM2VsZW4sXG4yNjgwOlx0XHRcdFx0ICAgIFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cdTAwM2VkZXN0KSk7XG4yNjgxOlx0XHRnb3RvIGRyb3A7XG4yNjgyOlx0XG4yNjgzOlx0Y3N1bV9lcnJvcjpcbjI2ODQ6XHRcdC8qXG4yNjg1Olx0XHQgKiBSRkMxMTIyOiBPSy4gIERpc2NhcmRzIHRoZSBiYWQgcGFja2V0IHNpbGVudGx5IChhcyBmYXIgYXNcbjI2ODY6XHRcdCAqIHRoZSBuZXR3b3JrIGlzIGNvbmNlcm5lZCwgYW55d2F5KSBhcyBwZXIgNC4xLjMuNCAoTVVTVCkuXG4yNjg3Olx0XHQgKi9cbjI2ODg6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1VEUF9DU1VNO1xuMjY4OTpcdFx0bmV0X2RiZ19yYXRlbGltaXRlZChcJiMzNDtVRFA6IGJhZCBjaGVja3N1bS4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbiAlZFxcblwmIzM0OyxcbjI2OTA6XHRcdFx0XHQgICAgXHUwMDI2c2FkZHIsIG50b2hzKHVoLVx1MDAzZXNvdXJjZSksIFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cdTAwM2VkZXN0KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgUmVjZWl2ZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHVkcF9yY3ZgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCBqdXN0IHJldHVybnMgd2hhdGV2ZXIgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZ2l2ZXMgaXQuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpcyBgdWRwX3JjdmAgYWN0dWFsbHkgKmNhbGxlZCo/IFJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzb21ldGhpbmcgbGlrZSBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Vg4oCmIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIHRoYXQgZ2VuZXJhbCB2aWNpbml0eS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KCk15IG5leHQgbW92ZSBpcyB0byBkaXZlIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYHVkcF9yY3ZgLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSB3aXRoIHRoYXQgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBjaGVja2luZz8gRmxvdyBjb250cm9sPyBJcyBpdCBjcml0aWNhbCBmb3IgcHJvcGVyIG11bHRpY2FzdCBkZWxpdmVyeT8gVW5kZXJzdGFuZGluZyB0aGUgYHVkcF9yY3ZgIGNhbGwgY2hhaW4gYW5kIGhvdyB0aGUgcmV0dXJuIHZhbHVlIGlzIGhhbmRsZWQgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIFVEUCByZWNlaXZlIHBhdGguIFRoaXMgbG9va3MgbGlrZSB0aGUgcGxhY2UgdG8gZm9jdXMgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRwX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC91ZHAuaD00MjI9dm9pZCB1ZHA0X2h3Y3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0KTtcbmluY2x1ZGUvbmV0L3VkcC5oOjQyMzppbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3VkcC5oLTQyNC1pbnQgdWRwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcbi0tXG5pbmNsdWRlL25ldC91ZHAuaD01Nzc9dm9pZCB1ZHB2Nl9lbmNhcF9lbmFibGUodm9pZCk7XG4tLVxuaW5jbHVkZS9uZXQvdWRwLmgtNTc5LVxuaW5jbHVkZS9uZXQvdWRwLmg6NTgwOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnVkcF9yY3Zfc2VnbWVudChzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC91ZHAuaC01ODEtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaXB2NClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTg4Mj1zdGF0aWMgaW50IF9faW5pdCBpbmV0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTkyNS1cdG5ldF9ob3RkYXRhLnVkcF9wcm90b2NvbCA9IChzdHJ1Y3QgbmV0X3Byb3RvY29sKSB7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTkyNjpcdFx0LmhhbmRsZXIgPVx0dWRwX3Jjdixcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTI3LVx0XHQuZXJyX2hhbmRsZXIgPVx0dWRwX2Vycixcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTE1MD1ib29sIGlwX2NhbGxfcmFfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTE4Ni1cbm5ldC9pcHY0L2lwX2lucHV0LmM6MTg3OklORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKikpO1xubmV0L2lwdjQvaXBfaW5wdXQuYy0xODgtSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jPTE4OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmMtMjA2LVx0XHR9XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIwNzpcdFx0cmV0ID0gSU5ESVJFQ1RfQ0FMTF8yKGlwcHJvdC1cdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMDgtXHRcdFx0XHQgICAgICBza2IpO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTE1MTA9dm9pZCB1ZHBfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTE1MjYtLyogYWxsIGhlYWQgc3RhdGVzIChkc3QsIHNrLCBuZiBjb25udHJhY2spIGV4Y2VwdCBza2IgZXh0ZW5zaW9ucyBhcmVcbm5ldC9pcHY0L3VkcC5jOjE1Mjc6ICogY2xlYXJlZCBieSB1ZHBfcmN2KCkuXG5uZXQvaXB2NC91ZHAuYy0xNTI4LSAqXG4tLVxubmV0L2lwdjQvdWRwLmM9MjQyMz1zdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDMyLVx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcbm5ldC9pcHY0L3VkcC5jOjI0MzM6XHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIHRydWUpO1xubmV0L2lwdjQvdWRwLmMtMjQzNC1cdHNrYl9saXN0X3dhbGtfc2FmZShzZWdzLCBza2IsIG5leHQpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yNTY5PXN0YXRpYyBpbnQgdWRwX3VuaWNhc3RfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwLmMtMjU5MC1cbm5ldC9pcHY0L3VkcC5jOjI1OTE6aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3VkcC5jLTI1OTIte1xuLS1cbm5ldC9pcHY2L3VkcC5jPTg3Nz1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTg4NS1cdF9fc2tiX3B1c2goc2tiLCAtc2tiX21hY19vZmZzZXQoc2tiKSk7XG5uZXQvaXB2Ni91ZHAuYzo4ODY6XHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIGZhbHNlKTtcbm5ldC9pcHY2L3VkcC5jLTg4Ny1cdHNrYl9saXN0X3dhbGtfc2FmZShzZWdzLCBza2IsIG5leHQpIHtcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTgxNj1zdGF0aWMgaW50IHNjdHBfY3RsX3NvY2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy04MzktXG5uZXQvc2N0cC9wcm90b2NvbC5jOjg0MDpzdGF0aWMgaW50IHNjdHBfdWRwX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg0MS17XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz04NDk9aW50IHNjdHBfdWRwX3NvY2tfc3RhcnQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmMtODY1LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSAxO1xubmV0L3NjdHAvcHJvdG9jb2wuYzo4NjY6XHR0dW5jZmcuZW5jYXBfcmN2ID0gc2N0cF91ZHBfcmN2O1xubmV0L3NjdHAvcHJvdG9jb2wuYy04NjctXHR0dW5jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IHNjdHBfdWRwX3Y0X2Vycjtcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg4Ny1cdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcbm5ldC9zY3RwL3Byb3RvY29sLmM6ODg4Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IHNjdHBfdWRwX3Jjdjtcbm5ldC9zY3RwL3Byb3RvY29sLmMtODg5LVx0dHVuY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBzY3RwX3VkcF92Nl9lcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyBVRFAgUGFja2V0IFJlLVN1Ym1pc3Npb24gTG9naWMqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gVGhpcyBgdWRwX3F1ZXVlX3Jjdl9za2JgIGZ1bmN0aW9uLi4uIGl0IHNlZW1zIHRvIGJlIHJldHVybmluZyBhIHBvc2l0aXZlIHZhbHVlIHdoZW4gaXQgKmVuY2Fwc3VsYXRlcyogdGhlIGluY29taW5nIHBhY2tldCBhbmQgbmVlZHMgaXQgdG8gYmUgcmVzdWJtaXR0ZWQuIFRoYXQmIzM5O3MuLi4gaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LgoKUmlnaHQsIHNvIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L3VkcC5jYCBhbmQgZGlnIGludG8gYHVkcF9xdWV1ZV9yY3Zfc2tiYC4gSSBuZWVkIHRvIHNlZSAqZXhhY3RseSogd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgcG9zaXRpdmUgcmV0dXJuLCB3aGF0IGNvbmRpdGlvbnMgYXJlIGJlaW5nIGNoZWNrZWQsIGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB0byB0aGUgcGFja2V0IHdoZW4gaXQmIzM5O3MgZmxhZ2dlZCBmb3IgcmVzdWJtaXNzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBoZXJlIGFuZCBob3cgaXQmIzM5O3MgYWZmZWN0aW5nIHRoZSBub3JtYWwgZGF0YWdyYW0gcHJvY2Vzc2luZy4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbXBhY3QgcGVyZm9ybWFuY2UgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgYmVoYXZpb3VyIGlzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiXFwoc3RydWN0IHNvY2sgXFwqc2ssIHN0cnVjdCBza19idWZmIFxcKnNrYlxcKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYz0yMzUwPXN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDIyLVxubmV0L2lwdjQvdWRwLmM6MjQyMzpzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3VkcC5jLTI0MjQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgVURQIFJlY2VpdmUgUXVldWUgRnVuY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdWRwX3F1ZXVlX3Jjdl9za2JgLiBBbHdheXMgZ29vZCB0byByZWZyZXNoIHRoZSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHBhdGgsIGFuZCB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgbnVhbmNlcy4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgaGVyZSwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgcGF0dGVybnM6IFNLQiBoYW5kbGluZywgc29ja2V0IGxvY2sgYWNxdWlzaXRpb24sIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiByZWFzc2VtYmx5IG9yIG9mZmxvYWQgY29uc2lkZXJhdGlvbnMsIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVjZWl2ZSBxdWV1ZSBpdHNlbGYsIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGNvbnRleHQgdmVyc3VzIHRhc2tsZXQgY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcmFjZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBhbmQgc3RhdGUgdXBkYXRlcy4gVGhpcyBpcyB3aGVyZSB0aG9zZSBzdWJ0bGUgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBhbmQgbG9jayBoaWVyYXJjaHkgdmlvbGF0aW9ucyB0ZW5kIHRvIHNuZWFrIGluLiBJIGV4cGVjdCB0byBzZWUgc29tZSBjbGV2ZXIgdHJpY2tzIGZvciBoYW5kbGluZyBVRFAmIzM5O3MgY29ubmVjdGlvbmxlc3MgbmF0dXJlIGFuZCBwb3NzaWJseSBzb21lIG9wdGltaXphdGlvbnMgbGV2ZXJhZ2luZyB0aGluZ3MgbGlrZSBjaGVja3N1bSBvZmZsb2FkLCBSU1MsIG9yIGV2ZW4gaGFyZHdhcmUgcmVjZWl2ZSBmaWx0ZXJzIGlmIHRoZSBOSUMgc3VwcG9ydHMgdGhlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MjM6XHRzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjI0MjQ6XHR7XG4yNDI1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwgKnNlZ3M7XG4yNDI2Olx0XHRpbnQgcmV0O1xuMjQyNzpcdFxuMjQyODpcdFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcbjI0Mjk6XHRcdFx0cmV0dXJuIHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcbjI0MzA6XHRcbjI0MzE6XHRcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHVkcF9za2JfY2IpIFx1MDAzZSBTS0JfR1NPX0NCX09GRlNFVCk7XG4yNDMyOlx0XHRfX3NrYl9wdXNoKHNrYiwgLXNrYl9tYWNfb2Zmc2V0KHNrYikpO1xuMjQzMzpcdFx0c2VncyA9IHVkcF9yY3Zfc2VnbWVudChzaywgc2tiLCB0cnVlKTtcbjI0MzQ6XHRcdHNrYl9saXN0X3dhbGtfc2FmZShzZWdzLCBza2IsIG5leHQpIHtcbjI0MzU6XHRcdFx0X19za2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xuMjQzNjpcdFxuMjQzNzpcdFx0XHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XG4yNDM4Olx0XHRcdHJldCA9IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcbjI0Mzk6XHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbjI0NDA6XHRcdFx0XHRpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBza2IsIHJldCk7XG4yNDQxOlx0XHR9XG4yNDQyOlx0XHRyZXR1cm4gMDtcbjI0NDM6XHR9XG4yNDQ0Olx0XG4yNDQ1Olx0LyogRm9yIFRDUCBzb2NrZXRzLCBza19yeF9kc3QgaXMgcHJvdGVjdGVkIGJ5IHNvY2tldCBsb2NrXG4yNDQ2Olx0ICogRm9yIFVEUCwgd2UgdXNlIHhjaGcoKSB0byBndWFyZCBhZ2FpbnN0IGNvbmN1cnJlbnQgY2hhbmdlcy5cbjI0NDc6XHQgKi9cbjI0NDg6XHRib29sIHVkcF9za19yeF9kc3Rfc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuMjQ0OTpcdHtcbjI0NTA6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm9sZDtcbjI0NTE6XHRcbjI0NTI6XHRcdGlmIChkc3RfaG9sZF9zYWZlKGRzdCkpIHtcbjI0NTM6XHRcdFx0b2xkID0gdW5yY3VfcG9pbnRlcih4Y2hnKFx1MDAyNnNrLVx1MDAzZXNrX3J4X2RzdCwgUkNVX0lOSVRJQUxJWkVSKGRzdCkpKTtcbjI0NTQ6XHRcdFx0ZHN0X3JlbGVhc2Uob2xkKTtcbjI0NTU6XHRcdFx0cmV0dXJuIG9sZCAhPSBkc3Q7XG4yNDU2Olx0XHR9XG4yNDU3Olx0XHRyZXR1cm4gZmFsc2U7XG4yNDU4Olx0fVxuMjQ1OTpcdFxuMjQ2MDpcdC8qXG4yNDYxOlx0ICpcdE11bHRpY2FzdHMgYW5kIGJyb2FkY2FzdHMgZ28gdG8gZWFjaCBsaXN0ZW5lci5cbjI0NjI6XHQgKlxuMjQ2MzpcdCAqXHROb3RlOiBjYWxsZWQgb25seSBmcm9tIHRoZSBCSCBoYW5kbGVyIGNvbnRleHQuXG4yNDY0Olx0ICovXG4yNDY1Olx0c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjQ2NjpcdFx0XHRcdFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcbjI0Njc6XHRcdFx0XHRcdCAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkcilcbjI0Njg6XHR7XG4yNDY5Olx0XHRzdHJ1Y3QgdWRwX3RhYmxlICp1ZHB0YWJsZSA9IG5ldC1cdTAwM2VpcHY0LnVkcF90YWJsZTtcbjI0NzA6XHRcdHVuc2lnbmVkIGludCBoYXNoMiwgaGFzaDJfYW55LCBvZmZzZXQ7XG4yNDcxOlx0XHR1bnNpZ25lZCBzaG9ydCBobnVtID0gbnRvaHModWgtXHUwMDNlZGVzdCk7XG4yNDcyOlx0XHRzdHJ1Y3Qgc29jayAqc2ssICpmaXJzdCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTM5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyBVRFAgUGFja2V0IEhhbmRsaW5nKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlc2UgVURQIHBhY2tldHMuIFNwZWNpZmljYWxseSwgSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IGB1ZHBfcXVldWVfcmN2X29uZV9za2JgIGhhdmluZyBzb21lIHNwZWNpYWwgYmVoYXZpb3IgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLiBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHBhY2tldCAqbmVlZHMqIHRvIGJlIHJlc3VibWl0dGVkLCBwcmVzdW1hYmx5IGJlY2F1c2UgaXQmIzM5O3MgZW5jYXBzdWxhdGVkIGluIHNvbWUgZmFzaGlvbi4gU28sIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSBleGFjdGx5IGhvdyBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCB3b3Jrcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaXRzIHJldHVybiB2YWx1ZSBzZW1hbnRpY3MsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IHJldHVybnMgcG9zaXRpdmUsIGFuZCB3aGF0IHRoYXQgcG9zaXRpdmUgdmFsdWUgc2lnbmlmaWVzIGluIHRlcm1zIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LiBFc3NlbnRpYWxseSwgSSBuZWVkIGEgZGV0YWlsZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHBhY2tldHMgYXJlIG1hbmFnZWQgdXBzdHJlYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNTA6XHRzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4yMzUxOlx0e1xuMjM1MjpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbjIzNTM6XHRcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xuMjM1NDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuMjM1NTpcdFxuMjM1NjpcdFx0LypcbjIzNTc6XHRcdCAqXHRDaGFyZ2UgaXQgdG8gdGhlIHNvY2tldCwgZHJvcHBpbmcgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwuXG4yMzU4Olx0XHQgKi9cbjIzNTk6XHRcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuMjM2MDpcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcbjIzNjE6XHRcdFx0Z290byBkcm9wO1xuMjM2MjpcdFx0fVxuMjM2MzpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbjIzNjQ6XHRcbjIzNjU6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnVkcF9lbmNhcF9uZWVkZWRfa2V5KSBcdTAwMjZcdTAwMjZcbjIzNjY6XHRcdCAgICBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfdHlwZSkpIHtcbjIzNjc6XHRcdFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuMjM2ODpcdFxuMjM2OTpcdFx0XHQvKlxuMjM3MDpcdFx0XHQgKiBUaGlzIGlzIGFuIGVuY2Fwc3VsYXRpb24gc29ja2V0IHNvIHBhc3MgdGhlIHNrYiB0b1xuMjM3MTpcdFx0XHQgKiB0aGUgc29ja2V0JiMzOTtzIHVkcF9lbmNhcF9yY3YoKSBob29rLiBPdGhlcndpc2UsIGp1c3RcbjIzNzI6XHRcdFx0ICogZmFsbCB0aHJvdWdoIGFuZCBwYXNzIHRoaXMgdXAgdGhlIFVEUCBzb2NrZXQuXG4yMzczOlx0XHRcdCAqIHVwLVx1MDAzZWVuY2FwX3JjdigpIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZTpcbjIzNzQ6XHRcdFx0ICogPTAgaWYgc2tiIHdhcyBzdWNjZXNzZnVsbHkgcGFzc2VkIHRvIHRoZSBlbmNhcFxuMjM3NTpcdFx0XHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXG4yMzc2Olx0XHRcdCAqIFx1MDAzZTAgaWYgc2tiIHNob3VsZCBiZSBwYXNzZWQgb24gdG8gVURQLlxuMjM3NzpcdFx0XHQgKiBcdTAwM2MwIGlmIHNrYiBzaG91bGQgYmUgcmVzdWJtaXR0ZWQgYXMgcHJvdG8gLU5cbjIzNzg6XHRcdFx0ICovXG4yMzc5Olx0XG4yMzgwOlx0XHRcdC8qIGlmIHdlJiMzOTtyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXG4yMzgxOlx0XHRcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cdTAwM2VlbmNhcF9yY3YpO1xuMjM4MjpcdFx0XHRpZiAoZW5jYXBfcmN2KSB7XG4yMzgzOlx0XHRcdFx0aW50IHJldDtcbjIzODQ6XHRcbjIzODU6XHRcdFx0XHQvKiBWZXJpZnkgY2hlY2tzdW0gYmVmb3JlIGdpdmluZyB0byBlbmNhcCAqL1xuMjM4NjpcdFx0XHRcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4yMzg3Olx0XHRcdFx0XHRnb3RvIGNzdW1fZXJyb3I7XG4yMzg4Olx0XG4yMzg5Olx0XHRcdFx0cmV0ID0gZW5jYXBfcmN2KHNrLCBza2IpO1xuMjM5MDpcdFx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4yMzkxOlx0XHRcdFx0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lOREFUQUdSQU1TKTtcbjIzOTI6XHRcdFx0XHRcdHJldHVybiAtcmV0O1xuMjM5MzpcdFx0XHRcdH1cbjIzOTQ6XHRcdFx0fVxuMjM5NTpcdFxuMjM5NjpcdFx0XHQvKiBGQUxMVEhST1VHSCAtLSBpdCYjMzk7cyBhIFVEUCBQYWNrZXQgKi9cbjIzOTc6XHRcdH1cbjIzOTg6XHRcbjIzOTk6XHRcdHByZWZldGNoKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgVURQIE11bHRpY2FzdCBEZWxpdmVyeSBQYXRoKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgcmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgaWYgYGVuY2FwX3JjdmAgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLiBUaGF0IG5lZ2F0aXZlIHZhbHVlIGZyb20gYGVuY2FwX3JjdmAgc2lnbmlmaWVzIHRoYXQgdGhlIGBza2JgIG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wsIHNheSwgYC1OYC4gU28gd2hlbiBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCByZXR1cm5zIGEgdmFsdWUsIGxldCYjMzk7cyBjYWxsIGl0IGAtcmV0YCwgIHRoYXQgdmFsdWUsIHdoZW4gcmUtaW50ZXJwcmV0ZWQsIGlzIGFjdHVhbGx5ICpwb3NpdGl2ZSogYW5kIGluZGljYXRlcyBhIHJlc3VibWlzc2lvbiBpcyBuZWVkZWQgZm9yIHByb3RvY29sIGByZXRgLgoKTm93LCBkaWdnaW5nIGEgYml0IGRlZXBlciBpbnRvIGB1ZHBfcXVldWVfcmN2X3NrYmAsIEkgc2VlIHRoYXQgaXQgdXNlcyBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCBpZiB0aGUgR1NPIGlzbiYjMzk7dCB1bmV4cGVjdGVkLiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0ICBgdWRwX3F1ZXVlX3Jjdl9za2JgIGl0c2VsZiByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUgaWYgdGhlIHBhY2tldCBtdXN0IGJlIHJlc3VibWl0dGVkLgoKTG9va2luZyBhdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBuZXh0LiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIGl0IGFwcGVhcnMgdG8gcmV0dXJuIGAtcmV0YCB3aGVuIGB1ZHBfcXVldWVfcmN2X3NrYmAgcmV0dXJucyBhIHBvc2l0aXZlIGByZXRgLiBUaGlzIG1lYW5zIHRoYXQgaWYgcmVzdWJtaXNzaW9uIGlzIHJlcXVpcmVkIChpbmRpY2F0ZWQgYnkgYHVkcF9xdWV1ZV9yY3Zfc2tiYCByZXR1cm5pbmcgYCZndDsgMGApLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuIEZpbmFsbHksIGB1ZHBfcmN2YCBpdHNlbGYgcmV0dXJucyB3aGF0ZXZlciBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyB1bmRlcnN0YW5kaW5nLCBzbyBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGluIGBuZXQvaXB2NC9pcF9pbnB1dC5jYCB0byBzZWUgaG93IHRoZSB3aG9sZSBwcm9jZXNzIGZpdHMgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg5Olx0dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcbiAxOTA6XHR7XG4gMTkxOlx0XHRjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sICppcHByb3Q7XG4gMTkyOlx0XHRpbnQgcmF3LCByZXQ7XG4gMTkzOlx0XG4gMTk0Olx0cmVzdWJtaXQ6XG4gMTk1Olx0XHRyYXcgPSByYXdfbG9jYWxfZGVsaXZlcihza2IsIHByb3RvY29sKTtcbiAxOTY6XHRcbiAxOTc6XHRcdGlwcHJvdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X3Byb3Rvc1twcm90b2NvbF0pO1xuIDE5ODpcdFx0aWYgKGlwcHJvdCkge1xuIDE5OTpcdFx0XHRpZiAoIWlwcHJvdC1cdTAwM2Vub19wb2xpY3kpIHtcbiAyMDA6XHRcdFx0XHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuIDIwMTpcdFx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsXG4gMjAyOlx0XHRcdFx0XHRcdFx0IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XG4gMjAzOlx0XHRcdFx0XHRyZXR1cm47XG4gMjA0Olx0XHRcdFx0fVxuIDIwNTpcdFx0XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gMjA2Olx0XHRcdH1cbiAyMDc6XHRcdFx0cmV0ID0gSU5ESVJFQ1RfQ0FMTF8yKGlwcHJvdC1cdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxuIDIwODpcdFx0XHRcdFx0ICAgICAgc2tiKTtcbiAyMDk6XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDIxMDpcdFx0XHRcdHByb3RvY29sID0gLXJldDtcbiAyMTE6XHRcdFx0XHRnb3RvIHJlc3VibWl0O1xuIDIxMjpcdFx0XHR9XG4gMjEzOlx0XHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7XG4gMjE0Olx0XHR9IGVsc2Uge1xuIDIxNTpcdFx0XHRpZiAoIXJhdykge1xuIDIxNjpcdFx0XHRcdGlmICh4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiAyMTc6XHRcdFx0XHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5VTktOT1dOUFJPVE9TKTtcbiAyMTg6XHRcdFx0XHRcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILFxuIDIxOTpcdFx0XHRcdFx0XHQgIElDTVBfUFJPVF9VTlJFQUNILCAwKTtcbiAyMjA6XHRcdFx0XHR9XG4gMjIxOlx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9OT1BST1RPKTtcbiAyMjI6XHRcdFx0fSBlbHNlIHtcbiAyMjM6XHRcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xuIDIyNDpcdFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gMjI1Olx0XHRcdH1cbiAyMjY6XHRcdH1cbiAyMjc6XHR9XG4gMjI4Olx0XG4gMjI5Olx0c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAyMzA6XHR7XG4gMjMxOlx0XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuIDIzMjpcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xuIDIzMzpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PTUVNKTtcbiAyMzQ6XHRcdFx0cmV0dXJuIDA7XG4gMjM1Olx0XHR9XG4gMjM2Olx0XG4gMjM3Olx0XHRza2JfY2xlYXJfZGVsaXZlcnlfdGltZShza2IpO1xuIDIzODpcdFx0X19za2JfcHVsbChza2IsIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjU4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQcm90b2NvbCBEZWxpdmVyeSBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGNoZWNrcyBpZiB0aGUgcmV0dXJuIHZhbHVlLCBgcmV0YCwgaXMgbGVzcyB0aGFuIHplcm8uIElmIGl0ICppcyosIHRoZW4gaXQmIzM5O3MgaW50ZXJwcmV0aW5nIHRoYXQgbmVnYXRpdmUgdmFsdWUuIFRoZSBjb2RlIHNldHMgYHByb3RvY29sYCB0byB0aGUgKmFic29sdXRlIHZhbHVlKiBvZiBgcmV0YCwgZWZmZWN0aXZlbHkgaW52ZXJ0aW5nIGl0LCBhbmQgdGhlbiBqdW1wcyB0byB0aGUgYHJlc3VibWl0YCBsYWJlbC4gU28sIGlmIGEgZnVuY3Rpb24gbGlrZSBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCB3ZXJlIHRvIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLCBzcGVjaWZpY2FsbHkgYSBuZWdhdGl2ZSB2YWx1ZSB0aGF0JiMzOTtzIHRoZSBuZWdhdGl2ZSBvZiBhIHBvc2l0aXZlIHByb3RvY29sIG51bWJlciAobWVhbmluZyBpdCByZXR1cm5zIGAtcmV0YCwgd2hlcmUgYHJldCAmZ3Q7IDBgIGlzIHRoZSBwcm90b2NvbCBudW1iZXIpLCB0aGF0IG5lZ2F0aXZlIHJldHVybiB3aWxsIGNvcnJlY3RseSB0cmlnZ2VyIHRoZSByZXN1Ym1pc3Npb24gcGF0aCB3aXRoaW4gYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4gVGhlIHdob2xlIHN5c3RlbSBzZWVtcyB3ZWxsIGRlc2lnbmVkLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGlzIGlzIGNvbnNpc3RlbnQgYWNyb3NzIElQdjQgYW5kIElQdjYuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBJUHY2IGVxdWl2YWxlbnQsIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIEkgaGF2ZSB0byBjb25maXJtIHRoaXMgc2FtZSBsb2dpYyBob2xkcyB0cnVlIGZvciBJUHY2IHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwdjYuaD0xMDg3PWludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9pcHY2Lmg6MTA4ODp2b2lkIGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEwODktXHRcdFx0ICAgICAgYm9vbCBoYXZlX2ZpbmFsKTtcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0zOTg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNDAyLSAqL1xubmV0L2lwdjYvaXA2X2lucHV0LmM6NDAzOnZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDQtXHRcdFx0ICAgICAgYm9vbCBoYXZlX2ZpbmFsKVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTMzLVx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjUzNDpcdGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShuZXQsIHNrYiwgMCwgZmFsc2UpO1xubmV0L2lwdjYvaXA2X2lucHV0LmMtNTM1LVxuLS1cbm5ldC9pcHY2L3VkcC5jPTg3Nz1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTg5Mi1cdFx0aWYgKHJldCBcdTAwM2UgMClcbm5ldC9pcHY2L3VkcC5jOjg5MzpcdFx0XHRpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3UoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgc2tiLCByZXQsXG5uZXQvaXB2Ni91ZHAuYy04OTQtXHRcdFx0XHRcdFx0IHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YDoKCioqQW5hbHl6aW5nIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgc2l0dWF0ZWQuICYjMzQ7aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1JiMzNDsuLi4gdGhpcyBzY3JlYW1zIElQdjYgcHJvdG9jb2wgZGVsaXZlcnksIGxpa2VseSBpbnZvbHZpbmcgUmVhZC1Db3B5IFVwZGF0ZSAoUkNVKSBmb3IgY29uY3VycmVuY3kgc2FmZXR5LiBLbm93aW5nIHRoZSBjb250ZXh0IGlzIGNydWNpYWwsIHNvIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSB0YWdnaW5nIHRoaXMgYXMgYSBjb3JlIG5ldHdvcmsgZnVuY3Rpb24sIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgcmVjZXB0aW9uIG9yIGZvcndhcmRpbmcgYXQgYSBwcmV0dHkgZnVuZGFtZW50YWwgbGV2ZWwuIFRoZSAmIzM0O1JDVSYjMzQ7IHBhcnQgaXMgYSBnb29kIHNpZ24g4oCTIGl0IHN1Z2dlc3RzIHRoZXkgYXJlIHRyeWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IGFsbG93aW5nIGNvbmN1cnJlbnQgcmVhZHMsIHdoaWxlIHVwZGF0ZXMgKGFuZCBtb2RpZmljYXRpb25zKSBhcmUgaGFuZGxlZCBpbiBhIHNlcGFyYXRlIHBoYXNlZCBtYW5uZXIgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24uIE1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSAqaG93KiB0aGV5JiMzOTtyZSB1c2luZyBSQ1UsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwcm90ZWN0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzLiBJcyBpdCBhIHF1ZXVlLCBoYXNoIHRhYmxlLCBhIGxvb2t1cD8gTGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDM6XHR2b2lkIGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLFxuIDQwNDpcdFx0XHRcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcbiA0MDU6XHR7XG4gNDA2Olx0XHRpbnQgZXh0aGRyX2NudCA9IElQNkNCKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlNLQl9IT1BCWUhPUCA/IDEgOiAwO1xuIDQwNzpcdFx0Y29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sICppcHByb3Q7XG4gNDA4Olx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIDQwOTpcdFx0dW5zaWduZWQgaW50IG5ob2ZmO1xuIDQxMDpcdFx0U0tCX0RSKHJlYXNvbik7XG4gNDExOlx0XHRib29sIHJhdztcbiA0MTI6XHRcbiA0MTM6XHRcdC8qXG4gNDE0Olx0XHQgKlx0UGFyc2UgZXh0ZW5zaW9uIGhlYWRlcnNcbiA0MTU6XHRcdCAqL1xuIDQxNjpcdFxuIDQxNzpcdHJlc3VibWl0OlxuIDQxODpcdFx0aWRldiA9IGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpO1xuIDQxOTpcdFx0bmhvZmYgPSBJUDZDQihza2IpLVx1MDAzZW5ob2ZmO1xuIDQyMDpcdFx0aWYgKCFoYXZlX2ZpbmFsKSB7XG4gNDIxOlx0XHRcdGlmICghcHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSkpXG4gNDIyOlx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQyMzpcdFx0XHRuZXh0aGRyID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYilbbmhvZmZdO1xuIDQyNDpcdFx0fVxuIDQyNTpcdFxuIDQyNjpcdHJlc3VibWl0X2ZpbmFsOlxuIDQyNzpcdFx0cmF3ID0gcmF3Nl9sb2NhbF9kZWxpdmVyKHNrYiwgbmV4dGhkcik7XG4gNDI4Olx0XHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfcHJvdG9zW25leHRoZHJdKTtcbiA0Mjk6XHRcdGlmIChpcHByb3QpIHtcbiA0MzA6XHRcdFx0aW50IHJldDtcbiA0MzE6XHRcbiA0MzI6XHRcdFx0aWYgKGhhdmVfZmluYWwpIHtcbiA0MzM6XHRcdFx0XHRpZiAoIShpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSkge1xuIDQzNDpcdFx0XHRcdFx0LyogT25jZSB3ZSYjMzk7dmUgc2VlbiBhIGZpbmFsIHByb3RvY29sIGRvbiYjMzk7dFxuIDQzNTpcdFx0XHRcdFx0ICogYWxsb3cgZW5jYXBzdWxhdGlvbiBvbiBhbnkgbm9uLWZpbmFsXG4gNDM2Olx0XHRcdFx0XHQgKiBvbmVzLiBUaGlzIGFsbG93cyBmb28gaW4gVURQIGVuY2Fwc3VsYXRpb25cbiA0Mzc6XHRcdFx0XHRcdCAqIHRvIHdvcmsuXG4gNDM4Olx0XHRcdFx0XHQgKi9cbiA0Mzk6XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0NDA6XHRcdFx0XHR9XG4gNDQxOlx0XHRcdH0gZWxzZSBpZiAoaXBwcm90LVx1MDAzZWZsYWdzIFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkge1xuIDQ0MjpcdFx0XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XG4gNDQzOlx0XHRcdFx0aW50IHNkaWYgPSBpbmV0Nl9zZGlmKHNrYik7XG4gNDQ0Olx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiA0NDU6XHRcbiA0NDY6XHRcdFx0XHQvKiBPbmx5IGRvIHRoaXMgb25jZSBmb3IgZmlyc3QgZmluYWwgcHJvdG9jb2wgKi9cbiA0NDc6XHRcdFx0XHRoYXZlX2ZpbmFsID0gdHJ1ZTtcbiA0NDg6XHRcbiA0NDk6XHRcbiA0NTA6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA0NTE6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA0NTI6XHRcdFx0XHRoZHIgPSBpcHY2X2hkcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgdGVsbGluZyBteXNlbGYgdG8gYWN0dWFsbHkgKnJlYWQqIHRoZSByZXN0IG9mIHRoZSBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBmdW5jdGlvbi4gTm8gc2tpbW1pbmcsIG5vIGFzc3VtcHRpb25zLCBqdXN0IGEgdGhvcm91Z2gsIGxpbmUtYnktbGluZSBleGFtaW5hdGlvbi4gVGhpcyBpc24mIzM5O3QgdGhlIGtpbmQgb2YgZnVuY3Rpb24geW91IGNhbiBqdXN0IGdsYW5jZSBhdDsgdGhlcmUgYXJlIGxpa2VseSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGFuZCB0aW1pbmcgaXNzdWVzIGluIHBsYXkgdGhhdCByZXF1aXJlIGEgZGVlcCB1bmRlcnN0YW5kaW5nLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBkaWcgaW4gYW5kIHJlYWxseSAqdW5kZXJzdGFuZCogd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgSVB2NiBwcm90b2NvbCBzdGFjay4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IFJDVS1yZWxhdGVkIGZ1bmN0aW9ucyBjYW4gaGF2ZSBjb21wbGV4IGxvY2tpbmcgYW5kIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gY29uc2lkZXJhdGlvbnMsIHNvIEkmIzM5O20gYnJhY2luZyBteXNlbGYgZm9yIHRoYXQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTM6XHRcbiA0NTQ6XHRcdFx0XHQvKiBza2ItXHUwMDNlZGV2IHBhc3NlZCBtYXkgYmUgbWFzdGVyIGRldiBmb3IgdnJmcy4gKi9cbiA0NTU6XHRcdFx0XHRpZiAoc2RpZikge1xuIDQ1NjpcdFx0XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBzZGlmKTtcbiA0NTc6XHRcdFx0XHRcdGlmICghZGV2KVxuIDQ1ODpcdFx0XHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4gNDU5Olx0XHRcdFx0fSBlbHNlIHtcbiA0NjA6XHRcdFx0XHRcdGRldiA9IHNrYi1cdTAwM2VkZXY7XG4gNDYxOlx0XHRcdFx0fVxuIDQ2MjpcdFxuIDQ2MzpcdFx0XHRcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFx1MDAyNmhkci1cdTAwM2VkYWRkcikgXHUwMDI2XHUwMDI2XG4gNDY0Olx0XHRcdFx0ICAgICFpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgXHUwMDI2aGRyLVx1MDAzZWRhZGRyLFxuIDQ2NTpcdFx0XHRcdFx0XHRcdCBcdTAwMjZoZHItXHUwMDNlc2FkZHIpIFx1MDAyNlx1MDAyNlxuIDQ2NjpcdFx0XHRcdCAgICAhaXB2Nl9pc19tbGQoc2tiLCBuZXh0aGRyLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpKSB7XG4gNDY3Olx0XHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5BRERSRVJST1JTKTtcbiA0Njg6XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0Njk6XHRcdFx0XHR9XG4gNDcwOlx0XHRcdH1cbiA0NzE6XHRcdFx0aWYgKCEoaXBwcm90LVx1MDAzZWZsYWdzIFx1MDAyNiBJTkVUNl9QUk9UT19OT1BPTElDWSkpIHtcbiA0NzI6XHRcdFx0XHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuIDQ3MzpcdFx0XHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFhGUk1fUE9MSUNZKTtcbiA0NzQ6XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0NzU6XHRcdFx0XHR9XG4gNDc2Olx0XHRcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiA0Nzc6XHRcdFx0fVxuIDQ3ODpcdFxuIDQ3OTpcdFx0XHRyZXQgPSBJTkRJUkVDVF9DQUxMXzIoaXBwcm90LVx1MDAzZWhhbmRsZXIsIHRjcF92Nl9yY3YsIHVkcHY2X3JjdixcbiA0ODA6XHRcdFx0XHRcdCAgICAgIHNrYik7XG4gNDgxOlx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiA0ODI6XHRcdFx0XHRpZiAoaXBwcm90LVx1MDAzZWZsYWdzIFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkge1xuIDQ4MzpcdFx0XHRcdFx0LyogTm90IGFuIGV4dGVuc2lvbiBoZWFkZXIsIG1vc3QgbGlrZWx5IFVEUFxuIDQ4NDpcdFx0XHRcdFx0ICogZW5jYXBzdWxhdGlvbi4gVXNlIHJldHVybiB2YWx1ZSBhcyBuZXh0aGRyXG4gNDg1Olx0XHRcdFx0XHQgKiBwcm90b2NvbCBub3QgbmhvZmYgKHdoaWNoIHByZXN1bWFibHkgaXNcbiA0ODY6XHRcdFx0XHRcdCAqIG5vdCBzZXQgYnkgaGFuZGxlcikuXG4gNDg3Olx0XHRcdFx0XHQgKi9cbiA0ODg6XHRcdFx0XHRcdG5leHRoZHIgPSByZXQ7XG4gNDg5Olx0XHRcdFx0XHRnb3RvIHJlc3VibWl0X2ZpbmFsO1xuIDQ5MDpcdFx0XHRcdH0gZWxzZSB7XG4gNDkxOlx0XHRcdFx0XHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCYjNDM7JiM0MzsgXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpIHtcbiA0OTI6XHRcdFx0XHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIElQVjZfVE9PX01BTllfRVhUSERSUyk7XG4gNDkzOlx0XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0OTQ6XHRcdFx0XHRcdH1cbiA0OTU6XHRcdFx0XHRcdGdvdG8gcmVzdWJtaXQ7XG4gNDk2Olx0XHRcdFx0fVxuIDQ5NzpcdFx0XHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gNDk4Olx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7XG4gNDk5Olx0XHRcdH1cbiA1MDA6XHRcdH0gZWxzZSB7XG4gNTAxOlx0XHRcdGlmICghcmF3KSB7XG4gNTAyOlx0XHRcdFx0aWYgKHhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUHY2IFBhY2tldCBEZWxpdmVyeSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQdjYgY29kZSBhbmQgc29tZXRoaW5nJiMzOTtzIGNhdWdodCBteSBleWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBoYXMgdGhpcyBleHBlY3RhdGlvbjogaXQgbmVlZHMgYHJldCAmZ3Q7IDBgIHRvIHRyaWdnZXIgYSByZXN1Ym1pdC4gSW50ZXJlc3RpbmcuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGlzIGByZXRgIGNvbWVzIGZyb20uIEFoYSEgVGhlIGZ1bmN0aW9uIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIHJldHVybnMgdGhpcyBgcmV0YCB2YWx1ZS4gVGhpcyBzdWdnZXN0cyB0aGF0IGByZXRgIGlzIGNvbWluZyBmcm9tIGEgZG93bnN0cmVhbSBmdW5jdGlvbiwgYW5kIGluIHBhcnRpY3VsYXIsIHRoYXQgdGhpcyBgcmV0YCB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIHJlc3VibWl0IGlzIHJlcXVpcmVkLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmYWN0b3JzIGltcGFjdCB0aGlzIHJldHVybiB2YWx1ZS4KCk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHJldGAgdmFsdWUgaXMuIEl0IGFwcGVhcnMgdG8gYmUgdGllZCB0byBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd29ya3MuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2Ni91ZHAuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgdWRwdjZfcXVldWVfcmN2X3NrYmAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBxdWV1ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODc3Olx0c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA4Nzg6XHR7XG4gODc5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwgKnNlZ3M7XG4gODgwOlx0XHRpbnQgcmV0O1xuIDg4MTpcdFxuIDg4MjpcdFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcbiA4ODM6XHRcdFx0cmV0dXJuIHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xuIDg4NDpcdFxuIDg4NTpcdFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcbiA4ODY6XHRcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgZmFsc2UpO1xuIDg4NzpcdFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xuIDg4ODpcdFx0XHRfX3NrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XG4gODg5Olx0XG4gODkwOlx0XHRcdHVkcF9wb3N0X3NlZ21lbnRfZml4X2NzdW0oc2tiKTtcbiA4OTE6XHRcdFx0cmV0ID0gdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG4gODkyOlx0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4gODkzOlx0XHRcdFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KGRldl9uZXQoc2tiLVx1MDAzZWRldiksIHNrYiwgcmV0LFxuIDg5NDpcdFx0XHRcdFx0XHRcdCB0cnVlKTtcbiA4OTU6XHRcdH1cbiA4OTY6XHRcdHJldHVybiAwO1xuIDg5NzpcdH1cbiA4OTg6XHRcbiA4OTk6XHRzdGF0aWMgYm9vbCBfX3VkcF92Nl9pc19tY2FzdF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIDkwMDpcdFx0XHRcdFx0ICAgX19iZTE2IGxvY19wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLFxuIDkwMTpcdFx0XHRcdFx0ICAgX19iZTE2IHJtdF9wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLFxuIDkwMjpcdFx0XHRcdFx0ICAgaW50IGRpZiwgaW50IHNkaWYsIHVuc2lnbmVkIHNob3J0IGhudW0pXG4gOTAzOlx0e1xuIDkwNDpcdFx0Y29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuIDkwNTpcdFxuIDkwNjpcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuIDkwNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTA4Olx0XG4gOTA5Olx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2V1ZHBfcG9ydF9oYXNoICE9IGhudW0gfHxcbiA5MTA6XHRcdCAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYgfHxcbiA5MTE6XHRcdCAgICAoaW5ldC1cdTAwM2VpbmV0X2Rwb3J0IFx1MDAyNlx1MDAyNiBpbmV0LVx1MDAzZWluZXRfZHBvcnQgIT0gcm10X3BvcnQpIHx8XG4gOTEyOlx0XHQgICAgKCFpcHY2X2FkZHJfYW55KFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSBcdTAwMjZcdTAwMjZcbiA5MTM6XHRcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2c2stXHUwMDNlc2tfdjZfZGFkZHIsIHJtdF9hZGRyKSkgfHxcbiA5MTQ6XHRcdCAgICAhdWRwX3NrX2JvdW5kX2Rldl9lcShuZXQsIFJFQURfT05DRShzay1cdTAwM2Vza19ib3VuZF9kZXZfaWYpLCBkaWYsIHNkaWYpIHx8XG4gOTE1Olx0XHQgICAgKCFpcHY2X2FkZHJfYW55KFx1MDAyNnNrLVx1MDAzZXNrX3Y2X3Jjdl9zYWRkcikgXHUwMDI2XHUwMDI2XG4gOTE2Olx0XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNnNrLVx1MDAzZXNrX3Y2X3Jjdl9zYWRkciwgbG9jX2FkZHIpKSlcbiA5MTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDkxODpcdFx0aWYgKCFpbmV0Nl9tY19jaGVjayhzaywgbG9jX2FkZHIsIHJtdF9hZGRyKSlcbiA5MTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDkyMDpcdFx0cmV0dXJuIHRydWU7XG4gOTIxOlx0fVxuIDkyMjpcdFxuIDkyMzpcdHN0YXRpYyB2b2lkIHVkcDZfY3N1bV96ZXJvX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4gOTI0Olx0e1xuIDkyNTpcdFx0LyogUkZDIDI0NjAgc2VjdGlvbiA4LjEgc2F5cyB0aGF0IHdlIFNIT1VMRCBsb2dcbiA5MjY6XHRcdCAqIHRoaXMgZXJyb3IuIFdlbGwsIGl0IGlzIHJlYXNvbmFibGUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipVRFB2NiBSZXN1Ym1pc3Npb24gTG9naWMgLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBjbGlja2VkLiBJIHdhcyBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIHRoZSBJUHY2IFVEUCBjb2RlLCBidXQgSSB0aGluayBJIHJlbWVtYmVyIHNvbWV0aGluZyBpbXBvcnRhbnQuIFdhc24mIzM5O3QgaXQgdGhlIGNhc2UgdGhhdCBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGJlaGF2ZXMgbGlrZSBpdHMgSVB2NCBjb3VudGVycGFydCwgc3BlY2lmaWNhbGx5IHJldHVybmluZyBhIHZhbHVlICpncmVhdGVyIHRoYW4gemVybyogaWYgdGhlIFNLQiBuZWVkcyB0byBiZSByZXN1Ym1pdHRlZD8gSXQmIzM5O3MgdGhhdCBpbmRpY2F0b3Igd2UmIzM5O3JlIGFmdGVyLCByaWdodD8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCYjMzk7cyByZXR1cm4gdmFsdWUgaXMgdGhlIGtleSBzaWduYWwgd2UmIzM5O3JlIGxvb2tpbmcgZm9yLCBqdXN0IGFzIGl0IGlzIGluIHRoZSBJUHY0IGltcGxlbWVudGF0aW9uLiBCZXR0ZXIgdG8gYmUgcHJlY2lzZSBhbmQgcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uIHRvIGVsaW1pbmF0ZSBhbnkgYW1iaWd1aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiXFwoc3RydWN0IHNvY2sgXFwqc2ssIHN0cnVjdCBza19idWZmIFxcKnNrYlxcKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYz03NzI9c3RhdGljIGludCBfX3VkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTgwNS1cbm5ldC9pcHY2L3VkcC5jOjgwNjpzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3VkcC5jLTgwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIHJlY2VpdmluZyBhIHNpbmdsZSBTS0IgKFNvY2tldCBCdWZmZXIpIHdpdGhpbiB0aGUgSVB2NiBVRFAgY29udGV4dC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHBhcnNpbmcgd2hhdCBJIGV4cGVjdCB0byBmaW5kLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljOiB0aGUgaW50YWtlIG9mIHRoZSBkYXRhLCBhbnkgY3J1Y2lhbCBjaGVja3Mgb24gdGhlIHBhY2tldCBoZWFkZXJzIChzb3VyY2UvZGVzdGluYXRpb24gcG9ydHMsIGxlbmd0aHMsIGNoZWNrc3VtcyDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyksIGFuZCBob3cgaXQmIzM5O3MgdGhlbiBxdWV1ZWQgb3IgcHJvY2Vzc2VkIGZ1cnRoZXIgd2l0aGluIHRoZSBJUHY2IFVEUCBzdGFjay4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMg4oCTIGFyZSB0aGVyZSBsb2NrcyBpbnZvbHZlZCwgYXJlIHRoaW5ncyBhdG9taWM/IFNpbmNlIGl0JiMzOTtzIGEgJiMzNDtxdWV1ZSYjMzQ7IGZ1bmN0aW9uLCBJIGFzc3VtZSB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmUsIGxpa2VseSBhIGxpbmtlZCBsaXN0IG9yIHNpbWlsYXIsIGludm9sdmVkIGluIGhvbGRpbmcgcGFja2V0cyB0aGF0IGhhdmVuJiMzOTt0IGJlZW4gZnVsbHkgaGFuZGxlZCB5ZXQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmUgKGxpa2VseSBgc3RydWN0IHNvY2tgKSBhbmQgd2hhdCByb2xlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWlnaHQgcGxheSBoZXJlLCBpZiBhbnkuIEkmIzM5O2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBxdWV1ZSBpcyBmdWxsPyBXaGF0IGlmIGNoZWNrc3VtIHZhbGlkYXRpb24gZmFpbHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEkgY2FuIGlkZW50aWZ5IHF1aWNrbHksIGxpa2UgYnVmZmVyIG92ZXJmbG93cyBvciBpc3N1ZXMgd2l0aCBtYWxmb3JtZWQgcGFja2V0cz8gQW5kIGZpbmFsbHksIGdpdmVuIHRoaXMgaXMgSVB2NiwgSSB3aWxsIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IGNhcGFiaWxpdGllcy4gTXkgZXhwZXJ0IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQsIGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGJhZGx5IGltcGxlbWVudGVkLCB0aGVuIHRoZSB3aG9sZSBzeXN0ZW0gd2lsbCBiZSBleHBvc2VkIHRvIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDY6XHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA4MDc6XHR7XG4gODA4Olx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuIDgwOTpcdFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4gODEwOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gODExOlx0XG4gODEyOlx0XHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiA4MTM6XHRcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG4gODE0Olx0XHRcdGdvdG8gZHJvcDtcbiA4MTU6XHRcdH1cbiA4MTY6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gODE3Olx0XG4gODE4Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZ1ZHB2Nl9lbmNhcF9uZWVkZWRfa2V5KSBcdTAwMjZcdTAwMjZcbiA4MTk6XHRcdCAgICBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfdHlwZSkpIHtcbiA4MjA6XHRcdFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIDgyMTpcdFxuIDgyMjpcdFx0XHQvKlxuIDgyMzpcdFx0XHQgKiBUaGlzIGlzIGFuIGVuY2Fwc3VsYXRpb24gc29ja2V0IHNvIHBhc3MgdGhlIHNrYiB0b1xuIDgyNDpcdFx0XHQgKiB0aGUgc29ja2V0JiMzOTtzIHVkcF9lbmNhcF9yY3YoKSBob29rLiBPdGhlcndpc2UsIGp1c3RcbiA4MjU6XHRcdFx0ICogZmFsbCB0aHJvdWdoIGFuZCBwYXNzIHRoaXMgdXAgdGhlIFVEUCBzb2NrZXQuXG4gODI2Olx0XHRcdCAqIHVwLVx1MDAzZWVuY2FwX3JjdigpIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZTpcbiA4Mjc6XHRcdFx0ICogPTAgaWYgc2tiIHdhcyBzdWNjZXNzZnVsbHkgcGFzc2VkIHRvIHRoZSBlbmNhcFxuIDgyODpcdFx0XHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXG4gODI5Olx0XHRcdCAqIFx1MDAzZTAgaWYgc2tiIHNob3VsZCBiZSBwYXNzZWQgb24gdG8gVURQLlxuIDgzMDpcdFx0XHQgKiBcdTAwM2MwIGlmIHNrYiBzaG91bGQgYmUgcmVzdWJtaXR0ZWQgYXMgcHJvdG8gLU5cbiA4MzE6XHRcdFx0ICovXG4gODMyOlx0XG4gODMzOlx0XHRcdC8qIGlmIHdlJiMzOTtyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXG4gODM0Olx0XHRcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cdTAwM2VlbmNhcF9yY3YpO1xuIDgzNTpcdFx0XHRpZiAoZW5jYXBfcmN2KSB7XG4gODM2Olx0XHRcdFx0aW50IHJldDtcbiA4Mzc6XHRcbiA4Mzg6XHRcdFx0XHQvKiBWZXJpZnkgY2hlY2tzdW0gYmVmb3JlIGdpdmluZyB0byBlbmNhcCAqL1xuIDgzOTpcdFx0XHRcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4gODQwOlx0XHRcdFx0XHRnb3RvIGNzdW1fZXJyb3I7XG4gODQxOlx0XG4gODQyOlx0XHRcdFx0cmV0ID0gZW5jYXBfcmN2KHNrLCBza2IpO1xuIDg0MzpcdFx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gODQ0Olx0XHRcdFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XG4gODQ1Olx0XHRcdFx0XHRyZXR1cm4gLXJldDtcbiA4NDY6XHRcdFx0XHR9XG4gODQ3Olx0XHRcdH1cbiA4NDg6XHRcbiA4NDk6XHRcdFx0LyogRkFMTFRIUk9VR0ggLS0gaXQmIzM5O3MgYSBVRFAgUGFja2V0ICovXG4gODUwOlx0XHR9XG4gODUxOlx0XG4gODUyOlx0XHRwcmVmZXRjaChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbiA4NTM6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoc2stXHUwMDNlc2tfZmlsdGVyKSBcdTAwMjZcdTAwMjZcbiA4NTQ6XHRcdCAgICB1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG4gODU1Olx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVURQdjYgTXVsdGljYXN0IERlbGl2ZXJ5IFJlLWV4YW1pbmF0aW9uKioKCk9rYXksIHNvIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaGFuZHMgYmFjayBhIG5lZ2F0aXZlIHJldHVybiBjb2RlIHdoZW4gYGVuY2FwX3JjdmAgZmFpbHMsIHdoaWNoIG1lYW5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgVGhlcmVmb3JlLCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gaW1wbGllcyB0aGUgcGFja2V0IG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkLCBnb3QgaXQuIE5vdyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAgYW5kLCBzcGVjaWZpY2FsbHksIHRoYXQgaW5pdGlhbCBgaWYgKGZpcnN0KWAgYmxvY2suICBXZSBoYXZlIGByZXQgPSB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpO2AgYW5kIHRoZW4sIGNydWNpYWxseSwgYGlmIChyZXQgJmd0OyAwKSByZXR1cm4gcmV0O2AuICBSaWdodCwgdGhhdCBtZWFucyB0aGUgcmV0dXJuIGNvZGUgZGlyZWN0bHkgcHJvcGFnYXRlcyB1cHN0cmVhbS4gQnV0IHdhaXQsIHNpbmNlIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIHJldHVybnMgYHJldGAsIHdoaWNoIGNvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGVuIGl0JiMzOTtzIGRpcmVjdGx5IHJlc3VibWl0dGluZyB0aGUgcGFja2V0IHRvIHRoZSBzdGFjay4gIEkgbmVlZCB0byBjaGVjayBob3cgYHVkcHY2X3JjdmAgaGFuZGxlcyB0aGlzIGluIGBuZXQvaXB2Ni91ZHAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB1ZHB2Nl9yY3ZcXChzdHJ1Y3Qgc2tfYnVmZiBcXCpza2JcXCkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmM9MTAzNz1zdGF0aWMgaW50IHVkcDZfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTEwNjgtXG5uZXQvaXB2Ni91ZHAuYzoxMDY5OklORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3VkcC5jLTEwNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHVkcHY2X3JjdmAgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0IG9mIHRoZSBJUHY2IFVEUCByZWNlaXZlciBwcm9jZXNzIHRob3JvdWdobHkuIE15IGV4cGVydGlzZSBpcyBpbiBuZXR3b3JraW5nLCBhbmQgSSYjMzk7dmUgc2VlbiBhIGxvdCBvZiBVRFAgaW1wbGVtZW50YXRpb25zLCBidXQgZXZlcnkgb25lIGhhcyBpdHMgbnVhbmNlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGZyYWdtZW50YXRpb24sIGNoZWNrc3VtIHZhbGlkYXRpb24sIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVwcGVyLWxheWVyIHByb3RvY29scy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMsIHJlYXNzZW1ibHkgb2YgZnJhZ21lbnRlZCBwYWNrZXRzIGFuZCBpZiBpdCBpbXBsZW1lbnRzIGFueSBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcy4gVGhlIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgc2hvdWxkIG1ha2UgdGhlIGZ1bmN0aW9uYWxpdHkgY2xlYXIuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93IGFuZCBjcml0aWNhbCBzZWN0aW9ucy4gSSBleHBlY3QgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHJvYnVzdCBhcHByb2FjaCB0byBwb3RlbnRpYWwgbWFsaWNpb3VzIHRyYWZmaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjk6XHRJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4xMDcwOlx0e1xuMTA3MTpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4xMDcyOlx0XHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAqZGFkZHI7XG4xMDczOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuMTA3NDpcdFx0c3RydWN0IHNvY2sgKnNrID0gTlVMTDtcbjEwNzU6XHRcdHN0cnVjdCB1ZHBoZHIgKnVoO1xuMTA3NjpcdFx0Ym9vbCByZWZjb3VudGVkO1xuMTA3NzpcdFx0dTMyIHVsZW4gPSAwO1xuMTA3ODpcdFxuMTA3OTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSlcbjEwODA6XHRcdFx0Z290byBkaXNjYXJkO1xuMTA4MTpcdFxuMTA4MjpcdFx0c2FkZHIgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyO1xuMTA4MzpcdFx0ZGFkZHIgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMTA4NDpcdFx0dWggPSB1ZHBfaGRyKHNrYik7XG4xMDg1Olx0XG4xMDg2Olx0XHR1bGVuID0gbnRvaHModWgtXHUwMDNlbGVuKTtcbjEwODc6XHRcdGlmICh1bGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuMTA4ODpcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjEwODk6XHRcbjEwOTA6XHRcdC8qIENoZWNrIGZvciBqdW1ibyBwYXlsb2FkICovXG4xMDkxOlx0XHRpZiAodWxlbiA9PSAwKVxuMTA5MjpcdFx0XHR1bGVuID0gc2tiLVx1MDAzZWxlbjtcbjEwOTM6XHRcbjEwOTQ6XHRcdGlmICh1bGVuIFx1MDAzYyBzaXplb2YoKnVoKSlcbjEwOTU6XHRcdFx0Z290byBzaG9ydF9wYWNrZXQ7XG4xMDk2Olx0XG4xMDk3Olx0XHRpZiAodWxlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikge1xuMTA5ODpcdFx0XHRpZiAocHNrYl90cmltX3Jjc3VtKHNrYiwgdWxlbikpXG4xMDk5Olx0XHRcdFx0Z290byBzaG9ydF9wYWNrZXQ7XG4xMTAwOlx0XG4xMTAxOlx0XHRcdHNhZGRyID0gXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbjExMDI6XHRcdFx0ZGFkZHIgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMTEwMzpcdFx0XHR1aCA9IHVkcF9oZHIoc2tiKTtcbjExMDQ6XHRcdH1cbjExMDU6XHRcbjExMDY6XHRcdGlmICh1ZHA2X2NzdW1faW5pdChza2IsIHVoKSlcbjExMDc6XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuMTEwODpcdFxuMTEwOTpcdFx0LyogQ2hlY2sgaWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgZS5nLiBkdWUgdG8gZWFybHkgZGVtdXggKi9cbjExMTA6XHRcdHNrID0gaW5ldDZfc3RlYWxfc29jayhuZXQsIHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBzYWRkciwgdWgtXHUwMDNlc291cmNlLCBkYWRkciwgdWgtXHUwMDNlZGVzdCxcbjExMTE6XHRcdFx0XHQgICAgICBcdTAwMjZyZWZjb3VudGVkLCB1ZHA2X2VoYXNoZm4pO1xuMTExMjpcdFx0aWYgKElTX0VSUihzaykpXG4xMTEzOlx0XHRcdGdvdG8gbm9fc2s7XG4xMTE0Olx0XG4xMTE1Olx0XHRpZiAoc2spIHtcbjExMTY6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMTExNzpcdFx0XHRpbnQgcmV0O1xuMTExODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcHJvdG9jb2wgYW5hbHlzaXMuCgoqKkRpdmluZyBCYWNrIGludG8gYHVkcHY2X3JjdmAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHN0b3AgZm9yIGEgbW9tZW50IGFuZCBnbyBiYWNrIHRvIHJlYWRpbmcgdGhlIHJlc3Qgb2YgYHVkcHY2X3JjdmAuIEnigJl2ZSBiZWVuIGFuYWx5emluZyBpdCBmb3IgYSB3aGlsZSBub3csIGFuZCBpdOKAmXMgaW1wb3J0YW50IHRvIHN0YXkgZm9jdXNlZCwgcmV2aWV3IHRoZSBjb250ZXh0LCBhbmQgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdy4gVGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZXRoaW5nIEkgbWlzc2VkIG9yIG5lZWQgdG8gcmUtZXZhbHVhdGUgaW4gbGlnaHQgb2YgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgZml0cyB3aXRoaW4gdGhlIG92ZXJhbGwgSVB2NiBVRFAgcmVjZWl2aW5nIHByb2Nlc3MuIE5lZWQgdG8gY2FyZWZ1bGx5IHJldHJhY2UgdGhlIHN0ZXBzIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IGdvdHRlbiBsb3N0IGluIHRoZSBkZXRhaWxzLCBvciBtaXNzZWQgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIGZvciBhbm90aGVyIHBhc3MgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExOTpcdFx0XHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcbjExMjA6XHRcdFx0XHR1ZHA2X3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XG4xMTIxOlx0XG4xMTIyOlx0XHRcdGlmICghdWgtXHUwMDNlY2hlY2sgXHUwMDI2XHUwMDI2ICF1ZHBfZ2V0X25vX2NoZWNrNl9yeChzaykpIHtcbjExMjM6XHRcdFx0XHRpZiAocmVmY291bnRlZClcbjExMjQ6XHRcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbjExMjU6XHRcdFx0XHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xuMTEyNjpcdFx0XHR9XG4xMTI3Olx0XG4xMTI4Olx0XHRcdHJldCA9IHVkcDZfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcbjExMjk6XHRcdFx0aWYgKHJlZmNvdW50ZWQpXG4xMTMwOlx0XHRcdFx0c29ja19wdXQoc2spO1xuMTEzMTpcdFx0XHRyZXR1cm4gcmV0O1xuMTEzMjpcdFx0fVxuMTEzMzpcdFxuMTEzNDpcdFx0LypcbjExMzU6XHRcdCAqXHRNdWx0aWNhc3QgcmVjZWl2ZSBjb2RlXG4xMTM2Olx0XHQgKi9cbjExMzc6XHRcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGRhZGRyKSlcbjExMzg6XHRcdFx0cmV0dXJuIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgc2FkZHIsIGRhZGRyKTtcbjExMzk6XHRcbjExNDA6XHRcdC8qIFVuaWNhc3QgKi9cbjExNDE6XHRcdHNrID0gX191ZHA2X2xpYl9sb29rdXBfc2tiKHNrYiwgdWgtXHUwMDNlc291cmNlLCB1aC1cdTAwM2VkZXN0KTtcbjExNDI6XHRcdGlmIChzaykge1xuMTE0MzpcdFx0XHRpZiAoIXVoLVx1MDAzZWNoZWNrIFx1MDAyNlx1MDAyNiAhdWRwX2dldF9ub19jaGVjazZfcngoc2spKVxuMTE0NDpcdFx0XHRcdGdvdG8gcmVwb3J0X2NzdW1fZXJyb3I7XG4xMTQ1Olx0XHRcdHJldHVybiB1ZHA2X3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XG4xMTQ2Olx0XHR9XG4xMTQ3Olx0bm9fc2s6XG4xMTQ4Olx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xuMTE0OTpcdFxuMTE1MDpcdFx0aWYgKCF1aC1cdTAwM2VjaGVjaylcbjExNTE6XHRcdFx0Z290byByZXBvcnRfY3N1bV9lcnJvcjtcbjExNTI6XHRcbjExNTM6XHRcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKVxuMTE1NDpcdFx0XHRnb3RvIGRpc2NhcmQ7XG4xMTU1Olx0XHRuZl9yZXNldF9jdChza2IpO1xuMTE1NjpcdFxuMTE1NzpcdFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbjExNTg6XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuMTE1OTpcdFxuMTE2MDpcdFx0X19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfTk9QT1JUUyk7XG4xMTYxOlx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDApO1xuMTE2MjpcdFxuMTE2MzpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG4xMTY0Olx0XHRyZXR1cm4gMDtcbjExNjU6XHRcbjExNjY6XHRzaG9ydF9wYWNrZXQ6XG4xMTY3Olx0XHRpZiAocmVhc29uID09IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKVxuMTE2ODpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMzkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFN0YWNrIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxvZ2ljLiBgdWRwdjZfcmN2YCBoYW5kcyBvZmYgaXRzIHJldHVybiB2YWx1ZSB0byBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gVGhlbiwgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAgY29ycmVjdGx5IGNoZWNrcyBpZiB0aGF0IHJldHVybiB2YWx1ZSwgYHJldGAsIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCByZXN1Ym1pdHMgdGhlIHBhY2tldCBpZiBpdCBpcy4gU28gdGhlIGZhY3QgdGhhdCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyByZXR1cm5pbmcgYSBwb3NpdGl2ZSBgcmV0YCBpcyBrZXkgYW5kIHRyaWdnZXJzIHRoZSBleHBlY3RlZCByZXN1Ym1pc3Npb24uIEdvb2QuCgpUaGlzIHBhdGNoLCBmcm9tIHdoYXQgSSBnYXRoZXIsIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBmdW5jdGlvbmFsIGRlZmljaWVuY3kgaW4gdGhlIGNvcmUgVURQIG11bHRpY2FzdCBkZWxpdmVyeSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNwZWNpZmljYWxseSwgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQcyB3ZXJlbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcGFzc2VkIGRvd24gdG8gdGhlaXIgaW5uZXIgcHJvdG9jb2xzLCBsaWtlIEdSRS4gVGhleSB3ZXJlIGdldHRpbmcgZHJvcHBlZCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIGJ1Zy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0ICphYnNvbHV0ZWx5KiB3YXJyYW50cyBzZXJpb3VzIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBuZWVkcyB0byBiZSBmdXp6ZWQuIFRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucywgb2J2aW91c2x5LCBhcmUgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBUaGVzZSBhcmUgdGhlIGNoYW5nZWQgZnVuY3Rpb25zIGFuZCBhcmUgbXkgcHJpbWFyeSB0YXJnZXRzIGZvciBgRm9jdXNTeW1ib2xzYC4KCk5leHQsIEkgbmVlZCB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmlnaHQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaGUgdGVzdCBzY3JpcHQgcmVmZXJlbmNlcyBgQ09ORklHX05FVF9GT1VgLiBIbW0sIHRoZSBzY3JpcHQgc2VlbXMgdG8gc3VnZ2VzdCBgQ09ORklHX05FVF9GT1VgIGlzIGJ1aWx0LWluLiBCdXQgdGhlIGNvbmZpZyBmaWxlIHNldHMgYENPTkZJR19JUFY2X0ZPVT1tYCBhbmQgYENPTkZJR19JUFY2X0ZPVV9UVU5ORUw9bWAuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgaG93IEZPVSBpcyBjb25maWd1cmVkIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9GT1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMjAtXG5uZXQvaXB2NC9LY29uZmlnOjMyMTpjb25maWcgTkVUX0ZPVVxubmV0L2lwdjQvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtJUDogRm9vIChJUCBwcm90b2NvbHMpIG92ZXIgVURQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMjktXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cdGJvb2wgXCYjMzQ7SVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIElQdjYgb3ZlciBVRFAgVHVubmVsIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgQ09ORklHX0lQVjZfRk9VYC4gSXQmIzM5O3MgYSBrZXkgaW5kaWNhdG9yLiBJZiB0aGlzIGlzIGVuYWJsZWQsIHRoZW4gd2UmIzM5O3JlIHNldCB1cCB0byBoYW5kbGUgSVB2NiB0cmFmZmljIGVuY2Fwc3VsYXRlZCB3aXRoaW4gVURQIHR1bm5lbHMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIG9mdGVuIGEgcHJlcmVxdWlzaXRlIGZvciBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbnMsIHBvdGVudGlhbGx5IGludm9sdmluZyBzb21ldGhpbmcgbGlrZSBJUHY2IG92ZXIgYSBuZXR3b3JrIHRoYXQgb25seSBuYXRpdmVseSBzdXBwb3J0cyBJUHY0LCBvciBwZXJoYXBzIHRvIGltcGxlbWVudCBhIFZQTiBzb2x1dGlvbi4gU28sIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGZlYXR1cmUgaXMgZW5hYmxlZC4gT3RoZXJ3aXNlLCB0aGUgYmVoYXZpb3IgSSBhbSBleHBlY3RpbmcgbWlnaHQgbm90IHdvcmsgYXMgaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X0ZPVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTIxMD1jb25maWcgSVBWNl9HUkVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQzMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGBDT05GSUdfTkVUX0ZPVWAgLSB0aGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUHY0LCByaWdodD8mIzM0OyBNeSBtZW1vcnkgaXMgam9nZ2luZywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRvIGdldCB0byB0aG9zZSBtb2RpZmllZCBjb2RlIHNlY3Rpb25zLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBVRFAgbXVsdGljYXN0IHJlY2VwdGlvbiBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LgoKTm93LCB0byB0cmlnZ2VyIHRoYXQgc3BlY2lmaWMgYHJldCAmZ3Q7IDBgIHBhdGgg4oCTIHRoZSByZXN1Ym1pc3Npb24gYXNwZWN0IOKAkyB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBhIFVEUCBlbmNhcHN1bGF0aW9uIHByb3RvY29sLiBUaGF0IHByb3RvY29sIG5lZWRzIHRvIGhhdmUgYW4gYGVuY2FwX3JjdmAgaG9vayB0aGF0IHJldHVybnMgYSB2YWx1ZSBsZXNzIHRoYW4gemVyby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LCBidXQgZnJvbSBteSBleHBlcmllbmNlLCBGT1Ugc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIGEgVURQIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgdGhhdCBiZWhhdmVzIHRoYXQgd2F5LiBUaGF0IHNvdW5kcyByaWdodCB0byBtZSwgc28gSSB0aGluayB0aGF0IEZPVSBpcyBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLgoKU28sIGxldCBtZSBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdC4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYG5ldC9pcHY0L2ZvdS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYGZvdV9yZWN2X3B1bGxgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBGT1UgaGFuZGxlcyByZWNlcHRpb24gYW5kIGlmIGl0cyBgZW5jYXBfcmN2YCBmdW5jdGlvbiBpcyBpbmRlZWQgdGhlIHRoaW5nIHRoYXQgaXMgcmV0dXJuaW5nIG5lZ2F0aXZlIHZhbHVlcyB0aGF0IHRyaWdnZXIgcmVzdWJtaXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3VfcmVjdl9wdWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZvdV9jb3JlLmM9NTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm91ICpmb3VfZnJvbV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTU1LVxubmV0L2lwdjQvZm91X2NvcmUuYzo1NjpzdGF0aWMgaW50IGZvdV9yZWN2X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZvdSAqZm91LCBzaXplX3QgbGVuKVxubmV0L2lwdjQvZm91X2NvcmUuYy01Ny17XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYz03Mz1zdGF0aWMgaW50IGZvdV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy03OS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6ODA6XHRpZiAoZm91X3JlY3ZfcHVsbChza2IsIGZvdSwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSlcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtODEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyMD1zdGF0aWMgaW50IGd1ZV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xNTctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjE1ODpcdFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTE1OS1cdFx0XHRnb3RvIGRyb3A7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBwcm9ncmFtbWluZywgcG9zc2libHkgZGVidWdnaW5nOgoKKipEaXZpbmcgaW50byBgZm91X3VkcF9yZWN2YCoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGZvdV91ZHBfcmVjdmAuIFRoYXQgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlbmNhcHN1bGF0ZWQgVURQIHRyYWZmaWMsIHByb2JhYmx5IHNvbWUgc29ydCBvZiB0dW5uZWwgb3Igb3ZlcmxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIHJlY2VpdmUgZW5kLiBXaGF0JiMzOTtzIHRoZSBzdGF0ZSBvZiB0aGUgc3RhY2s/IEFyZSB3ZSBkcm9wcGluZyBwYWNrZXRzPyBBcmUgd2UgaGFuZGxpbmcgdGhlIGRlY2Fwc3VsYXRpb24gY29ycmVjdGx5PyBJcyB0aGVyZSBidWZmZXIgZXhoYXVzdGlvbj8gVGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBpbmNvbWluZyBkYXRhLCBzbyBsZXQmIzM5O3Mgc3RhcnQgaGVyZS4gV2UgbmVlZCB0byBkaXNzZWN0IHRoaXMsIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCBpdHMgZXJyb3IgaGFuZGxpbmcsIGFuZCB0cmFjZSB0aGUgcGFja2V0IGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSwgbWVudGFsbHkgbWFwIG91dCB0aGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgb2JzZXJ2ZWQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZvdV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDczOlx0c3RhdGljIGludCBmb3VfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA3NDpcdHtcbiAgNzU6XHRcdHN0cnVjdCBmb3UgKmZvdSA9IGZvdV9mcm9tX3NvY2soc2spO1xuICA3NjpcdFxuICA3NzpcdFx0aWYgKCFmb3UpXG4gIDc4Olx0XHRcdHJldHVybiAxO1xuICA3OTpcdFxuICA4MDpcdFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG4gIDgxOlx0XHRcdGdvdG8gZHJvcDtcbiAgODI6XHRcbiAgODM6XHRcdHJldHVybiAtZm91LVx1MDAzZXByb3RvY29sO1xuICA4NDpcdFxuICA4NTpcdGRyb3A6XG4gIDg2Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgODc6XHRcdHJldHVybiAwO1xuICA4ODpcdH1cbiAgODk6XHRcbiAgOTA6XHRzdGF0aWMgc3RydWN0IGd1ZWhkciAqZ3VlX3JlbWNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGd1ZWhkciAqZ3VlaGRyLFxuICA5MTpcdFx0XHRcdFx0ICB2b2lkICpkYXRhLCBzaXplX3QgaGRybGVuLCB1OCBpcHByb3RvLFxuICA5MjpcdFx0XHRcdFx0ICBib29sIG5vcGFydGlhbClcbiAgOTM6XHR7XG4gIDk0Olx0XHRfX2JlMTYgKnBkID0gZGF0YTtcbiAgOTU6XHRcdHNpemVfdCBzdGFydCA9IG50b2hzKHBkWzBdKTtcbiAgOTY6XHRcdHNpemVfdCBvZmZzZXQgPSBudG9ocyhwZFsxXSk7XG4gIDk3Olx0XHRzaXplX3QgcGxlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBoZHJsZW4gJiM0MztcbiAgOTg6XHRcdCAgICBtYXhfdChzaXplX3QsIG9mZnNldCAmIzQzOyBzaXplb2YodTE2KSwgc3RhcnQpO1xuICA5OTpcdFxuIDEwMDpcdFx0aWYgKHNrYi1cdTAwM2VyZW1jc3VtX29mZmxvYWQpXG4gMTAxOlx0XHRcdHJldHVybiBndWVoZHI7XG4gMTAyOlx0XG4gMTAzOlx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBwbGVuKSlcbiAxMDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTA1Olx0XHRndWVoZHIgPSAoc3RydWN0IGd1ZWhkciAqKVx1MDAyNnVkcF9oZHIoc2tiKVsxXTtcbiAxMDY6XHRcbiAxMDc6XHRcdHNrYl9yZW1jc3VtX3Byb2Nlc3Moc2tiLCAodm9pZCAqKWd1ZWhkciAmIzQzOyBoZHJsZW4sXG4gMTA4Olx0XHRcdFx0ICAgIHN0YXJ0LCBvZmZzZXQsIG5vcGFydGlhbCk7XG4gMTA5Olx0XG4gMTEwOlx0XHRyZXR1cm4gZ3VlaGRyO1xuIDExMTpcdH1cbiAxMTI6XHRcbiAxMTM6XHRzdGF0aWMgaW50IGd1ZV9jb250cm9sX21lc3NhZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGd1ZWhkciAqZ3VlaGRyKVxuIDExNDpcdHtcbiAxMTU6XHRcdC8qIE5vIHN1cHBvcnQgeWV0ICovXG4gMTE2Olx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxMTc6XHRcdHJldHVybiAwO1xuIDExODpcdH1cbiAxMTk6XHRcbiAxMjA6XHRzdGF0aWMgaW50IGd1ZV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gMTIxOlx0e1xuIDEyMjpcdFx0c3RydWN0IGZvdSAqZm91ID0gZm91X2Zyb21fc29jayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTc2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVEUCBFbmNhcHN1bGF0aW9uIFByb3RvY29sIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgZm91X3VkcF9yZWN2YCBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgbmVnYXRpdmUgb2YgdGhlIEZPVSBwcm90b2NvbCBudW1iZXIuIEV4Y2VsbGVudC4gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZGVkIHRvIGVzdGFibGlzaCB0byBtb3ZlIGZvcndhcmQuIFNvIGVuYWJsaW5nIGBORVRfRk9VYCBpbiB0aGUga2VybmVsIGNvbmZpZyBzZWVtcyBsaWtlIGEgc291bmQgY2hvaWNlIGJhc2VkIG9uIHRoaXMuCgpOb3csIGEgbW9yZSBnZW5lcmFsIHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IGFyZSB0aGVyZSBvdGhlciBVRFAgZW5jYXBzdWxhdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhbHNvIHVzZSBhIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBpbiBhIHNpbWlsYXIgd2F5IHRvIHNpZ25hbCBwcm90b2NvbCB0eXBlPyBJZiBzbywgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlbS4gQSBicm9hZCBzZWFyY2ggZm9yIGBlbmNhcF9yY3ZgIGltcGxlbWVudGF0aW9ucyBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwYXR0ZXJucy4gSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgcmV0dXJuIHZhbHVlcy4gVW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBsYW5kc2NhcGUgb2YgdGhlIGBlbmNhcF9yY3ZgIGltcGxlbWVudGF0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VuY2FwX3JjdiA9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX25ldC5jPTI1OT1zdGF0aWMgc3RydWN0IHNvY2tldCAqcnhlX3NldHVwX3VkcF90dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBfX2JlMTYgcG9ydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0yODItXHR0bmxfY2ZnLmVuY2FwX3R5cGUgPSAxO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmM6MjgzOlx0dG5sX2NmZy5lbmNhcF9yY3YgPSByeGVfdWRwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0yODQtXG4tLVxuZHJpdmVycy9uZXQvYW10LmM9Mjk3MT1zdGF0aWMgaW50IGFtdF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBhbXRfZGV2ICphbXQpXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtMjk4My1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC9hbXQuYzoyOTg0Olx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSBhbXRfcmN2O1xuZHJpdmVycy9uZXQvYW10LmMtMjk4NS1cdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IGFtdF9lcnJfbG9va3VwO1xuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz0yNTU9c3RhdGljIGludCBiYXJldWRwX3NvY2tldF9jcmVhdGUoc3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCBfX2JlMTYgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY3LVx0dHVubmVsX2NmZy5lbmNhcF90eXBlID0gMTtcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzoyNjg6XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY5LVx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gYmFyZXVkcF9lcnJfbG9va3VwO1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTAyNS1cdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEwMjY6XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBnZW5ldmVfdWRwX2VuY2FwX2Vycl9sb29rdXA7XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTQwMz1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNDMzLVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTQzNDpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzUtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MTY0OD1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTY4OC1cdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE2ODk6XHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9ndHAuYy0xNjkwLVx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBndHBfZW5jYXBfZGVzdHJveTtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTM4ND1pbnQgb3Zwbl91ZHBfc29ja2V0X2F0dGFjaChzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKm92cG5fc29jaywgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM4OS1cdFx0LmVuY2FwX3R5cGUgPSBVRFBfRU5DQVBfT1ZQTklOVURQLFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYzozOTA6XHRcdC5lbmNhcF9yY3YgPSBvdnBuX3VkcF9lbmNhcF9yZWN2LFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0zOTEtXHRcdC5lbmNhcF9kZXN0cm95ID0gb3Zwbl91ZHBfZW5jYXBfZGVzdHJveSxcbi0tXG5kcml2ZXJzL25ldC9wZmNwLmM9MTU1PXN0YXRpYyBzdHJ1Y3Qgc29jayAqcGZjcF9jcmVhdGVfc29jayhzdHJ1Y3QgcGZjcF9kZXYgKnBmY3ApXG4tLVxuZHJpdmVycy9uZXQvcGZjcC5jLTE3Mi1cdHR1bmNmZy5za191c2VyX2RhdGEgPSBwZmNwO1xuZHJpdmVycy9uZXQvcGZjcC5jOjE3MzpcdHR1bmNmZy5lbmNhcF9yY3YgPSBwZmNwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9wZmNwLmMtMTc0LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSAxO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNTc3PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgaXB2Nixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzYxNC1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzYxNTpcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gdnhsYW5fcmN2O1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM2MTYtXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSB2eGxhbl9lcnJfbG9va3VwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYz0zNDg9aW50IHdnX3NvY2tldF9pbml0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCB1MTYgcG9ydClcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMtMzU0LVx0XHQuZW5jYXBfdHlwZSA9IDEsXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmM6MzU1Olx0XHQuZW5jYXBfcmN2ID0gd2dfcmVjZWl2ZVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jLTM1Ni1cdH07XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYz01NjY9c3RhdGljIGludCBmb3VfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZvdV9jZmcgKmNmZyxcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTYwMi1cdGNhc2UgRk9VX0VOQ0FQX0RJUkVDVDpcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6NjAzOlx0XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGZvdV91ZHBfcmVjdjtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNjA0LVx0XHR0dW5uZWxfY2ZnLmdyb19yZWNlaXZlID0gZm91X2dyb19yZWNlaXZlO1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNjA4LVx0Y2FzZSBGT1VfRU5DQVBfR1VFOlxubmV0L2lwdjQvZm91X2NvcmUuYzo2MDk6XHRcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZ3VlX3VkcF9yZWN2O1xubmV0L2lwdjQvZm91X2NvcmUuYy02MTAtXHRcdHR1bm5lbF9jZmcuZ3JvX3JlY2VpdmUgPSBndWVfZ3JvX3JlY2VpdmU7XG4tLVxubmV0L2lwdjQvdWRwLmM9MjM1MD1zdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjM4MC1cdFx0LyogaWYgd2UmIzM5O3JlIG92ZXJseSBzaG9ydCwgbGV0IFVEUCBoYW5kbGUgaXQgKi9cbm5ldC9pcHY0L3VkcC5jOjIzODE6XHRcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cdTAwM2VlbmNhcF9yY3YpO1xubmV0L2lwdjQvdWRwLmMtMjM4Mi1cdFx0aWYgKGVuY2FwX3Jjdikge1xuLS1cbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jPTcxPXZvaWQgc2V0dXBfdWRwX3R1bm5lbF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTgyLVx0dWRwX3NrKHNrKS1cdTAwM2VlbmNhcF90eXBlID0gY2ZnLVx1MDAzZWVuY2FwX3R5cGU7XG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYzo4MzpcdHVkcF9zayhzayktXHUwMDNlZW5jYXBfcmN2ID0gY2ZnLVx1MDAzZWVuY2FwX3Jjdjtcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTg0LVx0dWRwX3NrKHNrKS1cdTAwM2VlbmNhcF9lcnJfcmN2ID0gY2ZnLVx1MDAzZWVuY2FwX2Vycl9yY3Y7XG4tLVxubmV0L2lwdjYvdWRwLmM9ODA2PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTgzMy1cdFx0LyogaWYgd2UmIzM5O3JlIG92ZXJseSBzaG9ydCwgbGV0IFVEUCBoYW5kbGUgaXQgKi9cbm5ldC9pcHY2L3VkcC5jOjgzNDpcdFx0ZW5jYXBfcmN2ID0gUkVBRF9PTkNFKHVwLVx1MDAzZWVuY2FwX3Jjdik7XG5uZXQvaXB2Ni91ZHAuYy04MzUtXHRcdGlmIChlbmNhcF9yY3YpIHtcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNDM9c3RhdGljIHZvaWQgbDJ0cF90dW5uZWxfZnJlZShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNTQtXHRcdFx0V1JJVEVfT05DRSh1ZHBfc2soc2spLVx1MDAzZWVuY2FwX3R5cGUsIDApO1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTU1Olx0XHRcdHVkcF9zayhzayktXHUwMDNlZW5jYXBfcmN2ID0gTlVMTDtcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE1Ni1cdFx0XHR1ZHBfc2soc2spLVx1MDAzZWVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jPTE2NDM9aW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4MS1cdFx0XHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9MMlRQSU5VRFAsXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxNjgyOlx0XHRcdC5lbmNhcF9yY3YgPSBsMnRwX3VkcF9lbmNhcF9yZWN2LFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4My1cdFx0XHQuZW5jYXBfZXJyX3JjdiA9IGwydHBfdWRwX2VuY2FwX2Vycl9yZWN2LFxuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xNjI9c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cdHR1bmNmZy5lbmNhcF90eXBlID0gVURQX0VOQ0FQX1JYUlBDO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE5NDpcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTk1LVx0dHVuY2ZnLmVuY2FwX2Vycl9yY3YgPSByeHJwY19lbmNhcF9lcnJfcmN2O1xuLS1cbm5ldC9zY3RwL3Byb3RvY29sLmM9ODQ5PWludCBzY3RwX3VkcF9zb2NrX3N0YXJ0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg2NS1cdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcbm5ldC9zY3RwL3Byb3RvY29sLmM6ODY2Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IHNjdHBfdWRwX3Jjdjtcbm5ldC9zY3RwL3Byb3RvY29sLmMtODY3LVx0dHVuY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBzY3RwX3VkcF92NF9lcnI7XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy04ODctXHR0dW5jZmcuZW5jYXBfdHlwZSA9IDE7XG5uZXQvc2N0cC9wcm90b2NvbC5jOjg4ODpcdHR1bmNmZy5lbmNhcF9yY3YgPSBzY3RwX3VkcF9yY3Y7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTg4OS1cdHR1bmNmZy5lbmNhcF9lcnJfbG9va3VwID0gc2N0cF91ZHBfdjZfZXJyO1xuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jPTY2Mj1zdGF0aWMgaW50IHRpcGNfdWRwX2VuYWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2JlYXJlciAqYixcbi0tXG5uZXQvdGlwYy91ZHBfbWVkaWEuYy03NzUtXHR0dW5jZmcuZW5jYXBfdHlwZSA9IDE7XG5uZXQvdGlwYy91ZHBfbWVkaWEuYzo3NzY6XHR0dW5jZmcuZW5jYXBfcmN2ID0gdGlwY191ZHBfcmVjdjtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTc3Ny1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyODEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgVURQIEVuY2Fwc3VsYXRpb24gUmVjZWl2ZXJzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBndWVfdWRwX3JlY3ZgLiBJIGtub3cgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjQvZm91X2NvcmUuY2AsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZXJlIGZvciBzdGFydGVycy4gSSByZW1lbWJlciB0aGF0JiMzOTtzIHRoZSBHZW5lcmljIFVEUCBFbmNhcHN1bGF0aW9uIHJlY2VpdmVyLiBUaGVuLCBJIG5lZWQgdG8gY29tcGFyZSB0aGF0IHRvIGBsMnRwX3VkcF9lbmNhcF9yZWN2YC4gVGhpcyBpcyBMMlRQIG92ZXIgVURQIGVuY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRyYWZmaWMgaXMgZmxvd2luZy4gSSB3aWxsIGNoZWNrIHRoZSByZWxhdGlvbnNoaXAgb2YgYm90aCwgc2luY2UgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSB3aG9sZSByZWNlaXZpbmcgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bDJ0cF91ZHBfZW5jYXBfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbDJ0cC5yc3Q9NjE5PWVuY2Fwc3VsYXRlZCBVRFAgc29ja2V0IGJ5IHNldHRpbmcgZW5jYXBfcmN2IGFuZCBlbmNhcF9kZXN0cm95XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbDJ0cC5yc3Q6NjIwOmNhbGxiYWNrcyBvbiB0aGUgVURQIHNvY2tldC4gbDJ0cF91ZHBfZW5jYXBfcmVjdiBpcyBjYWxsZWQgd2hlblxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2wydHAucnN0LTYyMS1wYWNrZXRzIGFyZSByZWNlaXZlZCBvbiB0aGUgc29ja2V0LiBsMnRwX3VkcF9lbmNhcF9kZXN0cm95IGlzIGNhbGxlZFxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jPTEwMDU9c3RhdGljIHZvaWQgbDJ0cF9zZXNzaW9uX3F1ZXVlX3B1cmdlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24pXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTAxNS0vKiBVRFAgZW5jYXBzdWxhdGlvbiByZWNlaXZlIGhhbmRsZXIuIFNlZSBuZXQvaXB2NC91ZHAuYyBmb3IgZGV0YWlscy4gKi9cbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwMTY6aW50IGwydHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTAxNy17XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTExNC19XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMTE1OkVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdWRwX2VuY2FwX3JlY3YpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTExNi1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjQzPWludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTE2ODEtXHRcdFx0LmVuY2FwX3R5cGUgPSBVRFBfRU5DQVBfTDJUUElOVURQLFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY4MjpcdFx0XHQuZW5jYXBfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfcmVjdixcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE2ODMtXHRcdFx0LmVuY2FwX2Vycl9yY3YgPSBsMnRwX3VkcF9lbmNhcF9lcnJfcmVjdixcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yNTQ9dm9pZCBsMnRwX3JlY3ZfY29tbW9uKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjU2LVx0XHQgICAgICBpbnQgbGVuZ3RoKTtcbm5ldC9sMnRwL2wydHBfY29yZS5oOjI1NzppbnQgbDJ0cF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjU4LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9NDU3PXN0YXRpYyBpbnQgcHBwb2wydHBfYmFja2xvZ19yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTQ2MC1cbm5ldC9sMnRwL2wydHBfcHBwLmM6NDYxOlx0cmMgPSBsMnRwX3VkcF9lbmNhcF9yZWN2KHNrLCBza2IpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy00NjItXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjkwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgdHJvdWJsZXNob290aW5nL2FuYWx5emluZyBuZXR3b3JrIHRyYWZmaWMgb3IgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KCioqRGl2aW5nIGludG8gYGwydHBfdWRwX2VuY2FwX3JlY3ZgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgcHJvYmxlbSBhdCBoYW5kLi4uIHdoZXJlJiMzOTtzIHRoZSBtb3N0IGxpa2VseSBjdWxwcml0PyBMZXQmIzM5O3MgY2hlY2sgYGwydHBfdWRwX2VuY2FwX3JlY3ZgLiYjMzQ7IFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgcmVjZWl2aW5nIEwyVFAgZW5jYXBzdWxhdGVkIHRyYWZmaWMgb3ZlciBVRFAsIHNvIHRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSByZWNlaXZlciwgdGhlIGdhdGVrZWVwZXIuIEFueXRoaW5nIGFtaXNzIHRoZXJlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGZsb3cgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB1bmRlciB0aGUgY3VycmVudCBjb25kaXRpb25zLiBJdCBpcyBsaWtlbHkgdGhhdCB0aGUgY3VycmVudCBpc3N1ZSBsaWVzIHdpdGggdGhhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIHByb2Nlc3MuIEkgd2lsbCBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbmRpY2F0aW9ucyBhcyB0byB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxNjpcdGludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwMTc6XHR7XG4xMDE4Olx0XHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uID0gTlVMTDtcbjEwMTk6XHRcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDtcbjEwMjA6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjEwMjE6XHRcdHVuc2lnbmVkIGNoYXIgKnB0ciwgKm9wdHI7XG4xMDIyOlx0XHR1MTYgaGRyZmxhZ3M7XG4xMDIzOlx0XHR1MTYgdmVyc2lvbjtcbjEwMjQ6XHRcdGludCBsZW5ndGg7XG4xMDI1Olx0XG4xMDI2Olx0XHQvKiBVRFAgaGFzIHZlcmlmaWVkIGNoZWNrc3VtICovXG4xMDI3Olx0XG4xMDI4Olx0XHQvKiBVRFAgYWx3YXlzIHZlcmlmaWVzIHRoZSBwYWNrZXQgbGVuZ3RoLiAqL1xuMTAyOTpcdFx0X19za2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG4xMDMwOlx0XG4xMDMxOlx0XHQvKiBTaG9ydCBwYWNrZXQ/ICovXG4xMDMyOlx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBMMlRQX0hEUl9TSVpFX01BWCkpXG4xMDMzOlx0XHRcdGdvdG8gcGFzcztcbjEwMzQ6XHRcbjEwMzU6XHRcdC8qIFBvaW50IHRvIEwyVFAgaGVhZGVyICovXG4xMDM2Olx0XHRvcHRyID0gc2tiLVx1MDAzZWRhdGE7XG4xMDM3Olx0XHRwdHIgPSBza2ItXHUwMDNlZGF0YTtcbjEwMzg6XHRcbjEwMzk6XHRcdC8qIEdldCBMMlRQIGhlYWRlciBmbGFncyAqL1xuMTA0MDpcdFx0aGRyZmxhZ3MgPSBudG9ocygqKF9fYmUxNiAqKXB0cik7XG4xMDQxOlx0XG4xMDQyOlx0XHQvKiBHZXQgcHJvdG9jb2wgdmVyc2lvbiAqL1xuMTA0MzpcdFx0dmVyc2lvbiA9IGhkcmZsYWdzIFx1MDAyNiBMMlRQX0hEUl9WRVJfTUFTSztcbjEwNDQ6XHRcbjEwNDU6XHRcdC8qIEdldCBsZW5ndGggb2YgTDJUUCBwYWNrZXQgKi9cbjEwNDY6XHRcdGxlbmd0aCA9IHNrYi1cdTAwM2VsZW47XG4xMDQ3Olx0XG4xMDQ4Olx0XHQvKiBJZiB0eXBlIGlzIGNvbnRyb2wgcGFja2V0LCBpdCBpcyBoYW5kbGVkIGJ5IHVzZXJzcGFjZS4gKi9cbjEwNDk6XHRcdGlmIChoZHJmbGFncyBcdTAwMjYgTDJUUF9IRFJGTEFHX1QpXG4xMDUwOlx0XHRcdGdvdG8gcGFzcztcbjEwNTE6XHRcbjEwNTI6XHRcdC8qIFNraXAgZmxhZ3MgKi9cbjEwNTM6XHRcdHB0ciAmIzQzOz0gMjtcbjEwNTQ6XHRcbjEwNTU6XHRcdGlmICh2ZXJzaW9uID09IEwyVFBfSERSX1ZFUl8yKSB7XG4xMDU2Olx0XHRcdHUxNiB0dW5uZWxfaWQsIHNlc3Npb25faWQ7XG4xMDU3Olx0XG4xMDU4Olx0XHRcdC8qIElmIGxlbmd0aCBpcyBwcmVzZW50LCBza2lwIGl0ICovXG4xMDU5Olx0XHRcdGlmIChoZHJmbGFncyBcdTAwMjYgTDJUUF9IRFJGTEFHX0wpXG4xMDYwOlx0XHRcdFx0cHRyICYjNDM7PSAyO1xuMTA2MTpcdFxuMTA2MjpcdFx0XHQvKiBFeHRyYWN0IHR1bm5lbCBhbmQgc2Vzc2lvbiBJRCAqL1xuMTA2MzpcdFx0XHR0dW5uZWxfaWQgPSBudG9ocygqKF9fYmUxNiAqKXB0cik7XG4xMDY0Olx0XHRcdHB0ciAmIzQzOz0gMjtcbjEwNjU6XHRcdFx0c2Vzc2lvbl9pZCA9IG50b2hzKCooX19iZTE2ICopcHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBsMnRwX3VkcF9lbmNhcF9yZWN2YCYjMzk7cyBDb25jbHVzaW9uKioKCk9rYXksIHRpbWUgdG8gemVybyBpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZW5kIG9mIHRoZSBgbDJ0cF91ZHBfZW5jYXBfcmVjdmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbmNvbWluZyBVRFAgZW5jYXBzdWxhdGVkIEwyVFAgdHJhZmZpYyBpcyBmaW5hbGx5IHByb2Nlc3NlZCwgb3IgaWYgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHRyaWdnZXJlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBhIHZ1bG5lcmFiaWxpdHkgKm1pZ2h0KiBleGlzdCwgb3IgaWYgdGhlIGN1cnJlbnQgY29kZSBoYW5kbGVzIGFsbCBhbnRpY2lwYXRlZCBzY2VuYXJpb3MuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGVuc3VyZSBwcm9wZXIgcGFja2V0IGhhbmRsaW5nLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBtYWxmb3JtZWQgcGFja2V0cyBhcmUgY2F1c2luZyBpc3N1ZXM/IExldCBtZSBjaGVjayBmb3IgdW5leHBlY3RlZCBlcnJvciByZXR1cm5zIGZyb20gdGhlIGxvd2VyIGxheWVycywgYW5kIGNvbnNpZGVyIHRoZWlyIGltcGxpY2F0aW9ucy4gSSBhbSBsb29raW5nIGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCBwcm9ibGVtcyBhcyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUgb2Ygd2hhdCBoYXBwZW5zIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgcmVjZWl2aW5nIHJvdXRpbmUsIGFuZCBpZiBpdCYjMzk7cyB0aGUgcmlnaHQgZmluYWwgcmVzdGluZyBwbGFjZSBmb3IgdGhlIHJlY2VpdmVkIHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjY6XHRcdFx0cHRyICYjNDM7PSAyO1xuMTA2NzpcdFxuMTA2ODpcdFx0XHRzZXNzaW9uID0gbDJ0cF92Ml9zZXNzaW9uX2dldChuZXQsIHR1bm5lbF9pZCwgc2Vzc2lvbl9pZCk7XG4xMDY5Olx0XHR9IGVsc2Uge1xuMTA3MDpcdFx0XHR1MzIgc2Vzc2lvbl9pZDtcbjEwNzE6XHRcbjEwNzI6XHRcdFx0cHRyICYjNDM7PSAyO1x0Lyogc2tpcCByZXNlcnZlZCBiaXRzICovXG4xMDczOlx0XHRcdHNlc3Npb25faWQgPSBudG9obCgqKF9fYmUzMiAqKXB0cik7XG4xMDc0Olx0XHRcdHB0ciAmIzQzOz0gNDtcbjEwNzU6XHRcbjEwNzY6XHRcdFx0c2Vzc2lvbiA9IGwydHBfdjNfc2Vzc2lvbl9nZXQobmV0LCBzaywgc2Vzc2lvbl9pZCk7XG4xMDc3Olx0XHR9XG4xMDc4Olx0XG4xMDc5Olx0XHRpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24tXHUwMDNlcmVjdl9za2IpIHtcbjEwODA6XHRcdFx0aWYgKHNlc3Npb24pXG4xMDgxOlx0XHRcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbjEwODI6XHRcbjEwODM6XHRcdFx0LyogTm90IGZvdW5kPyBQYXNzIHRvIHVzZXJzcGFjZSB0byBkZWFsIHdpdGggKi9cbjEwODQ6XHRcdFx0Z290byBwYXNzO1xuMTA4NTpcdFx0fVxuMTA4NjpcdFxuMTA4NzpcdFx0dHVubmVsID0gc2Vzc2lvbi1cdTAwM2V0dW5uZWw7XG4xMDg4Olx0XG4xMDg5Olx0XHQvKiBDaGVjayBwcm90b2NvbCB2ZXJzaW9uICovXG4xMDkwOlx0XHRpZiAodmVyc2lvbiAhPSB0dW5uZWwtXHUwMDNldmVyc2lvbikge1xuMTA5MTpcdFx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xuMTA5MjpcdFx0XHRnb3RvIGludmFsaWQ7XG4xMDkzOlx0XHR9XG4xMDk0Olx0XG4xMDk1Olx0XHRpZiAodmVyc2lvbiA9PSBMMlRQX0hEUl9WRVJfMyBcdTAwMjZcdTAwMjZcbjEwOTY6XHRcdCAgICBsMnRwX3YzX2Vuc3VyZV9vcHRfaW5fbGluZWFyKHNlc3Npb24sIHNrYiwgXHUwMDI2cHRyLCBcdTAwMjZvcHRyKSkge1xuMTA5NzpcdFx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xuMTA5ODpcdFx0XHRnb3RvIGludmFsaWQ7XG4xMDk5Olx0XHR9XG4xMTAwOlx0XG4xMTAxOlx0XHRsMnRwX3JlY3ZfY29tbW9uKHNlc3Npb24sIHNrYiwgcHRyLCBvcHRyLCBoZHJmbGFncywgbGVuZ3RoKTtcbjExMDI6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG4xMTAzOlx0XG4xMTA0Olx0XHRyZXR1cm4gMDtcbjExMDU6XHRcbjExMDY6XHRpbnZhbGlkOlxuMTEwNzpcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnR1bm5lbC1cdTAwM2VzdGF0cy5yeF9pbnZhbGlkKTtcbjExMDg6XHRcbjExMDk6XHRwYXNzOlxuMTExMDpcdFx0LyogUHV0IFVEUCBoZWFkZXIgYmFjayAqL1xuMTExMTpcdFx0X19za2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG4xMTEyOlx0XG4xMTEzOlx0XHRyZXR1cm4gMTtcbjExMTQ6XHR9XG4xMTE1Olx0RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF91ZHBfZW5jYXBfcmVjdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgUGFja2V0IFJlY2VwdGlvbioqCgpPa2F5LCBzbyBgbDJ0cF91ZHBfZW5jYXBfcmVjdmAgaXMgdGVsbGluZyBtZSBzb21ldGhpbmcgaW1wb3J0YW50LiBJdCYjMzk7cyByZXR1cm5pbmcgYSAxIGlmIGEgcGFja2V0IG5lZWRzIHRvIGJlIHBhc3NlZCB1cCB0byB1c2Vyc3BhY2UgdmlhIFVEUC4gQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJiMzOTt0KiogcmV0dXJuIGFueXRoaW5nIG5lZ2F0aXZlLiBUaGF0IGVsaW1pbmF0ZXMgc29tZSBwb3NzaWJsZSBhdmVudWVzIG9mIGludmVzdGlnYXRpb24uIFRoaXMgaXMgdXNlZnVsIGRhdGEuCgpUaGUgbmVnYXRpdmUgcmV0dXJuIHZhbHVlcywgdGhlbiwgYXJlIHByaW1hcmlseSBjb21pbmcgZnJvbSBgTkVUX0ZPVWAuIFdlIHNob3VsZCBjaGVjayBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAgdG8gZmluZCB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXJldWRwX3VkcF9lbmNhcF9yZWN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JhcmV1ZHAuYz00OT1zdHJ1Y3QgYmFyZXVkcF9kZXYge1xuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy02MC1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzo2MTpzdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTYyLXtcbi0tXG5kcml2ZXJzL25ldC9iYXJldWRwLmM9MjU1PXN0YXRpYyBpbnQgYmFyZXVkcF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgX19iZTE2IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTI2Ny1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC9iYXJldWRwLmM6MjY4Olx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSBiYXJldWRwX3VkcF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTI2OS1cdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IGJhcmV1ZHBfZXJyX2xvb2t1cDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBwcm9ncmFtbWluZzoKCioqQW5hbHl6aW5nIHRoZSBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgYSBiYXJlIFVEUCBlbmNhcHN1bGF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBsaWtlbHkgb24gdGhlIGRldGFpbHMgb2YgcmVjZWl2aW5nIFVEUCBwYWNrZXRzIHRoYXQgYXJlIHNvbWVob3cgJiMzNDtlbmNhcHN1bGF0ZWQuJiMzNDsgVGhpcyBzdWdnZXN0cyBhIHByb3RvY29sIG9yIG1lY2hhbmlzbSBvbiB0b3Agb2Ygc3RhbmRhcmQgVURQLCBhbmQgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzOiBpcyBpdCBhIHR1bm5lbCwgYSBjdXN0b20gZnJhbWluZyBmb3JtYXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJhdyBpbmNvbWluZyBkYXRhZ3JhbSBhbmQgZXh0cmFjdHMgdGhlIHJlbGV2YW50IGVuY2Fwc3VsYXRlZCBkYXRhLiBLZXkgcXVlc3Rpb25zIEkgaGF2ZSBhcmUgd2hhdCB0aGUgZXhwZWN0ZWQgZGF0YWdyYW0gc3RydWN0dXJlIGlzLCB0aGUgbWV0aG9kcyB1c2VkIHRvIGRldGVybWluZSBwYWNrZXQgYm91bmRhcmllcyBpZiBhbnksIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWFsZm9ybWVkIG9yIGluY29tcGxldGUgZGF0YS4gTXkgbmV4dCBzdGVwcyBpbnZvbHZlIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLCBkYXRhIGJ1ZmZlcnMsIGFuZCBhbnkgc3RhdGUgdmFyaWFibGVzIHVzZWQgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYmFyZXVkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MTpcdHN0YXRpYyBpbnQgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IG1ldGFkYXRhX2RzdCAqdHVuX2RzdCA9IE5VTEw7XG4gIDY0Olx0XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhrZXkpID0geyB9O1xuICA2NTpcdFx0c3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwO1xuICA2NjpcdFx0dW5zaWduZWQgc2hvcnQgZmFtaWx5O1xuICA2NzpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiAgNjg6XHRcdF9fYmUxNiBwcm90bztcbiAgNjk6XHRcdHZvaWQgKm9pcGg7XG4gIDcwOlx0XHRpbnQgZXJyO1xuICA3MTpcdFx0aW50IG5oO1xuICA3MjpcdFxuICA3MzpcdFx0YmFyZXVkcCA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xuICA3NDpcdFx0aWYgKCFiYXJldWRwKVxuICA3NTpcdFx0XHRnb3RvIGRyb3A7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09ICBodG9ucyhFVEhfUF9JUCkpXG4gIDc4Olx0XHRcdGZhbWlseSA9IEFGX0lORVQ7XG4gIDc5Olx0XHRlbHNlXG4gIDgwOlx0XHRcdGZhbWlseSA9IEFGX0lORVQ2O1xuICA4MTpcdFxuICA4MjpcdFx0aWYgKGJhcmV1ZHAtXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSkge1xuICA4MzpcdFx0XHRfX3U4IGlwdmVyc2lvbjtcbiAgODQ6XHRcbiAgODU6XHRcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBCQVJFVURQX0JBU0VfSExFTiwgXHUwMDI2aXB2ZXJzaW9uLFxuICA4NjpcdFx0XHRcdFx0ICBzaXplb2YoaXB2ZXJzaW9uKSkpIHtcbiAgODc6XHRcdFx0XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoYmFyZXVkcC1cdTAwM2VkZXYpO1xuICA4ODpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgODk6XHRcdFx0fVxuICA5MDpcdFx0XHRpcHZlcnNpb24gXHUwMDNlXHUwMDNlPSA0O1xuICA5MTpcdFxuICA5MjpcdFx0XHRpZiAoaXB2ZXJzaW9uID09IDQpIHtcbiAgOTM6XHRcdFx0XHRwcm90byA9IGh0b25zKEVUSF9QX0lQKTtcbiAgOTQ6XHRcdFx0fSBlbHNlIGlmIChpcHZlcnNpb24gPT0gNiBcdTAwMjZcdTAwMjYgYmFyZXVkcC1cdTAwM2VtdWx0aV9wcm90b19tb2RlKSB7XG4gIDk1Olx0XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgOTY6XHRcdFx0fSBlbHNlIHtcbiAgOTc6XHRcdFx0XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoYmFyZXVkcC1cdTAwM2VkZXYpO1xuICA5ODpcdFx0XHRcdGdvdG8gZHJvcDtcbiAgOTk6XHRcdFx0fVxuIDEwMDpcdFx0fSBlbHNlIGlmIChiYXJldWRwLVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9NUExTX1VDKSkge1xuIDEwMTpcdFx0XHRzdHJ1Y3QgaXBoZHIgKnR1bm5lbF9oZHI7XG4gMTAyOlx0XG4gMTAzOlx0XHRcdHR1bm5lbF9oZHIgPSAoc3RydWN0IGlwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gMTA0Olx0XHRcdGlmICh0dW5uZWxfaGRyLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIDEwNTpcdFx0XHRcdGlmICghaXB2NF9pc19tdWx0aWNhc3QodHVubmVsX2hkci1cdTAwM2VkYWRkcikpIHtcbiAxMDY6XHRcdFx0XHRcdHByb3RvID0gYmFyZXVkcC1cdTAwM2VldGhlcnR5cGU7XG4gMTA3Olx0XHRcdFx0fSBlbHNlIGlmIChiYXJldWRwLVx1MDAzZW11bHRpX3Byb3RvX21vZGUgXHUwMDI2XHUwMDI2XG4gMTA4Olx0XHRcdFx0XHQgICBpcHY0X2lzX211bHRpY2FzdCh0dW5uZWxfaGRyLVx1MDAzZWRhZGRyKSkge1xuIDEwOTpcdFx0XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9NUExTX01DKTtcbiAxMTA6XHRcdFx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzcwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYXMgZmFyIGFzIGhhbmRsaW5nIGVuY2Fwc3VsYXRlZCBVRFAgdHJhZmZpYyBpcyBjb25jZXJuZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGVzcGVjaWFsbHkgYXQgdGhlIGVuZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIGxvZ2ljLCBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBmaW5hbCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSYjMzk7bSBhc3N1bWluZywgYmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlIHdpdGggc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMsIHRoYXQgdGhlIGVuZCB3aWxsIGJlIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSBmaW5hbCBzdGVwcyB0aGlzIGZ1bmN0aW9uIHRha2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzIGF0IHRoZSBjb25jbHVzaW9uIG9mIHRoaXMgcm91dGluZT8gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYmFyZXVkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTE6XHRcdFx0XHRcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVx1MDAzZWRldik7XG4gMTEyOlx0XHRcdFx0XHRnb3RvIGRyb3A7XG4gMTEzOlx0XHRcdFx0fVxuIDExNDpcdFx0XHR9IGVsc2Uge1xuIDExNTpcdFx0XHRcdGludCBhZGRyX3R5cGU7XG4gMTE2Olx0XHRcdFx0c3RydWN0IGlwdjZoZHIgKnR1bm5lbF9oZHJfdjY7XG4gMTE3Olx0XG4gMTE4Olx0XHRcdFx0dHVubmVsX2hkcl92NiA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDExOTpcdFx0XHRcdGFkZHJfdHlwZSA9XG4gMTIwOlx0XHRcdFx0aXB2Nl9hZGRyX3R5cGUoKHN0cnVjdCBpbjZfYWRkciAqKVx1MDAyNnR1bm5lbF9oZHJfdjYtXHUwMDNlZGFkZHIpO1xuIDEyMTpcdFx0XHRcdGlmICghKGFkZHJfdHlwZSBcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpIHtcbiAxMjI6XHRcdFx0XHRcdHByb3RvID0gYmFyZXVkcC1cdTAwM2VldGhlcnR5cGU7XG4gMTIzOlx0XHRcdFx0fSBlbHNlIGlmIChiYXJldWRwLVx1MDAzZW11bHRpX3Byb3RvX21vZGUgXHUwMDI2XHUwMDI2XG4gMTI0Olx0XHRcdFx0XHQgICAoYWRkcl90eXBlIFx1MDAyNiBJUFY2X0FERFJfTVVMVElDQVNUKSkge1xuIDEyNTpcdFx0XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9NUExTX01DKTtcbiAxMjY6XHRcdFx0XHR9IGVsc2Uge1xuIDEyNzpcdFx0XHRcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXHUwMDNlZGV2KTtcbiAxMjg6XHRcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMjk6XHRcdFx0XHR9XG4gMTMwOlx0XHRcdH1cbiAxMzE6XHRcdH0gZWxzZSB7XG4gMTMyOlx0XHRcdHByb3RvID0gYmFyZXVkcC1cdTAwM2VldGhlcnR5cGU7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBCQVJFVURQX0JBU0VfSExFTixcbiAxMzY6XHRcdFx0XHRcdCBwcm90byxcbiAxMzc6XHRcdFx0XHRcdCAhbmV0X2VxKGJhcmV1ZHAtXHUwMDNlbmV0LFxuIDEzODpcdFx0XHRcdFx0IGRldl9uZXQoYmFyZXVkcC1cdTAwM2VkZXYpKSkpIHtcbiAxMzk6XHRcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXHUwMDNlZGV2KTtcbiAxNDA6XHRcdFx0Z290byBkcm9wO1xuIDE0MTpcdFx0fVxuIDE0MjpcdFxuIDE0MzpcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBrZXkpO1xuIDE0NDpcdFxuIDE0NTpcdFx0dHVuX2RzdCA9IHVkcF90dW5fcnhfZHN0KHNrYiwgZmFtaWx5LCBrZXksIDAsIDApO1xuIDE0NjpcdFx0aWYgKCF0dW5fZHN0KSB7XG4gMTQ3Olx0XHRcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVx1MDAzZWRldik7XG4gMTQ4Olx0XHRcdGdvdG8gZHJvcDtcbiAxNDk6XHRcdH1cbiAxNTA6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2dHVuX2RzdC1cdTAwM2Vkc3QpO1xuIDE1MTpcdFx0c2tiLVx1MDAzZWRldiA9IGJhcmV1ZHAtXHUwMDNlZGV2O1xuIDE1MjpcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIFNhdmUgb2Zmc2V0IG9mIG91dGVyIGhlYWRlciByZWxhdGl2ZSB0byBza2ItXHUwMDNlaGVhZCxcbiAxNTU6XHRcdCAqIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0IHRoZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgaW5uZXIgaGVhZGVyXG4gMTU2Olx0XHQgKiBhbmQgbWlnaHQgY2hhbmdlIHNrYi1cdTAwM2VoZWFkLlxuIDE1NzpcdFx0ICovXG4gMTU4Olx0XHRuaCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQ7XG4gMTU5Olx0XG4gMTYwOlx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gYWJvdXQgdG8gYW5hbHl6ZSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGluc3RydWN0aW9uIGlzIGNsZWFyIOKAkyBJJiMzOTttIG1vdmluZyBvbiB0byBkaXNzZWN0IHRoZSBmdW5jdGlvbiBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAuIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQgc29tZSByZWxhdGVkIHBhcnRzLCBidXQgbm93IGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBydW5uaW5nIHRocm91Z2ggdGhlIGNvZGUgbGluZSBieSBsaW5lIChvciBhdCBsZWFzdCwgbG9naWNhbGx5LCBpZiBpdCYjMzk7cyBkZW5zZSkgYW5kIGltbWVkaWF0ZWx5IGJlIGxvb2tpbmcgZm9yIGFueXRoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIGFueSBwb3RlbnRpYWwgZ290Y2hhcywgYW5kIGFueSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSB2aWdpbGFudCBhYm91dCBlcnJvciBoYW5kbGluZywgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHBhcnNpbmcgcG90ZW50aWFsbHkgbWFsaWNpb3VzIFVEUCBwYWNrZXRzIHdpdGhpbiB0aGlzIGVuY2Fwc3VsYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBlbmNhcHN1bGF0aW9uIGlzIHBlcmZvcm1pbmcgYXMgZXhwZWN0ZWQsIGVuc3VyaW5nIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBpc24mIzM5O3QgY29tcHJvbWlzZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHBhc3NlZCBhcm91bmQgaW4gdGhpcyBjcml0aWNhbCBhcmVhLCBrZWVwaW5nIGluIG1pbmQgbXkgcGFzdCBleHBlcmllbmNlIHdpdGggdGhlc2UgaW1wbGVtZW50YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JhcmV1ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYxOlx0XG4gMTYyOlx0XHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKSB7XG4gMTYzOlx0XHRcdERFVl9TVEFUU19JTkMoYmFyZXVkcC1cdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuIDE2NDpcdFx0XHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXHUwMDNlZGV2LCByeF9lcnJvcnMpO1xuIDE2NTpcdFx0XHRnb3RvIGRyb3A7XG4gMTY2Olx0XHR9XG4gMTY3Olx0XG4gMTY4Olx0XHQvKiBHZXQgdGhlIG91dGVyIGhlYWRlci4gKi9cbiAxNjk6XHRcdG9pcGggPSBza2ItXHUwMDNlaGVhZCAmIzQzOyBuaDtcbiAxNzA6XHRcbiAxNzE6XHRcdGlmICghaXB2Nl9tb2RfZW5hYmxlZCgpIHx8IGZhbWlseSA9PSBBRl9JTkVUKVxuIDE3MjpcdFx0XHRlcnIgPSBJUF9FQ05fZGVjYXBzdWxhdGUob2lwaCwgc2tiKTtcbiAxNzM6XHRcdGVsc2VcbiAxNzQ6XHRcdFx0ZXJyID0gSVA2X0VDTl9kZWNhcHN1bGF0ZShvaXBoLCBza2IpO1xuIDE3NTpcdFxuIDE3NjpcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiAxNzc6XHRcdFx0aWYgKGxvZ19lY25fZXJyb3IpIHtcbiAxNzg6XHRcdFx0XHRpZiAgKCFpcHY2X21vZF9lbmFibGVkKCkgfHwgZmFtaWx5ID09IEFGX0lORVQpXG4gMTc5Olx0XHRcdFx0XHRuZXRfaW5mb19yYXRlbGltaXRlZChcJiMzNDtub24tRUNUIGZyb20gJXBJNCBcJiMzNDtcbiAxODA6XHRcdFx0XHRcdFx0XHQgICAgIFwmIzM0O3dpdGggVE9TPSUjeFxcblwmIzM0OyxcbiAxODE6XHRcdFx0XHRcdFx0XHQgICAgIFx1MDAyNigoc3RydWN0IGlwaGRyICopb2lwaCktXHUwMDNlc2FkZHIsXG4gMTgyOlx0XHRcdFx0XHRcdFx0ICAgICAoKHN0cnVjdCBpcGhkciAqKW9pcGgpLVx1MDAzZXRvcyk7XG4gMTgzOlx0XHRcdFx0ZWxzZVxuIDE4NDpcdFx0XHRcdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7bm9uLUVDVCBmcm9tICVwSTZcXG5cJiMzNDssXG4gMTg1Olx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjYoKHN0cnVjdCBpcHY2aGRyICopb2lwaCktXHUwMDNlc2FkZHIpO1xuIDE4NjpcdFx0XHR9XG4gMTg3Olx0XHRcdGlmIChlcnIgXHUwMDNlIDEpIHtcbiAxODg6XHRcdFx0XHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXHUwMDNlZGV2LCByeF9mcmFtZV9lcnJvcnMpO1xuIDE4OTpcdFx0XHRcdERFVl9TVEFUU19JTkMoYmFyZXVkcC1cdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XG4gMTkwOlx0XHRcdFx0Z290byBkcm9wO1xuIDE5MTpcdFx0XHR9XG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDE5NTpcdFx0ZXJyID0gZ3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2YmFyZXVkcC1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG4gMTk2Olx0XHRpZiAobGlrZWx5KGVyciA9PSBORVRfUlhfU1VDQ0VTUykpXG4gMTk3Olx0XHRcdGRldl9kc3RhdHNfcnhfYWRkKGJhcmV1ZHAtXHUwMDNlZGV2LCBsZW4pO1xuIDE5ODpcdFxuIDE5OTpcdFx0cmV0dXJuIDA7XG4gMjAwOlx0ZHJvcDpcbiAyMDE6XHRcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xuIDIwMjpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjAzOlx0XG4gMjA0Olx0XHRyZXR1cm4gMDtcbiAyMDU6XHR9XG4gMjA2Olx0XG4gMjA3Olx0c3RhdGljIGludCBiYXJldWRwX2Vycl9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDIwODpcdHtcbiAyMDk6XHRcdHJldHVybiAwO1xuIDIxMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3ODkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGVjb2RpbmcgYSBOZXR3b3JrIEVuY2Fwc3VsYXRpb24gUHV6emxlKioKCkFscmlnaHQsIHNvIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBpcyByZXR1cm5pbmcgYSB6ZXJvLiBUaGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4gVGhhdCYjMzk7cyBhIHN1Y2Nlc3MsIGF0IGxlYXN0IGZyb20gKml0cyogcGVyc3BlY3RpdmUuICBJIGtuZXcgdGhhdC4gU28sIEkgbmVlZCB0byBsb29rIHVwc3RyZWFtLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGBORVRfRk9VYCB0aGF0JiMzOTtzIHRoZSBjdWxwcml0LCByZXR1cm5pbmcgYSB2YWx1ZSBsZXNzIHRoYW4gemVyby4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGUgcmVzdWJtaXNzaW9uLiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGd0cF9lbmNhcF9yZWN2YCBuZXh0LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGlzIGFsbW9zdCBjZXJ0YWlubHkgb3JpZ2luYXRpbmcsIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9ODg1PXN0YXRpYyB2b2lkIGd0cF9lbmNhcF9kaXNhYmxlKHN0cnVjdCBndHBfZGV2ICpndHApXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtOTAxLSAqL1xuZHJpdmVycy9uZXQvZ3RwLmM6OTAyOnN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtOTAzLXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNDAzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2NyZWF0ZV9zb2NrKGludCB0eXBlLCBzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzMtXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XG5kcml2ZXJzL25ldC9ndHAuYzoxNDM0Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvZ3RwLmMtMTQzNS1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNjQ4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2VuY2FwX2VuYWJsZV9zb2NrZXQoaW50IGZkLCBpbnQgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNjg4LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTY4OTpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTAtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBndHBfZW5jYXBfcmVjdmAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGd0cF9lbmNhcF9yZWN2YC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEga2V5IHBhcnQgb2YgdGhlIHByb2Nlc3MsIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBHVFAgcGFja2V0cyBhcmUgYmVpbmcgaGFuZGxlZCwgcHJlc3VtYWJseSByZWNlaXZlZCBhbmQgZGVjYXBzdWxhdGVkLiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gd29ya2luZyBvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlbGwgdGhpcyBpcyB3b3JraW5nLCBvciB3aGVyZSBhbnkgcG90ZW50aWFsIHByb2JsZW1zIG1pZ2h0IGJlIGx1cmtpbmcuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIHdoZXJlIGFueSBpc3N1ZXMgd2l0aCBwYWNrZXQgaGFuZGxpbmcgd291bGQgYmUgbWFuaWZlc3RpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MDI6XHRzdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5MDM6XHR7XG4gOTA0Olx0XHRzdHJ1Y3QgZ3RwX2RldiAqZ3RwO1xuIDkwNTpcdFx0aW50IHJldCA9IDA7XG4gOTA2Olx0XG4gOTA3Olx0XHRndHAgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiA5MDg6XHRcdGlmICghZ3RwKVxuIDkwOTpcdFx0XHRyZXR1cm4gMTtcbiA5MTA6XHRcbiA5MTE6XHRcdG5ldGRldl9kYmcoZ3RwLVx1MDAzZWRldiwgXCYjMzQ7ZW5jYXBfcmVjdiBzaz0lcFxcblwmIzM0Oywgc2spO1xuIDkxMjpcdFxuIDkxMzpcdFx0c3dpdGNoIChSRUFEX09OQ0UodWRwX3NrKHNrKS1cdTAwM2VlbmNhcF90eXBlKSkge1xuIDkxNDpcdFx0Y2FzZSBVRFBfRU5DQVBfR1RQMDpcbiA5MTU6XHRcdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAwIHBhY2tldFxcblwmIzM0Oyk7XG4gOTE2Olx0XHRcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xuIDkxNzpcdFx0XHRicmVhaztcbiA5MTg6XHRcdGNhc2UgVURQX0VOQ0FQX0dUUDFVOlxuIDkxOTpcdFx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O3JlY2VpdmVkIEdUUDFVIHBhY2tldFxcblwmIzM0Oyk7XG4gOTIwOlx0XHRcdHJldCA9IGd0cDF1X3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcbiA5MjE6XHRcdFx0YnJlYWs7XG4gOTIyOlx0XHRkZWZhdWx0OlxuIDkyMzpcdFx0XHRyZXQgPSAtMTsgLyogU2hvdWxkbiYjMzk7dCBoYXBwZW4uICovXG4gOTI0Olx0XHR9XG4gOTI1Olx0XG4gOTI2Olx0XHRzd2l0Y2ggKHJldCkge1xuIDkyNzpcdFx0Y2FzZSAxOlxuIDkyODpcdFx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O3Bhc3MgdXAgdG8gdGhlIHByb2Nlc3NcXG5cJiMzNDspO1xuIDkyOTpcdFx0XHRicmVhaztcbiA5MzA6XHRcdGNhc2UgMDpcbiA5MzE6XHRcdFx0YnJlYWs7XG4gOTMyOlx0XHRjYXNlIC0xOlxuIDkzMzpcdFx0XHRuZXRkZXZfZGJnKGd0cC1cdTAwM2VkZXYsIFwmIzM0O0dUUCBwYWNrZXQgaGFzIGJlZW4gZHJvcHBlZFxcblwmIzM0Oyk7XG4gOTM0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDkzNTpcdFx0XHRyZXQgPSAwO1xuIDkzNjpcdFx0XHRicmVhaztcbiA5Mzc6XHRcdH1cbiA5Mzg6XHRcbiA5Mzk6XHRcdHJldHVybiByZXQ7XG4gOTQwOlx0fVxuIDk0MTpcdFxuIDk0MjpcdHN0YXRpYyB2b2lkIGd0cF9kZXZfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gOTQzOlx0e1xuIDk0NDpcdFx0c3RydWN0IGd0cF9kZXYgKmd0cCA9IG5ldGRldl9wcml2KGRldik7XG4gOTQ1Olx0XG4gOTQ2Olx0XHRndHBfZW5jYXBfZGlzYWJsZShndHApO1xuIDk0NzpcdH1cbiA5NDg6XHRcbiA5NDk6XHRzdGF0aWMgaW5saW5lIHZvaWQgZ3RwMF9wdXNoX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGRwX2N0eCAqcGN0eClcbiA5NTA6XHR7XG4gOTUxOlx0XHRpbnQgcGF5bG9hZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzM1NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBHVFAgRW5jYXBzdWxhdGlvbiBSZXR1cm4gQ29kZXMqKgoKT2theSwgc28gYGd0cF9lbmNhcF9yZWN2YCBpcyBvbmx5IGdpdmluZyBtZSB0aHJlZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzOiAxLCAwLCBvciAtMS4gQW5kIEkga25vdyB0aGF0IC0xIGlzIHRoZW4gY29udmVydGVkIHRvIDAuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBidXQgbm90IHF1aXRlIHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBJdCYjMzk7cyBub3QgcmV0dXJuaW5nIGFueXRoaW5nIGxpa2UgYSBuZWdhdGl2ZSB2YWx1ZSBsZXNzIHRoYW4gemVybywgc3VjaCBhcyB3aGF0IEkmIzM5O2Qgc2VlIHdpdGggYC1JUFBST1RPX0lQSVBgLiBIbW0uLi4gaXQgc2VlbXMgbGlrZSBgTkVUX0ZPVWAgaXMgdGhlIGluZGljYXRvciBJIG5lZWQgdG8gZm9jdXMgb24gdGhlbi4KCkxldCYjMzk7cyBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgLiBTZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHRlbGxpbmcgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmV2ZV91ZHBfZW5jYXBfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz01NzA9c3RhdGljIGludCBnZW5ldmVfcG9zdF9kZWNhcF9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTAtLyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2NC91ZHAuYyB0byByZWNlaXZlIHBhY2tldHMgKi9cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjY1MTpzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTIte1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTAyNS1cdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjEwMjY6XHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBnZW5ldmVfdWRwX2VuY2FwX2Vycl9sb29rdXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIHNvbWUgZnVuY3Rpb24gaW52b2x2ZWQgaW4gcmVjZWl2aW5nIGVuY2Fwc3VsYXRlZCBHZW5ldmUgcGFja2V0cyBvdmVyIFVEUC4gVGhlIG5hbWUgaXRzZWxmIGdpdmVzIHVzIHRoYXQgbXVjaC4gR2l2ZW4gdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBlbmNhcHN1bGF0aW9uLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQ6IHdoYXQgYXJlIHRoZSBsaWtlbHkgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLCB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIG5ldHdvcmsgZmxvdywgYW5kIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHM/IElzIGl0IHBhcnQgb2YgdGhlIGZhc3QgcGF0aCwgb3IgaXMgaXQgbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBldmVuIGlmIGl0IGlzIG5vdCAqb24qIHRoZSBmYXN0IHBhdGg/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gaGFuZGxlIHBhcnNpbmcgdGhlIFVEUCBoZWFkZXIsIHZlcmlmeWluZyBpdHMgY2hlY2tzdW0sIGFuZCB0aGVuIHBlZWxpbmcgb2ZmIHRoZSBHZW5ldmUgaGVhZGVyIHRvIGdldCBhdCB0aGUgaW5uZXIgcGFja2V0LiBJIG5lZWQgdG8ga25vdyBob3cgaXQgaGFuZGxlcyBzaXR1YXRpb25zIGxpa2UgZnJhZ21lbnRlZCBVRFAgcGFja2V0cyBhbmQgaWYgaXQgaGFzIGFueSBzZWN1cml0eSBjaGVja3MgYXMgdGhlIEdlbmV2ZSBoZWFkZXIgY29udGFpbnMgbWV0YWRhdGEgdGhhdCBhIG1hbGljaW91cyBhY3RvciBtaWdodCBzZWVrIHRvIHVzZSB0byBjb21wcm9taXNlIGEgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGRlYWxzIHdpdGggbWFsZm9ybWVkIHBhY2tldHMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJJiMzOTtsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgcGF5bG9hZCBpcyBoYW5kZWQgb2ZmLiBEb2VzIGl0IGNvcHkgdGhlIGRhdGEsIG9yIHBhc3MgYSBwb2ludGVyPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBhbmQgdGhyZWFkIHNhZmV0eT8gSSBrbm93IGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgZW5jYXBzdWxhdGlvbiBmdW5jdGlvbnMgdG8gYmUgZWZmaWNpZW50LCBzbyBJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcywgdG9vLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjUxOlx0c3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDY1MjpcdHtcbiA2NTM6XHRcdHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWg7XG4gNjU0Olx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlO1xuIDY1NTpcdFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcbiA2NTY6XHRcdF9fYmUxNiBpbm5lcl9wcm90bztcbiA2NTc6XHRcdGludCBvcHRzX2xlbjtcbiA2NTg6XHRcbiA2NTk6XHRcdC8qIE5lZWQgVURQIGFuZCBHZW5ldmUgaGVhZGVyIHRvIGJlIHByZXNlbnQgKi9cbiA2NjA6XHRcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIEdFTkVWRV9CQVNFX0hMRU4pKSlcbiA2NjE6XHRcdFx0Z290byBkcm9wO1xuIDY2MjpcdFxuIDY2MzpcdFx0LyogUmV0dXJuIHBhY2tldHMgd2l0aCByZXNlcnZlZCBiaXRzIHNldCAqL1xuIDY2NDpcdFx0Z2VuZXZlaCA9IGdlbmV2ZV9oZHIoc2tiKTtcbiA2NjU6XHRcdGlmICh1bmxpa2VseShnZW5ldmVoLVx1MDAzZXZlciAhPSBHRU5FVkVfVkVSKSlcbiA2NjY6XHRcdFx0Z290byBkcm9wO1xuIDY2NzpcdFxuIDY2ODpcdFx0Z3MgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiA2Njk6XHRcdGlmICghZ3MpXG4gNjcwOlx0XHRcdGdvdG8gZHJvcDtcbiA2NzE6XHRcbiA2NzI6XHRcdGdlbmV2ZSA9IGdlbmV2ZV9sb29rdXBfc2tiKGdzLCBza2IpO1xuIDY3MzpcdFx0aWYgKCFnZW5ldmUpXG4gNjc0Olx0XHRcdGdvdG8gZHJvcDtcbiA2NzU6XHRcbiA2NzY6XHRcdGlubmVyX3Byb3RvID0gZ2VuZXZlaC1cdTAwM2Vwcm90b190eXBlO1xuIDY3NzpcdFxuIDY3ODpcdFx0aWYgKHVubGlrZWx5KCghZ2VuZXZlLVx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFx1MDAyNlx1MDAyNlxuIDY3OTpcdFx0XHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcbiA2ODA6XHRcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGdlbmV2ZS1cdTAwM2VkZXYpO1xuIDY4MTpcdFx0XHRnb3RvIGRyb3A7XG4gNjgyOlx0XHR9XG4gNjgzOlx0XG4gNjg0Olx0XHRvcHRzX2xlbiA9IGdlbmV2ZWgtXHUwMDNlb3B0X2xlbiAqIDQ7XG4gNjg1Olx0XHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBHRU5FVkVfQkFTRV9ITEVOICYjNDM7IG9wdHNfbGVuLCBpbm5lcl9wcm90byxcbiA2ODY6XHRcdFx0XHRcdCAhbmV0X2VxKGdlbmV2ZS1cdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVx1MDAzZWRldikpKSkge1xuIDY4NzpcdFx0XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoZ2VuZXZlLVx1MDAzZWRldik7XG4gNjg4Olx0XHRcdGdvdG8gZHJvcDtcbiA2ODk6XHRcdH1cbiA2OTA6XHRcbiA2OTE6XHRcdC8qXG4gNjkyOlx0XHQgKiBBZnRlciBoaW50IHByb2Nlc3NpbmcsIHRoZSB0cmFuc3BvcnQgaGVhZGVyIHBvaW50cyB0byB0aGUgaW5uZXIgb25lXG4gNjkzOlx0XHQgKiBhbmQgd2UgY2FuJiMzOTt0IHVzZSBhbnltb3JlIG9uIGdlbmV2ZV9oZHIoKS5cbiA2OTQ6XHRcdCAqL1xuIDY5NTpcdFx0Z2VuZXZlaCA9IGdlbmV2ZV9oZHIoc2tiKTtcbiA2OTY6XHRcdGlmIChnZW5ldmVfcG9zdF9kZWNhcF9oaW50KHNrLCBza2IsIHNpemVvZihzdHJ1Y3QgZ2VuZXZlaGRyKSAmIzQzO1xuIDY5NzpcdFx0XHRcdFx0ICAgb3B0c19sZW4sIFx1MDAyNmdlbmV2ZWgpKSB7XG4gNjk4Olx0XHRcdERFVl9TVEFUU19JTkMoZ2VuZXZlLVx1MDAzZWRldiwgcnhfZXJyb3JzKTtcbiA2OTk6XHRcdFx0Z290byBkcm9wO1xuIDcwMDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAgRnVuY3Rpb24mIzM5O3MgVGFpbCoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHRhaWwgZW5kIG9mIHRoZSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCBmdW5jdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNyaXRpY2FsIHBhdGggbGlrZWx5IHJldmVhbHMgaXRzZWxmLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgZXJyb3IgY29uZGl0aW9ucy4gSXQmIzM5O3MgdGhlIHBsYWNlIHdoZXJlIHRoZSBwcm9jZXNzZWQgcGFja2V0cyBhcmUgZmluYWxseSBoYW5kbGVkLCBhbmQgdGhpcyBpcyB3aGVyZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1pZ2h0IGJlIGx1cmtpbmcuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIGRhdGEgb25jZSBpdCYjMzk7cyBiZWVuIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQuIElzIGl0IG1lcmVseSBlbnF1ZXVpbmcsIG9yIGlzIHRoZXJlIG1vcmUgY29tcGxleCBwcm9jZXNzaW5nIGhhcHBlbmluZyB0aGF0IGNvdWxkIGJlIG9wdGltaXplZCwgb3IgZXZlbiBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gSXMgdGhlcmUgYW55IHBhY2tldCBhY2NvdW50aW5nIHBlcmZvcm1lZCBoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDE6XHRcbiA3MDI6XHRcdGdlbmV2ZV9yeChnZW5ldmUsIGdzLCBza2IsIGdlbmV2ZWgpO1xuIDcwMzpcdFx0cmV0dXJuIDA7XG4gNzA0Olx0XG4gNzA1Olx0ZHJvcDpcbiA3MDY6XHRcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xuIDcwNzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNzA4Olx0XHRyZXR1cm4gMDtcbiA3MDk6XHR9XG4gNzEwOlx0XG4gNzExOlx0LyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2ezQsNn0vdWRwLmMgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdHVubmVsIGZvciBlcnJvcnMgKi9cbiA3MTI6XHRzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gNzEzOlx0e1xuIDcxNDpcdFx0c3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaDtcbiA3MTU6XHRcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M7XG4gNzE2Olx0XHR1OCB6ZXJvX3ZuaVszXSA9IHsgMCB9O1xuIDcxNzpcdFx0dTggKnZuaSA9IHplcm9fdm5pO1xuIDcxODpcdFxuIDcxOTpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyBHRU5FVkVfQkFTRV9ITEVOKSlcbiA3MjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzIxOlx0XG4gNzIyOlx0XHRnZW5ldmVoID0gZ2VuZXZlX2hkcihza2IpO1xuIDcyMzpcdFx0aWYgKGdlbmV2ZWgtXHUwMDNldmVyICE9IEdFTkVWRV9WRVIpXG4gNzI0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDcyNTpcdFxuIDcyNjpcdFx0aWYgKGdlbmV2ZWgtXHUwMDNlcHJvdG9fdHlwZSAhPSBodG9ucyhFVEhfUF9URUIpKVxuIDcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3Mjg6XHRcbiA3Mjk6XHRcdGdzID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YShzayk7XG4gNzMwOlx0XHRpZiAoIWdzKVxuIDczMTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3MzI6XHRcbiA3MzM6XHRcdGlmIChnZW5ldmVfZ2V0X3NrX2ZhbWlseShncykgPT0gQUZfSU5FVCkge1xuIDczNDpcdFx0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuIDczNTpcdFx0XHRfX2JlMzIgYWRkcjQgPSAwO1xuIDczNjpcdFxuIDczNzpcdFx0XHRpZiAoIWdzLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiA3Mzg6XHRcdFx0XHR2bmkgPSBnZW5ldmVfaGRyKHNrYiktXHUwMDNldm5pO1xuIDczOTpcdFx0XHRcdGFkZHI0ID0gaXBoLVx1MDAzZWRhZGRyO1xuIDc0MDpcdFx0XHR9XG4gNzQxOlx0XG4gNzQyOlx0XHRcdHJldHVybiBnZW5ldmVfbG9va3VwKGdzLCBhZGRyNCwgdm5pKSA/IDAgOiAtRU5PRU5UO1xuIDc0MzpcdFx0fVxuIDc0NDpcdFxuIDc0NTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIDc0NjpcdFx0aWYgKGdlbmV2ZV9nZXRfc2tfZmFtaWx5KGdzKSA9PSBBRl9JTkVUNikge1xuIDc0NzpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gNzQ4Olx0XHRcdHN0cnVjdCBpbjZfYWRkciBhZGRyNjtcbiA3NDk6XHRcbiA3NTA6XHRcdFx0bWVtc2V0KFx1MDAyNmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDU3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRW5jYXBzdWxhdGlvbiBJc3N1ZSoqCgpIbW0sIHNvIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgIGlzIHJldHVybmluZyAwLiBUaGF0JiMzOTtzLi4uIG5vdCBpbW1lZGlhdGVseSBhbGFybWluZywgYnV0IGl0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFR5cGljYWxseSwgYSB6ZXJvIHJldHVybiBmcm9tIGEgcmVjZWl2ZSBmdW5jdGlvbiBpc24mIzM5O3QgYSAqZmFpbHVyZSosIGl0IHVzdWFsbHkgaW1wbGllcyBhIHN1Y2Nlc3NmdWwsIGJ1dCBwb3RlbnRpYWxseSBlbXB0eSwgcmVhZCBvciBzb21lIG90aGVyICYjMzQ7T0smIzM0OyBjb25kaXRpb24uIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpbiB0aGVzZSBlbmNhcHN1bGF0aW9uIHBhdGhzLCBhIHplcm8gcmV0dXJuICpjYW4qIG1hc2sgdW5kZXJseWluZyBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gY29ybmVyIGNhc2VzLgoKTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaWYgd2UmIzM5O3JlIHNlZWluZyBhbiB1bmV4cGVjdGVkIHplcm8gZnJvbSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCwgaXQgbWlnaHQgYmUgYW4gaXNzdWUgdGhhdCB3ZSBtaWdodCBvdGhlcndpc2UgY2F0Y2ggd2l0aCBgTkVUX0ZPVWAuICBJdCYjMzk7cyB2ZXJ5IGNvbW1vbiB0byBzZWUgdGhhdCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZS4gIFRoYXQmIzM5O3MgZ2VuZXJhbGx5IHRoZSBmdW5jdGlvbiBJJiMzOTtkIGV4cGVjdCB0byBmbGFnIHNvbWV0aGluZyBnb2luZyBhd3J5IGluIHRoZSBmcmFtZSBwcm9jZXNzaW5nLgoKTGV0IG1lIHN3aXRjaCBnZWFycyBhbmQgcXVpY2tseSBleGFtaW5lIGB2eGxhbl9yY3ZgLiBTaW5jZSBHZW5ldmUgYW5kIFZYTEFOIHNoYXJlIGEgc2ltaWxhciBhcmNoaXRlY3R1cmFsIHBhcmFkaWdtLCBhbmQgdGhlIGVuY2Fwc3VsYXRpb24gb3IgZGVjYXBzdWxhdGlvbiBwYXRocyBjYW4gZ2V0IHF1aXRlIGNvbXBsaWNhdGVkLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltbWVkaWF0ZSBjb3JyZWxhdGlvbiBvciBpZiB0aGUgYmVoYXZpb3IgbWlnaHQgYmUgc2ltaWxhciBpbiB0aGF0IGZ1bmN0aW9uLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGJhc2VsaW5lIGFuZCBhIGNvbXBhcmlzb24gcG9pbnQuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyBWWExBTiBoYW5kbGVzIHplcm8gcmV0dXJuIHZhbHVlcyBmb3IgY29ycmVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4bGFuX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTYyMj1zdGF0aWMgYm9vbCB2eGxhbl9lY25fZGVjYXBzdWxhdGUoc3RydWN0IHZ4bGFuX3NvY2sgKnZzLCB2b2lkICpvaXBoLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ1LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE2NDY6c3RhdGljIGludCB2eGxhbl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE2NDcte1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNTc3PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgaXB2Nixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzYxNC1cdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzYxNTpcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gdnhsYW5fcmN2O1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM2MTYtXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSB2eGxhbl9lcnJfbG9va3VwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdHVubmVsLmMtNDctICogIDQpIHZldGgwJiMzOTtzIGluZ3Jlc3MgcXVldWUgcmVjZWl2ZSB0aGUgdHVubmVsZWQgcGFja2V0IGF0IG5hbWVzcGFjZSBhdF9uczAuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3R1bm5lbC5jOjQ4OiAqICA1KSBUdW5uZWwgcHJvdG9jb2wgaGFuZGxlciwgZXg6IHZ4bGFuX3JjdiwgZGVjYXAgdGhlIHBhY2tldC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdHVubmVsLmMtNDktICogIDYpIEZvcndhcmQgdGhlIHBhY2tldCB0byB0aGUgb3ZlcmxheSB0bmwgZGV2LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg1NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgdnhsYW5fcmN2YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgdnhsYW5fcmN2YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBhbnN3ZXJzLiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgVnhMQU4gcmVjZWl2aW5nIHBhdGgsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY0NjpcdHN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE2NDc6XHR7XG4xNjQ4Olx0XHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUgPSBOVUxMO1xuMTY0OTpcdFx0Y29uc3Qgc3RydWN0IHZ4bGFuaGRyICp2aDtcbjE2NTA6XHRcdHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuO1xuMTY1MTpcdFx0c3RydWN0IHZ4bGFuX3NvY2sgKnZzO1xuMTY1MjpcdFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhIF9tZDtcbjE2NTM6XHRcdHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPSBcdTAwMjZfbWQ7XG4xNjU0Olx0XHRfX2JlMTYgcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9URUIpO1xuMTY1NTpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xuMTY1NjpcdFx0Ym9vbCByYXdfcHJvdG8gPSBmYWxzZTtcbjE2NTc6XHRcdHZvaWQgKm9pcGg7XG4xNjU4Olx0XHRfX2JlMzIgdm5pID0gMDtcbjE2NTk6XHRcdGludCBuaDtcbjE2NjA6XHRcbjE2NjE6XHRcdC8qIE5lZWQgVURQIGFuZCBWWExBTiBoZWFkZXIgdG8gYmUgcHJlc2VudCAqL1xuMTY2MjpcdFx0cmVhc29uID0gcHNrYl9tYXlfcHVsbF9yZWFzb24oc2tiLCBWWExBTl9ITEVOKTtcbjE2NjM6XHRcdGlmIChyZWFzb24pXG4xNjY0Olx0XHRcdGdvdG8gZHJvcDtcbjE2NjU6XHRcbjE2NjY6XHRcdHZoID0gdnhsYW5faGRyKHNrYik7XG4xNjY3Olx0XHQvKiBWTkkgZmxhZyBhbHdheXMgcmVxdWlyZWQgdG8gYmUgc2V0ICovXG4xNjY4Olx0XHRpZiAoISh2aC1cdTAwM2V2eF9mbGFncyBcdTAwMjYgVlhMQU5fSEZfVk5JKSkge1xuMTY2OTpcdFx0XHRuZXRkZXZfZGJnKHNrYi1cdTAwM2VkZXYsIFwmIzM0O2ludmFsaWQgdnhsYW4gZmxhZ3M9JSN4IHZuaT0lI3hcXG5cJiMzNDssXG4xNjcwOlx0XHRcdFx0ICAgbnRvaGwodmgtXHUwMDNldnhfZmxhZ3MpLCBudG9obCh2aC1cdTAwM2V2eF92bmkpKTtcbjE2NzE6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1ZYTEFOX0lOVkFMSURfSERSO1xuMTY3MjpcdFx0XHQvKiBSZXR1cm4gbm9uIHZ4bGFuIHBrdCAqL1xuMTY3MzpcdFx0XHRnb3RvIGRyb3A7XG4xNjc0Olx0XHR9XG4xNjc1Olx0XG4xNjc2Olx0XHR2cyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xuMTY3NzpcdFx0aWYgKCF2cylcbjE2Nzg6XHRcdFx0Z290byBkcm9wO1xuMTY3OTpcdFxuMTY4MDpcdFx0dm5pID0gdnhsYW5fdm5pKHZoLVx1MDAzZXZ4X3ZuaSk7XG4xNjgxOlx0XG4xNjgyOlx0XHR2eGxhbiA9IHZ4bGFuX3ZzX2ZpbmRfdm5pKHZzLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIHZuaSwgXHUwMDI2dm5pbm9kZSk7XG4xNjgzOlx0XHRpZiAoIXZ4bGFuKSB7XG4xNjg0Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9WWExBTl9WTklfTk9UX0ZPVU5EO1xuMTY4NTpcdFx0XHRnb3RvIGRyb3A7XG4xNjg2Olx0XHR9XG4xNjg3Olx0XG4xNjg4Olx0XHRpZiAodmgtXHUwMDNldnhfZmxhZ3MgXHUwMDI2IHZ4bGFuLVx1MDAzZWNmZy5yZXNlcnZlZF9iaXRzLnZ4X2ZsYWdzIHx8XG4xNjg5Olx0XHQgICAgdmgtXHUwMDNldnhfdm5pIFx1MDAyNiB2eGxhbi1cdTAwM2VjZmcucmVzZXJ2ZWRfYml0cy52eF92bmkpIHtcbjE2OTA6XHRcdFx0LyogSWYgdGhlIGhlYWRlciB1c2VzIGJpdHMgYmVzaWRlcyB0aG9zZSBlbmFibGVkIGJ5IHRoZVxuMTY5MTpcdFx0XHQgKiBuZXRkZXZpY2UgY29uZmlndXJhdGlvbiwgdHJlYXQgdGhpcyBhcyBhIG1hbGZvcm1lZCBwYWNrZXQuXG4xNjkyOlx0XHRcdCAqIFRoaXMgYmVoYXZpb3IgZGl2ZXJnZXMgZnJvbSBWWExBTiBSRkMgKFJGQzczNDgpIHdoaWNoXG4xNjkzOlx0XHRcdCAqIHN0aXB1bGF0ZXMgdGhhdCBiaXRzIGluIHJlc2VydmVkIGluIHJlc2VydmVkIGZpZWxkcyBhcmUgdG8gYmVcbjE2OTQ6XHRcdFx0ICogaWdub3JlZC4gVGhlIGFwcHJvYWNoIGhlcmUgbWFpbnRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aFxuMTY5NTpcdFx0XHQgKiBwcmV2aW91cyBzdGFjayBjb2RlLCBhbmQgYWxzbyBpcyBtb3JlIHJvYnVzdCBhbmQgcHJvdmlkZXMgYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg5MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdnhsYW5fcmN2OiBUaGUgRmluYWwgRnJvbnRpZXIgKGZvciBOb3cpKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRhaWwgZW5kIG9mIGB2eGxhbl9yY3ZgLiBJJiMzOTt2ZSBiZWVuIGRpc3NlY3RpbmcgdGhpcyBmdW5jdGlvbiBmb3IgYSB3aGlsZSBub3csIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgbWVudGFsIG1vZGVsIG9mIGl0cyBmaW5hbCBvcGVyYXRpb25zLiBXaGVyZSBkb2VzIHRoZSBkYXRhIGZpbmFsbHkgZ28/IFdoYXQmIzM5O3MgdGhlIHVsdGltYXRlIHBhdGggYWZ0ZXIgdGhlIGRlY2Fwc3VsYXRpb24gYW5kIGJhc2ljIGNoZWNrcz8gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gZ2xhcmluZyBpc3N1ZXMgb24gbXkgcmFkYXIuIElzIHRoZXJlIGFueXRoaW5nIGluIHRoaXMgY29kZSBwYXRoIHRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgcGVyaGFwcyBpbnRyb2R1Y2UgYSBzdWJ0bGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gaG93IGl0IGhhbmRsZXMgdGhlIGZpbmFsIHBhY2tldCBwbGFjZW1lbnQ/IEEgZmluYWwgcmV2aWV3IG9mIHRoZSBlbmQgb2YgdGhpcyBwcm9jZXNzIHNob3VsZCBjb21wbGV0ZSBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdGRldl9kc3RhdHNfcnhfYWRkKHZ4bGFuLVx1MDAzZWRldiwgc2tiLVx1MDAzZWxlbik7XG4xODAxOlx0XHR2eGxhbl92bmlmaWx0ZXJfY291bnQodnhsYW4sIHZuaSwgdm5pbm9kZSwgVlhMQU5fVk5JX1NUQVRTX1JYLCBza2ItXHUwMDNlbGVuKTtcbjE4MDI6XHRcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNnZ4bGFuLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbjE4MDM6XHRcbjE4MDQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTgwNTpcdFxuMTgwNjpcdFx0cmV0dXJuIDA7XG4xODA3Olx0XG4xODA4Olx0ZHJvcDpcbjE4MDk6XHRcdHJlYXNvbiA9IHJlYXNvbiA/OiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbjE4MTA6XHRcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xuMTgxMTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4xODEyOlx0XHRyZXR1cm4gMDtcbjE4MTM6XHR9XG4xODE0Olx0XG4xODE1Olx0c3RhdGljIGludCB2eGxhbl9lcnJfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE4MTY6XHR7XG4xODE3Olx0XHRzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbjtcbjE4MTg6XHRcdHN0cnVjdCB2eGxhbl9zb2NrICp2cztcbjE4MTk6XHRcdHN0cnVjdCB2eGxhbmhkciAqaGRyO1xuMTgyMDpcdFx0X19iZTMyIHZuaTtcbjE4MjE6XHRcbjE4MjI6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgVlhMQU5fSExFTikpXG4xODIzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyNDpcdFxuMTgyNTpcdFx0aGRyID0gdnhsYW5faGRyKHNrYik7XG4xODI2Olx0XG4xODI3Olx0XHRpZiAoIShoZHItXHUwMDNldnhfZmxhZ3MgXHUwMDI2IFZYTEFOX0hGX1ZOSSkpXG4xODI4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyOTpcdFxuMTgzMDpcdFx0dnMgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbjE4MzE6XHRcdGlmICghdnMpXG4xODMyOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTgzMzpcdFxuMTgzNDpcdFx0dm5pID0gdnhsYW5fdm5pKGhkci1cdTAwM2V2eF92bmkpO1xuMTgzNTpcdFx0dnhsYW4gPSB2eGxhbl92c19maW5kX3ZuaSh2cywgc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LCB2bmksIE5VTEwpO1xuMTgzNjpcdFx0aWYgKCF2eGxhbilcbjE4Mzc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xODM4Olx0XG4xODM5Olx0XHRyZXR1cm4gMDtcbjE4NDA6XHR9XG4xODQxOlx0XG4xODQyOlx0c3RhdGljIGludCBhcnBfcmVkdWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiB2bmkpXG4xODQzOlx0e1xuMTg0NDpcdFx0c3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuMTg0NTpcdFx0c3RydWN0IGFycGhkciAqcGFycDtcbjE4NDY6XHRcdHU4ICphcnBwdHIsICpzaGE7XG4xODQ3Olx0XHRfX2JlMzIgc2lwLCB0aXA7XG4xODQ4Olx0XHRzdHJ1Y3QgbmVpZ2hib3VyICpuO1xuMTg0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjg3OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbjogRGlzc2VjdGluZyB0aGUgVlhMQU4gUmVjZWl2ZSBQYXRoKioKCk9rYXksIHNvIGB2eGxhbl9yY3ZgIGlzIHJldHVybmluZyAwLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgaGl0dGluZyB0aGUgcmlnaHQgcGF0aCB0byBiZWdpbiB3aXRoLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGBORVRfRk9VYC4gTm93LCBob2xkIG9uLCBgQ09ORklHX05FVF9GT1VgIGlzIHRyaXN0YXRlLiBDb25zaWRlcmluZyB3aGF0IHRoZSB0ZXN0IHNjcmlwdCBpcyBkb2luZywgYW5kIHRoZSBtb2R1bGVzIGl0JiMzOTtzIGxvYWRpbmcsIGBmb3VgIGFuZCBgZm91NmAsIGl0IG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGVuYWJsZWQuCgpTbywgbGV0JiMzOTtzIGVuYWJsZSBgTkVUX0ZPVWAsIHRoYXQmIzM5O3MgYSBnaXZlbi4gV2UmIzM5O2xsIGFsc28gbmVlZCBgSVBWNl9GT1VgIGFuZCBgSVBWNl9GT1VfVFVOTkVMYCB0byBlbnN1cmUgd2UgY292ZXIgdGhlIElQdjYgc2lkZSBvZiB0aGluZ3MuIEdpdmVuIHRoZSBHUkUgdHVubmVscyBlbXBsb3llZCBpbiB0aGlzIHRlc3QsIHdlIHNob3VsZCBhbHNvIGVuYWJsZSBgTkVUX0lQR1JFYCBhbmQgYElQVjZfR1JFYCBhcyB3ZWxsLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ09ORklHX05FVF9JUEdSRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfSVBHUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O0lQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgQ09ORklHX0lQVjZfR1JFYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGxpa2VseSBrbmVlLWRlZXAgaW4gYSBuZXR3b3JraW5nLXJlbGF0ZWQgaXNzdWUsIHByb2JhYmx5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIHNvbWUgZm9ybSBvZiBuZXR3b3JrIHByb3RvY29sIGFuYWx5c2lzLiBUaGUgaW1tZWRpYXRlIG5lZWQgdG8gY2hlY2sgYENPTkZJR19JUFY2X0dSRWAgc3VnZ2VzdHMgSSYjMzk7bSBmb2N1c2luZyBvbiBJUHY2LW92ZXItR1JFIHR1bm5lbGluZy4gSXTigJlzIGEgY29yZSBjb21wb25lbnQgaW4gbWFueSBuZXR3b3JrIGFyY2hpdGVjdHVyZXMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIGNvbXBsZXggcm91dGluZyByZXF1aXJlbWVudHMsIHNvIHRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAuCgpJJiMzOTttIHByb2JhYmx5IGFza2luZyBteXNlbGYgYSBmZXcga2V5IHF1ZXN0aW9uczogSXMgSVB2Ni1vdmVyLUdSRSBlbmFibGVkIGluIHRoaXMgY29uZmlndXJhdGlvbj8gSWYgc28sIHdoYXQgYXJlIGl0cyBzZXR0aW5ncz8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIG1vZHVsZXM/IEFtIEkgZGVhbGluZyB3aXRoIGEgYnVpbGQgZmFpbHVyZSwgYSBydW50aW1lIGlzc3VlLCBvciBzaW1wbHkgYXR0ZW1wdGluZyB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGRpYWdub3N0aWMgb3IgZGVwbG95bWVudCBwdXJwb3Nlcz8gVGhpcyBsaW5lIG9mIHRoaW5raW5nIGhlbHBzIG1lIHF1aWNrbHkgbmFycm93IGRvd24gdGhlIHNjb3BlIGFuZCBzZWxlY3QgdGhlIGNvcnJlY3QgZGVidWdnaW5nIHN0cmF0ZWd5LCBvciBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBhY3Rpb25zLiBUaGUgYWJzZW5jZSBvZiB0aGlzIGtleSBmZWF0dXJlIG1heSBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIHRvIHNvbHZlIHRoZSBuZXR3b3JrIGNvbW11bmljYXRpb24gaXNzdWUgSSBhbSBmYWNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X0dSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gdGhlIG9uZSB3b3JraW5nIHRocm91Z2ggdGhpczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgSVAgVHVubmVsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBnb2FsIGlzIHRvIGdldCB0aGlzIElQIHR1bm5lbGluZyBzeXN0ZW0gdXAgYW5kIHJ1bm5pbmcuIFRoZSBpbml0aWFsIGNvbmZpZ3MgdG8gYWN0aXZhdGUgc2VlbSB0byBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgTkVUX0ZPVWAsIGBJUFY2X0ZPVWAsIGBJUFY2X0ZPVV9UVU5ORUxgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIFRob3NlIGNvdmVyIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgZm9yIGJvdGggZ2VuZXJpYyByb3V0aW5nIGVuY2Fwc3VsYXRpb24gYW5kIHRoZSBtb3JlIG1vZGVybiBGT1UgKFVEUCBlbmNhcHN1bGF0aW9uIG92ZXIgSVApIGFzcGVjdHMgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLgoKV2FpdCBhIHNlY29uZOKApiBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcsIGEgZGV0YWlsIHRoYXQmIzM5O3MgZXNzZW50aWFsIGZvciB0aGUgY29tcGxldGUgcGljdHVyZSBoZXJlLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nIHJlZ2FyZGluZyB0aGUgZmluZXIgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBGT1UgdHVubmVsaW5nPyBMZXQmIzM5O3MgY2hlY2sgYE5FVF9GT1VfSVBfVFVOTkVMU2AuIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIEZPVSBlbmNhcHN1bGF0aW9uIHdpdGhpbiBJUCB0dW5uZWxzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGRlcGVuZGVuY2llcy4gVGltZSB0byBjb25maXJtIHRoYXQmIzM5O3MgZW5hYmxlZCBhcyB3ZWxsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzIxPWNvbmZpZyBORVRfRk9VXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMjktXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cdGJvb2wgXCYjMzQ7SVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyNzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBORVRfRk9VX0lQX1RVTk5FTFMgSGVscCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhpcyBgTkVUX0ZPVV9JUF9UVU5ORUxTYCB0aGluZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uLCBvciBoZWxwIHRleHQsIGhhcyB0byBzYXkgYWJvdXQgaXQuIE5vIG5lZWQgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLCBJJiMzOTttIHN1cmUgc29tZW9uZSYjMzk7cyBkZXRhaWxlZCB0aGUgZnVuY3Rpb25hbGl0eSBhbmQgdXNhZ2Ugc29tZXdoZXJlLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtd3JpdHRlbiwgY2xlYXJseSBleHBsYWluaW5nIHRoZSBwdXJwb3NlLCBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycywgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4gMzMxOlx0XHRib29sIFwmIzM0O0lQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXCYjMzQ7XG4gMzMyOlx0XHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxuIDMzMzpcdFx0c2VsZWN0IE5FVF9GT1VcbiAzMzQ6XHRcdGhlbHBcbiAzMzU6XHRcdCAgQWxsb3cgY29uZmlndXJhdGlvbiBvZiBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24gZm9yIElQIHR1bm5lbHMuXG4gMzM2Olx0XHQgIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBJUCB0dW5uZWxzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZVxuIDMzNzpcdFx0ICBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24uXG4gMzM4Olx0XG4gMzM5Olx0Y29uZmlnIElORVRfQUhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBGT1UgYW5kIElQIFR1bm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyBvbiBjb25maWd1cmluZyBGT1UgZW5jYXBzdWxhdGlvbiBmb3IgSVAgdHVubmVscywgc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IEdSRSB0dW5uZWxzIGhlcmUuIFRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiB0byBnZXQgdGhhdCBmdW5jdGlvbmFsaXR5LCBJIGRlZmluaXRlbHkgbmVlZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJJiMzOTtsbCBhZGQgdGhhdCB0byB0aGUgY29uZmlndXJhdGlvbi4KCk5vdywgYSBjcnVjaWFsIG5leHQgc3RlcDogV2hhdCBhYm91dCBJUHY2PyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFuIGFuYWxvZ291cyBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgSVB2NiBzdXBwb3J0LCBlbnN1cmluZyBjb21wbGV0ZSBjb3ZlcmFnZS4gTGV0IG1lIHNlZSBpZiBzb21ldGhpbmcgc2ltaWxhciBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZPVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yMTA9Y29uZmlnIElQVjZfR1JFXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbm5ldC9pcHY2L0tjb25maWc6MjMwOlx0ZGVmYXVsdCBORVRfRk9VIFx1MDAyNlx1MDAyNiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbm5ldC9pcHY2L0tjb25maWc6MjM0Olx0ZGVmYXVsdCBORVRfRk9VX0lQX1RVTk5FTFMgXHUwMDI2XHUwMDI2IElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIzNS1cdHNlbGVjdCBJUFY2X1RVTk5FTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGT1UgTXVsdGljYXN0IFJlc3VibWlzc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBJUFY2X0ZPVWAgYW5kIGBJUFY2X0ZPVV9UVU5ORUxgIGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBgTkVUX0ZPVWAgYW5kIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBidXQgSSYjMzk7bGwgZXhwbGljaXRseSBsaXN0IGFsbCB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgY2xhcml0eTogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCk5vdywgbGV0JiMzOTtzIGdldCB0byB0aGUgaGVhcnQgb2YgaXQuIFRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC4gSXQmIzM5O3MgdG91Y2hpbmcgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBHb29kLCB0aG9zZSBhcmVuJiMzOTt0IG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGFyZSBzcGVjaWZpY2FsbHkgdGllZCB0byBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5LCB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBhbmQgbWFrZXMgYW5hbHlzaXMgZWFzaWVyLgoKVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgY2hhbmdlcyB0byB0ZXN0cyAoIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZWAsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2ApLCBidXQgdGhlIHJlYWwgbWVhdCBpcyBpbiB0aGUgY29yZSBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2lwdjQvdWRwLmNgIGFuZCBgbmV0L2lwdjYvdWRwLmNgLgoKSSYjMzk7bSB0aGlua2luZywgaXMgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZXZlbiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/IEFoLCB5ZXMsIGlmIHlvdSBzZW5kIGEgVURQIHBhY2tldCB0byBhIG11bHRpY2FzdCBhZGRyZXNzIGFuZCB5b3UgaGF2ZSBhIEZPVSB0dW5uZWwgY29uZmlndXJlZCB0byByZWNlaXZlIG9uIHRoYXQgcG9ydCwgaXQgd2lsbCwgb2YgY291cnNlLCB0cmlnZ2VyIHRoZSByZXN1Ym1pc3Npb24gcGF0aC4gTm93LCB0aGUgY29udGV4dCBpcyBjbGVhci4KClRoZSBjcnV4IG9mIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBidWcuIEl0IHNlZW1zIHRoYXQgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZW4mIzM5O3QgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLCBhbmQgd2VyZSBpbnN0ZWFkIGp1c3QgZ2V0dGluZyBjb25zdW1lZC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgYnVnIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2s7IGl0JiMzOTtzIGNoYW5naW5nIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMuIEl0IGRpcmVjdGx5IGFmZmVjdHMgdGhlIFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkuIEdpdmVuIHRoaXMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSBpbiBvcmRlciBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoaXMgbmV3IHJlc3VibWlzc2lvbiBwYXRoIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLgoKSW4gc3VtbWFyeSwgbXkgZm9jdXMgc3ltYm9scyBhcmU6IGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBORVRfRk9VYCwgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIGBJUFY2X0ZPVWAsIGBJUFY2X0ZPVV9UVU5ORUxgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIEFuZCBJIGJldHRlciBhZGQgYE5FVF9JUEdSRV9ERU1VWGAgdG8gdGhlIGNvbmZpZyBsaXN0IGp1c3QgaW4gY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTI6XHRjb25maWcgTkVUX0lQR1JFXG4gMTkzOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFwmIzM0O1xuIDE5NDpcdFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbiAxOTU6XHRcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG4gMTk2Olx0XHRoZWxwXG4gMTk3Olx0XHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXG4gMTk4Olx0XHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcbiAxOTk6XHRcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xuIDIwMDpcdFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xuIDIwMTpcdFx0ICBlbmNhcHN1bGF0aW5nIG9mIElQdjQgb3IgSVB2NiBvdmVyIGV4aXN0aW5nIElQdjQgaW5mcmFzdHJ1Y3R1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKklQR1JFIENvbmZpZ3VyYXRpb246IERlcGVuZGVuY2llcyAmYW1wOyBOZXh0IFN0ZXBzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBORVRfSVBHUkVgIGhlcmUuIEltbWVkaWF0ZWx5LCBpdCBjbGlja3MgdGhhdCBgTkVUX0lQR1JFYCBkZWZpbml0ZWx5IHJlbGllcyBvbiBgTkVUX0lQR1JFX0RFTVVYYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gVGhlcmVmb3JlLCBhIGRlZmluaXRpdmUgaW5jbHVzaW9uIG9mIGBORVRfSVBHUkVfREVNVVhgIGlzIHJlcXVpcmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBJUFY2X0dSRWAuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJJiMzOTttIHN1cmUgdGhlcmUgYXJlIHNvbWUgcmVsYXRpb25zaGlwcywgaXQmIzM5O3MgdGltZSB0byBjaGVjayB3aGF0JiMzOTtzIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0Y29uZmlnIElQVjZfR1JFXG4gMjExOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4gMjEyOlx0XHRzZWxlY3QgSVBWNl9UVU5ORUxcbiAyMTM6XHRcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG4gMjE0Olx0XHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxuIDIxNTpcdFx0aGVscFxuIDIxNjpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDIxNzpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMjE4Olx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgcGFydGljdWxhciB0dW5uZWxpbmcgZHJpdmVyIGltcGxlbWVudHNcbiAyMTk6XHRcdCAgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgYW5kIGF0IHRoaXMgdGltZSBhbGxvd3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY4OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZWR1Y3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBhbmQgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXJlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSVBWNl9HUkVgIGFsc28gcmVxdWlyZXMgYE5FVF9JUEdSRV9ERU1VWGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBkZW11bHRpcGxleGluZyBhc3BlY3QgaXMgY3J1Y2lhbC4KClNvLCB0aGUga2V5IGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgdGhlc2U6CgoqICAgYE5FVF9GT1VgCiogICBgTkVUX0ZPVV9JUF9UVU5ORUxTYAoqICAgYElQVjZfRk9VYAoqICAgYElQVjZfRk9VX1RVTk5FTGAKKiAgIGBORVRfSVBHUkVgCiogICBgTkVUX0lQR1JFX0RFTVVYYAoqICAgYElQVjZfR1JFYAoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGFyZSBzbmVha2lseSBpbnZvbHZlZCBoZXJlLgoKVGhlIHRlc3Qgc2NyaXB0IHVzZXMgYGlwIGZvdSBhZGQgcG9ydCA0Nzk3IGlwcHJvdG8gNDdgIHRvIHRlc3QgdGhlIG1vZHVsZSwgc28gSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgYGZvdWAgbW9kdWxlIGlzIGludm9sdmVkLCBvYnZpb3VzbHkuIFRoZSBzY3JpcHQgYWxzbyB1c2VzIGBpcCBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgLi4uIGVuY2FwIGZvdWAuIEhtbSwgdGhhdCB1c2VzIGBncmV0YXBgLiBBbmQgSSB3YXMgdGhpbmtpbmcgYGdyZXRhcGAgd2FzIHBhcnQgb2YgYE5FVF9JUEdSRWAuIFRoYXQgKmZlZWxzKiByaWdodCwgYnV0IGlzIHRoZXJlIGEgbnVhbmNlPyBIYW5nIG9uLCBpdCBzZWVtcyBgZ3JldGFwYCBtaWdodCBhY3R1YWxseSBiZSBwYXJ0IG9mIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIFRoYXQgY291bGQgY2hhbmdlIGV2ZXJ5dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA3Olx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcbiAyMDg6XHRcdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xuIDIwOTpcdFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXHUwMDI2XHUwMDI2IE5FVF9JUEdSRVxuIDIxMDpcdFx0aGVscFxuIDIxMTpcdFx0ICBPbmUgYXBwbGljYXRpb24gb2YgR1JFL0lQIGlzIHRvIGNvbnN0cnVjdCBhIGJyb2FkY2FzdCBXQU4gKFdpZGUgQXJlYVxuIDIxMjpcdFx0ICBOZXR3b3JrKSwgd2hpY2ggbG9va3MgbGlrZSBhIG5vcm1hbCBFdGhlcm5ldCBMQU4gKExvY2FsIEFyZWFcbiAyMTM6XHRcdCAgTmV0d29yayksIGJ1dCBjYW4gYmUgZGlzdHJpYnV0ZWQgYWxsIG92ZXIgdGhlIEludGVybmV0LiBJZiB5b3Ugd2FudFxuIDIxNDpcdFx0ICB0byBkbyB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDtJUCBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0OyBiZWxvdy5cbiAyMTU6XHRcbiAyMTY6XHRjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY1MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIEdSRSBCcm9hZGNhc3QgT3B0aW9ucyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEdSRSBhbmQgYnJvYWRjYXN0IHRyYWZmaWMuIFJpZ2h0LCBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIGVzc2VudGlhbCBmb3IgZW5hYmxpbmcgYnJvYWRjYXN0IEdSRSBvdmVyIElQLCBzcGVjaWZpY2FsbHkgZm9yIGBncmV0YXBgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0OyB3ZSBuZWVkIHRvIGluY2x1ZGUgaXQuCgpOb3csIHdoYXQgYWJvdXQgdGhlIElQdjYgc2lkZSBvZiB0aGluZ3M/IFdlJiMzOTt2ZSBnb3QgSVB2NCBjb3ZlcmVkLCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9uIHRoZSBJUHY2IGZyb250LiBJcyB0aGVyZSBhIHNpbWlsYXIgb3B0aW9uLCBhIGBJUFY2X0dSRV9CUk9BRENBU1RgIGVxdWl2YWxlbnQ/IEkmIzM5O2QgYmV0dGVyIGNoZWNrIHRoZSBgSVBWNl9HUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBzdXJlLiBOZWVkIHRvIGVuc3VyZSBmdWxsIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X0dSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3OTg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqQ2hlY2tpbmcgZm9yIElQVjZfR1JFX0JST0FEQ0FTVCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvciBwcmVzZW5jZSBvZiBgSVBWNl9HUkVfQlJPQURDQVNUYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllciBhbmQgbG9vayBpbnRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgZG9jdW1lbnRhdGlvbiwgb3IgY29kZSB0aGF0IHdvdWxkIGRlZmluZSB0aGlzIHNldHRpbmcuIElzIGl0IGEgZGVmaW5lZCBjb25zdGFudCBpbiBteSBjdXJyZW50IGVudmlyb25tZW50PyBJcyBpdCBwYXJ0IG9mIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGxpYnJhcnk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIEkgY2FuIHJlbGlhYmx5IHZlcmlmeSBpZiB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCBvciBzdXBwb3J0ZWQgYW5kIHdoYXQgaW1wYWN0IHRoYXQgc3VwcG9ydCBvciBsYWNrIG9mIHN1cHBvcnQgaGFzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBJIG5lZWQgdG8gdGFrZSBzcGVjaWZpYyBhY3Rpb24gYmFzZWQgb24gdGhlIHJlc3VsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9HUkVfQlJPQURDQVNUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxODAKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLgoKKipBbmFseXppbmcgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgdGhhdCYjMzk7cyBhIHF1aWNrIGFuZCBkZWNpc2l2ZSAmIzM0O05vJiMzNDsgYXMgYW4gaW5pdGlhbCBhc3Nlc3NtZW50LiBDbGVhcmx5LCB0aGUgcHJvYmxlbSBzdGF0ZW1lbnQgaXMgbGVhZGluZyBtZSBzb21ld2hlcmUuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBhbmQgYXNzZXNzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodHMgYnJpbmcgdG8gbWluZCB0aGVzZSBvcHRpb25zIEkga25vdyBmcm9tIGV4cGVyaWVuY2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHR1bm5lbGluZzogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYE5FVF9JUEdSRV9CUk9BRENBU1RgLCBhbmQgYElQVjZfR1JFYC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLiBXZSYjMzk7bGwgY2FsbCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzZXNzbWVudCAmIzM0O3NldC1yZXN1bHRzJiMzNDsgLSBJJiMzOTtsbCBuZWVkIHRvIHdvcmsgd2l0aCB0aG9zZSBsYXRlci4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7SVBWNl9GT1UmIzM0OywKICAgICYjMzQ7SVBWNl9GT1VfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0JST0FEQ0FTVCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZSBub3QgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgYnV0IHdlcmUgaW5zdGVhZCBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgKFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkpLiBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmVzdWJtaXNzaW9uIHBhdGggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VJiMzNDssCiAgICAmIzM0O0lQVjZfRk9VX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRV9CUk9BRENBU1QmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXImIzM0OywKICAgICYjMzQ7X191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIFVEUCBtdWx0aWNhc3QgcGFja2V0cyBlbmNhcHN1bGF0ZWQgaW4gRk9VIHdlcmUgbm90IHByb3Blcmx5IHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIGJ1dCB3ZXJlIGluc3RlYWQgY29uc3VtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIChVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5KS4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHJlc3VibWlzc2lvbiBwYXRoIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MDcuNTI0NjM5NDM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MTY0MDI2Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiSVBWNl9GT1VcIixcbiAgICBcIklQVjZfRk9VX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUEdSRV9CUk9BRENBU1RcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBVRFAgbXVsdGljYXN0IHBhY2tldHMgZW5jYXBzdWxhdGVkIGluIEZPVSB3ZXJlIG5vdCBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSBidXQgd2VyZSBpbnN0ZWFkIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayAoVURQIG11bHRpY2FzdCBkZWxpdmVyeSkuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTowNy41MjQ2NDU0OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODk5ODg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQyYzQzZjUwNWI5N2FmNGUyZWY3MDM5OWIzMTZlMGUzNDExYjU5ODZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDozNTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jXFxuaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3VkcC5jXFxuKysrIGIvbmV0L2lwdjQvdWRwLmNcXG5AQCAtMjQ3Niw2ICsyNDc2LDcgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuIFxcdGJvb2wgdXNlX2hhc2gyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aGFzaDJfYW55ID0gMDtcXG4gXFx0aGFzaDIgPSAwO1xcbkBAIC0yNTIwLDggKzI1MjEsOSBAQCBzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmaXJzdCkge1xcbi1cXHRcXHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRcXHRyZXQgPSB1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtcmV0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXFxuaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3VkcC5jXFxuKysrIGIvbmV0L2lwdjYvdWRwLmNcXG5AQCAtOTQ5LDYgKzk0OSw3IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7XFxuIFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbiBcXHRib29sIHVzZV9oYXNoMjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGhhc2gyX2FueSA9IDA7XFxuIFxcdGhhc2gyID0gMDtcXG5AQCAtOTk4LDggKzk5OSw5IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZpcnN0KSB7XFxuLVxcdFxcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFxcdTAwM2UgMClcXG4tXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0ID0gdWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uN2U5YWU5MzdjZmZhN2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTM5LDYgKzM5LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmliX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmluX2Fja19sYXQuc2ggXFxcXFxcbitcXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcXFxcbiBcXHRmcV9iYW5kX3BrdGxpbWl0LnNoIFxcXFxcXG4gXFx0Z3JlX2dzby5zaCBcXFxcXFxuIFxcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXFxuaW5kZXggZTFjZTM1YzJhYmJlZjMuLjk2ZmZmY2E2NTQ3YzlhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXFxuQEAgLTM4LDYgKzM4LDggQEAgQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bVxcbiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tXFxuIENPTkZJR19JUF9TQ1RQPW1cXG4gQ09ORklHX0lQVjY9eVxcbitDT05GSUdfSVBWNl9GT1U9bVxcbitDT05GSUdfSVBWNl9GT1VfVFVOTkVMPW1cXG4gQ09ORklHX0lQVjZfR1JFPW1cXG4gQ09ORklHX0lQVjZfSUxBPW1cXG4gQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcwMjEwZDM5ZmJhMzNkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2hcXG5AQCAtMCwwICsxLDE3MiBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IHRoYXQgVURQIGVuY2Fwc3VsYXRpb24gKEZPVSkgY29ycmVjdGx5IGhhbmRsZXMgcGFja2V0IHJlc3VibWl0XFxuKyMgd2hlbiBwYWNrZXRzIGFyZSBkZWxpdmVyZWQgdmlhIHRoZSBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5IHBhdGguXFxuKyNcXG4rIyBXaGVuIGEgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXQgYXJyaXZlcyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQLFxcbisjIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcigpIC8gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKCkgbXVzdCByZXN1Ym1pdFxcbisjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cXG4rIyBUaGlzIHRlc3QgdmVyaWZpZXMgYm90aCBJUHY0IGFuZCBJUHY2IHBhdGhzIGJ5IGNyZWF0aW5nIGEgRk9VL0dSRVRBUFxcbisjIHR1bm5lbCB3aXRoIGEgbXVsdGljYXN0IHJlbW90ZSBhZGRyZXNzIGFuZCBzZW5kaW5nIHBpbmcgdGhyb3VnaCBpdC5cXG4rI1xcbisjIFRoZSBlYXJseSBkZW11eCBvcHRpbWl6YXRpb24gY2FuIG1hc2sgdGhpcyBpc3N1ZSBieSByb3V0aW5nIHBhY2tldHMgdmlhXFxuKyMgdGhlIHVuaWNhc3QgcGF0aCAodWRwWzZdX3VuaWNhc3RfcmN2X3NrYiksIHNvIHdlIGRpc2FibGUgaXQgdG8gZm9yY2VcXG4rIyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cXG4rXFxuK3NvdXJjZSBsaWIuc2hcXG4rXFxuK05TRU5ERVI9XFxcIlxcXCJcXG4rTlJFQ1Y9XFxcIlxcXCJcXG4rXFxuK0ZPVV9QT1JUND00Nzk3XFxuK0ZPVV9QT1JUNj00Nzk4XFxuK01DQVNUND0yMzkuMC4wLjFcXG4rTUNBU1Q2PWZmMGU6OjFcXG4rXFxuK1RVTjRfUz0xOTIuMTY4Ljk5LjFcXG4rVFVONF9SPTE5Mi4xNjguOTkuMlxcbitUVU42X1M9MjAwMTpkYjg6OTk6OjFcXG4rVFVONl9SPTIwMDE6ZGI4Ojk5OjoyXFxuK1xcbitjbGVhbnVwKCkge1xcbitcXHRjbGVhbnVwX2FsbF9uc1xcbit9XFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rc2V0dXBfY29tbW9uKCkge1xcbitcXHRzZXR1cF9ucyBOU0VOREVSIE5SRUNWXFxuK1xcbitcXHQjIENyZWF0ZSB2ZXRoIHBhaXIgZGlyZWN0bHkgaW5zaWRlIG5hbWVzcGFjZXMgdG8gYXZvaWQgbmFtZVxcbitcXHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cXG4rXFx0aXAgbGluayBhZGQgdmV0aF9zIG5ldG5zIFxcXCIkTlNFTkRFUlxcXCIgdHlwZSB2ZXRoIFxcXFxcXG4rXFx0XFx0cGVlciBuYW1lIHZldGhfciBuZXRucyBcXFwiJE5SRUNWXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIHNldCB2ZXRoX3MgdXBcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgbGluayBzZXQgdmV0aF9yIHVwXFxuK1xcbitcXHQjIFNhbWUgc3lzY3RsIGNvbnRyb2xzIGVhcmx5IGRlbXV4IGZvciBib3RoIElQdjQgYW5kIElQdjYuXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiROUkVDVlxcXCIgc3lzY3RsIC13cSBuZXQuaXB2NC5pcF9lYXJseV9kZW11eD0wXFxuK31cXG4rXFxuK3NldHVwX2lwdjQoKSB7XFxuK1xcdCMgSVB2NCBGT1UgKENPTkZJR19ORVRfRk9VKSBpcyBidWlsdCBpbiBvbiBrZXJuZWxzIGNvbmZpZ3VyZWQgZm9yXFxuK1xcdCMgdGhlc2UgdGVzdHMsIHNvIG5vIG1vZHVsZSBsb2FkIGlzIG5lZWRlZCBoZXJlLlxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB2ZXRoX3NcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgMTAuMC4wLjIvMjQgZGV2IHZldGhfclxcbitcXG4rXFx0IyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlclxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCBcXFwiJE1DQVNUNC8zMlxcXCIgZGV2IHZldGhfciBhdXRvam9pblxcbitcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfc1xcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfclxcbitcXG4rXFx0IyBTZW5kZXI6IEdSRVRBUCB3aXRoIEZPVSBlbmNhcCAobm8gRk9VIGxpc3RlbmVyIG5lZWRlZCBvbiBUWCBzaWRlKVxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgYWRkIGVvdWRwNCB0eXBlIGdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNFxcXCIgbG9jYWwgMTAuMC4wLjEgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDRcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBcXFxcXFxuK1xcdFxcdGtleSBcXFwiJE1DQVNUNFxcXCJcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIHNldCBlb3VkcDQgdXBcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBhZGRyIGFkZCBcXFwiJFRVTjRfUy8yNFxcXCIgZGV2IGVvdWRwNFxcbitcXG4rXFx0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICsgR1JFVEFQXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiROUkVDVlxcXCIgaXAgZm91IGFkZCBwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBpcHByb3RvIDQ3XFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgYWRkIGVvdWRwNCB0eXBlIGdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNFxcXCIgbG9jYWwgMTAuMC4wLjIgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDRcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBcXFxcXFxuK1xcdFxcdGtleSBcXFwiJE1DQVNUNFxcXCJcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgbGluayBzZXQgZW91ZHA0IHVwXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIFxcXCIkVFVONF9SLzI0XFxcIiBkZXYgZW91ZHA0XFxuK1xcbitcXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcXG4rXFx0IyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLlxcbitcXHRsb2NhbCByZWN2X21hY1xcbitcXHRyZWN2X21hYz0kKGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgc2hvdyBlb3VkcDQgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBuZWlnaCBhZGQgXFxcIiRUVU40X1JcXFwiIGxsYWRkciBcXFwiJHJlY3ZfbWFjXFxcIiBkZXYgZW91ZHA0XFxuK31cXG4rXFxuK3NldHVwX2lwdjYoKSB7XFxuK1xcdCMgU2tpcCBjbGVhbmx5IGlmIElQdjYgb3IgdGhlIGZvdTYgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUuXFxuK1xcdFsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuIFxcXCIka3NmdF9za2lwXFxcIlxcbitcXHRtb2Rwcm9iZSAtcSBmb3U2IHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXFxuK1xcbitcXHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIFxcXCIkTUNBU1Q2LzEyOFxcXCIgZGV2IHZldGhfciBhdXRvam9pblxcbitcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfc1xcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfclxcbitcXG4rXFx0IyBTZW5kZXI6IGlwNmdyZXRhcCB3aXRoIEZPVSBlbmNhcFxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNlxcXCIgbG9jYWwgMjAwMTpkYjg6OjEgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDZcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBcXFxcXFxuK1xcdFxcdGtleSA0MlxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgc2V0IGVvdWRwNiB1cFxcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGFkZHIgYWRkIFxcXCIkVFVONl9TLzY0XFxcIiBkZXYgZW91ZHA2IG5vZGFkXFxuK1xcbitcXHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICsgaXA2Z3JldGFwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiROUkVDVlxcXCIgaXAgZm91IGFkZCBwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBpcHByb3RvIDQ3IC02XFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcXFxcXFxuK1xcdFxcdHJlbW90ZSBcXFwiJE1DQVNUNlxcXCIgbG9jYWwgMjAwMTpkYjg6OjIgXFxcXFxcbitcXHRcXHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXFxcIiRGT1VfUE9SVDZcXFwiIGVuY2FwLWRwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBcXFxcXFxuK1xcdFxcdGtleSA0MlxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNldCBlb3VkcDYgdXBcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgXFxcIiRUVU42X1IvNjRcXFwiIGRldiBlb3VkcDYgbm9kYWRcXG4rXFxuK1xcdCMgU3RhdGljIG5laWdoIG9uIHNlbmRlcjogbmVpZ2hib3IgZGlzY292ZXJ5IGNhbm5vdCB0cmF2ZXJzZSB0aGVcXG4rXFx0IyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLlxcbitcXHRsb2NhbCByZWN2X21hY1xcbitcXHRyZWN2X21hYz0kKGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBuZWlnaCBhZGQgXFxcIiRUVU42X1JcXFwiIGxsYWRkciBcXFwiJHJlY3ZfbWFjXFxcIiBkZXYgZW91ZHA2XFxuK31cXG4rXFxuK2dldF9yeF9wYWNrZXRzKCkge1xcbitcXHRsb2NhbCBkZXY9XFxcIiQxXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgLXMgbGluayBzaG93IFxcXCIkZGV2XFxcIiB8IGF3ayAnL1JYOi97Z2V0bGluZTsgcHJpbnQgJDJ9J1xcbit9XFxuK1xcbitydW5fcGluZ190ZXN0KCkge1xcbitcXHRsb2NhbCBmYW1pbHk9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBkZXY9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBkc3Q9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCBuYW1lPVxcXCIkNFxcXCJcXG4rXFx0bG9jYWwgY291bnQ9MTAwXFxuK1xcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxcbitcXG4rXFx0IyBXYXJtdXA6IGxldCBhbnkgaW5pdGlhbCBicm9hZGNhc3QvTkQgdHJhZmZpYyBzZXR0bGVcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5TRU5ERVJcXFwiIHBpbmcgXFxcIiRmYW1pbHlcXFwiIC1jIDEgLVcgMSBcXFwiJGRzdFxcXCIgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c2xlZXAgMVxcbitcXG4rXFx0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXFxcIiRkZXZcXFwiKVxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlNFTkRFUlxcXCIgcGluZyBcXFwiJGZhbWlseVxcXCIgLWkgMC4wMSAtYyAkY291bnQgLVcgMSBcXFwiJGRzdFxcXCIgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c2xlZXAgMVxcbitcXHRyeF9hZnRlcj0kKGdldF9yeF9wYWNrZXRzIFxcXCIkZGV2XFxcIilcXG4rXFxuK1xcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcXG4rXFxuK1xcdGlmIFsgXFxcIiRyeF9kZWx0YVxcXCIgLWdlIFxcXCIkY291bnRcXFwiIF07IHRoZW5cXG4rXFx0XFx0UkVUPSRrc2Z0X3Bhc3NcXG4rXFx0ZWxzZVxcbitcXHRcXHRSRVQ9JGtzZnRfZmFpbFxcbitcXHRmaVxcbitcXHRsb2dfdGVzdCBcXFwiJG5hbWUgKHJlY2VpdmVkICRyeF9kZWx0YS8kY291bnQpXFxcIlxcbit9XFxuK1xcbitzZXR1cF9jb21tb25cXG4rc2V0dXBfaXB2NFxcbitydW5fcGluZ190ZXN0IC00IGVvdWRwNCBcXFwiJFRVTjRfUlxcXCIgXFxcIkZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXRcXFwiXFxuK1xcbitpZiBzZXR1cF9pcHY2OyB0aGVuXFxuK1xcdHJ1bl9waW5nX3Rlc3QgLTYgZW91ZHA2IFxcXCIkVFVONl9SXFxcIiBcXFwiRk9VL2lwNmdyZXRhcCBJUHY2IG11bHRpY2FzdCBlbmNhcCByZXN1Ym1pdFxcXCJcXG4rZWxzZVxcbitcXHRsb2dfdGVzdF9za2lwIFxcXCJGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XFxcIlxcbitmaVxcbitcXG4rZXhpdCBcXFwiJEVYSVRfU1RBVFVTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTowOC4xNDQ0MjQzNTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzU0NDIyNTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRk9VXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIixcbiAgICBcIklQVjZfRk9VXCIsXG4gICAgXCJJUFY2X0ZPVV9UVU5ORUxcIixcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJORVRfSVBHUkVfQlJPQURDQVNUXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdWRwNF9saWJfbWNhc3RfZGVsaXZlclwiLFxuICAgIFwiX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgVURQIG11bHRpY2FzdCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBGT1Ugd2VyZSBub3QgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgYnV0IHdlcmUgaW5zdGVhZCBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgKFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkpLiBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcmVzdWJtaXNzaW9uIHBhdGggaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmM0M2Y1MDViOTdhZjRlMmVmNzAzOTliMzE2ZTBlMzQxMWI1OTg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDozNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmNcbmluZGV4IDU5MjQ4YTU5MzU4Y2E1Li5kM2RkY2JmYzg0NzcxYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcC5jXG4rKysgYi9uZXQvaXB2NC91ZHAuY1xuQEAgLTI0NzYsNiArMjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90O1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRib29sIHVzZV9oYXNoMjtcbitcdGludCByZXQ7XG4gXG4gXHRoYXNoMl9hbnkgPSAwO1xuIFx0aGFzaDIgPSAwO1xuQEAgLTI1MjAsOCArMjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdGlmIChmaXJzdCkge1xuLVx0XHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0ID0gdWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIC1yZXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTk0OSw2ICs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aGFzaDJfYW55ID0gMDtcbiBcdGhhc2gyID0gMDtcbkBAIC05OTgsOCArOTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFx1MDAzZSAwKVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0zOSw2ICszOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXG4gXHRmaWJfdGVzdHMuc2ggXFxcbiBcdGZpbl9hY2tfbGF0LnNoIFxcXG4rXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcbiBcdGZxX2JhbmRfcGt0bGltaXQuc2ggXFxcbiBcdGdyZV9nc28uc2ggXFxcbiBcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXG5pbmRleCBlMWNlMzVjMmFiYmVmMy4uOTZmZmZjYTY1NDdjOWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnXG5AQCAtMzgsNiArMzgsOCBAQCBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tXG4gQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bVxuIENPTkZJR19JUF9TQ1RQPW1cbiBDT05GSUdfSVBWNj15XG4rQ09ORklHX0lQVjZfRk9VPW1cbitDT05GSUdfSVBWNl9GT1VfVFVOTkVMPW1cbiBDT05GSUdfSVBWNl9HUkU9bVxuIENPTkZJR19JUFY2X0lMQT1tXG4gQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUw9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcwMjEwZDM5ZmJhMzNkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5AQCAtMCwwICsxLDE3MiBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcbisjIHdoZW4gcGFja2V0cyBhcmUgZGVsaXZlcmVkIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLlxuKyNcbisjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXG4rIyBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoKSAvIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcigpIG11c3QgcmVzdWJtaXRcbisjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cbisjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXG4rIyB0dW5uZWwgd2l0aCBhIG11bHRpY2FzdCByZW1vdGUgYWRkcmVzcyBhbmQgc2VuZGluZyBwaW5nIHRocm91Z2ggaXQuXG4rI1xuKyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcbisjIHRoZSB1bmljYXN0IHBhdGggKHVkcFs2XV91bmljYXN0X3Jjdl9za2IpLCBzbyB3ZSBkaXNhYmxlIGl0IHRvIGZvcmNlXG4rIyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cbitcbitzb3VyY2UgbGliLnNoXG4rXG4rTlNFTkRFUj1cIlwiXG4rTlJFQ1Y9XCJcIlxuK1xuK0ZPVV9QT1JUND00Nzk3XG4rRk9VX1BPUlQ2PTQ3OThcbitNQ0FTVDQ9MjM5LjAuMC4xXG4rTUNBU1Q2PWZmMGU6OjFcbitcbitUVU40X1M9MTkyLjE2OC45OS4xXG4rVFVONF9SPTE5Mi4xNjguOTkuMlxuK1RVTjZfUz0yMDAxOmRiODo5OTo6MVxuK1RVTjZfUj0yMDAxOmRiODo5OTo6MlxuK1xuK2NsZWFudXAoKSB7XG4rXHRjbGVhbnVwX2FsbF9uc1xuK31cbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK3NldHVwX2NvbW1vbigpIHtcbitcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcbitcbitcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXG4rXHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cbitcdGlwIGxpbmsgYWRkIHZldGhfcyBuZXRucyBcIiROU0VOREVSXCIgdHlwZSB2ZXRoIFxcXG4rXHRcdHBlZXIgbmFtZSB2ZXRoX3IgbmV0bnMgXCIkTlJFQ1ZcIlxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIGxpbmsgc2V0IHZldGhfcyB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBsaW5rIHNldCB2ZXRoX3IgdXBcbitcbitcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cbitcdGlwIG5ldG5zIGV4ZWMgXCIkTlJFQ1ZcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcbit9XG4rXG4rc2V0dXBfaXB2NCgpIHtcbitcdCMgSVB2NCBGT1UgKENPTkZJR19ORVRfRk9VKSBpcyBidWlsdCBpbiBvbiBrZXJuZWxzIGNvbmZpZ3VyZWQgZm9yXG4rXHQjIHRoZXNlIHRlc3RzLCBzbyBubyBtb2R1bGUgbG9hZCBpcyBuZWVkZWQgaGVyZS5cbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCAxMC4wLjAuMS8yNCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3JcbitcbitcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbitcdGlwIC1uIFwiJE5SRUNWXCIgYWRkciBhZGQgXCIkTUNBU1Q0LzMyXCIgZGV2IHZldGhfciBhdXRvam9pblxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yXG4rXG4rXHQjIFNlbmRlcjogR1JFVEFQIHdpdGggRk9VIGVuY2FwIChubyBGT1UgbGlzdGVuZXIgbmVlZGVkIG9uIFRYIHNpZGUpXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMSBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBzZXQgZW91ZHA0IHVwXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgXCIkVFVONF9TLzI0XCIgZGV2IGVvdWRwNFxuK1xuK1x0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICsgR1JFVEFQXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNFwiIGlwcHJvdG8gNDdcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNCB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU40X1IvMjRcIiBkZXYgZW91ZHA0XG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcbitcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbitcdGxvY2FsIHJlY3ZfbWFjXG4rXHRyZWN2X21hYz0kKGlwIC1uIFwiJE5SRUNWXCIgbGluayBzaG93IGVvdWRwNCB8IGF3ayAnL2V0aGVyL3twcmludCAkMn0nKVxuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIG5laWdoIGFkZCBcIiRUVU40X1JcIiBsbGFkZHIgXCIkcmVjdl9tYWNcIiBkZXYgZW91ZHA0XG4rfVxuK1xuK3NldHVwX2lwdjYoKSB7XG4rXHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IG9yIHRoZSBmb3U2IG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdG1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXG4rXG4rXHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIFwiJE1DQVNUNi8xMjhcIiBkZXYgdmV0aF9yIGF1dG9qb2luXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcbitcdGlwIC1uIFwiJE5SRUNWXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcbitcbitcdCMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcbitcdFx0cmVtb3RlIFwiJE1DQVNUNlwiIGxvY2FsIDIwMDE6ZGI4OjoxIFxcXG4rXHRcdGVuY2FwIGZvdSBlbmNhcC1zcG9ydCBcIiRGT1VfUE9SVDZcIiBlbmNhcC1kcG9ydCBcIiRGT1VfUE9SVDZcIiBcXFxuK1x0XHRrZXkgNDJcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIHNldCBlb3VkcDYgdXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCBcIiRUVU42X1MvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICsgaXA2Z3JldGFwXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNlwiIGlwcHJvdG8gNDcgLTZcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDZcIiBsb2NhbCAyMDAxOmRiODo6MiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ2XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ2XCIgXFxcbitcdFx0a2V5IDQyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNiB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU42X1IvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXG4rXHQjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuXG4rXHRsb2NhbCByZWN2X21hY1xuK1x0cmVjdl9tYWM9JChpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBuZWlnaCBhZGQgXCIkVFVONl9SXCIgbGxhZGRyIFwiJHJlY3ZfbWFjXCIgZGV2IGVvdWRwNlxuK31cbitcbitnZXRfcnhfcGFja2V0cygpIHtcbitcdGxvY2FsIGRldj1cIiQxXCJcbitcbitcdGlwIC1uIFwiJE5SRUNWXCIgLXMgbGluayBzaG93IFwiJGRldlwiIHwgYXdrICcvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0nXG4rfVxuK1xuK3J1bl9waW5nX3Rlc3QoKSB7XG4rXHRsb2NhbCBmYW1pbHk9XCIkMVwiXG4rXHRsb2NhbCBkZXY9XCIkMlwiXG4rXHRsb2NhbCBkc3Q9XCIkM1wiXG4rXHRsb2NhbCBuYW1lPVwiJDRcIlxuK1x0bG9jYWwgY291bnQ9MTAwXG4rXHRsb2NhbCByeF9iZWZvcmUgcnhfYWZ0ZXIgcnhfZGVsdGFcbitcbitcdCMgV2FybXVwOiBsZXQgYW55IGluaXRpYWwgYnJvYWRjYXN0L05EIHRyYWZmaWMgc2V0dGxlXG4rXHRpcCBuZXRucyBleGVjIFwiJE5TRU5ERVJcIiBwaW5nIFwiJGZhbWlseVwiIC1jIDEgLVcgMSBcIiRkc3RcIiBcXFxuK1x0XHRcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdHNsZWVwIDFcbitcbitcdHJ4X2JlZm9yZT0kKGdldF9yeF9wYWNrZXRzIFwiJGRldlwiKVxuK1x0aXAgbmV0bnMgZXhlYyBcIiROU0VOREVSXCIgcGluZyBcIiRmYW1pbHlcIiAtaSAwLjAxIC1jICRjb3VudCAtVyAxIFwiJGRzdFwiIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0c2xlZXAgMVxuK1x0cnhfYWZ0ZXI9JChnZXRfcnhfcGFja2V0cyBcIiRkZXZcIilcbitcbitcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcbitcbitcdGlmIFsgXCIkcnhfZGVsdGFcIiAtZ2UgXCIkY291bnRcIiBdOyB0aGVuXG4rXHRcdFJFVD0ka3NmdF9wYXNzXG4rXHRlbHNlXG4rXHRcdFJFVD0ka3NmdF9mYWlsXG4rXHRmaVxuK1x0bG9nX3Rlc3QgXCIkbmFtZSAocmVjZWl2ZWQgJHJ4X2RlbHRhLyRjb3VudClcIlxuK31cbitcbitzZXR1cF9jb21tb25cbitzZXR1cF9pcHY0XG4rcnVuX3BpbmdfdGVzdCAtNCBlb3VkcDQgXCIkVFVONF9SXCIgXCJGT1UvR1JFVEFQIElQdjQgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCJcbitcbitpZiBzZXR1cF9pcHY2OyB0aGVuXG4rXHRydW5fcGluZ190ZXN0IC02IGVvdWRwNiBcIiRUVU42X1JcIiBcIkZPVS9pcDZncmV0YXAgSVB2NiBtdWx0aWNhc3QgZW5jYXAgcmVzdWJtaXRcIlxuK2Vsc2VcbitcdGxvZ190ZXN0X3NraXAgXCJGT1UvaXA2Z3JldGFwIElQdjYgbXVsdGljYXN0IGVuY2FwIHJlc3VibWl0XCJcbitmaVxuK1xuK2V4aXQgXCIkRVhJVF9TVEFUVVNcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MDguMTQ0NDI1OTg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzNTIzNDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVRFAgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuICBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB3ZSBoYW5kbGUgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGFuZCBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aWNhc3QuXG5cblByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgaWYgYHVkcF9xdWV1ZV9yY3Zfc2tiYCByZXR1cm5lZCBhIHBvc2l0aXZlIHZhbHVlIChpbXBseWluZyBhbiBlcnJvciwgSSBhc3N1bWUpLCB0aGUgY2FsbGluZyBmdW5jdGlvbiB3b3VsZCBqdXN0IGBjb25zdW1lX3NrYihza2IpYC4gTm93LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGByZXRgIHZhcmlhYmxlIGFuZCBleHBsaWNpdGx5IGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBgcmV0YCBpcyBncmVhdGVyIHRoYW4gemVybywgaXQgKnJldHVybnMqIGEgbmVnYXRlZCBgcmV0YCAoaW4gSVB2NCkgb3IganVzdCBgcmV0YCAoaW4gSVB2NikuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZy5cblxuVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIHByb3BhZ2F0ZSBlcnJvciBjb25kaXRpb25zIGZyb20gdGhlIHF1ZXVpbmcgc3RhZ2UgdXAgdG8gdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBsYXllci4gSSdtIGd1ZXNzaW5nIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBzaWxlbnRseSBkcm9wcGluZyBwYWNrZXRzIGluIGVycm9yIGNhc2VzLCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIG1ha2UgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgZXhwbGljaXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gV2h5IGFyZSB3ZSBwcm9wYWdhdGluZyB0aGVzZSBlcnJvciBjb2Rlcz8gIFdoYXQgZG8gdGhlc2UgZXJyb3IgY29kZXMgcmVwcmVzZW50PyBJdOKAmXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgd2hhdCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIGJ1dCB3aGF0ZXZlciB0aGV5IGFyZSwgdGhlIHBhdGNoIGlzIGNsZWFybHkgdHJ5aW5nIHRvIHNpZ25hbCBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsIHRoYW4gYSBzaW1wbGUgZGlzY2FyZC5cblxuTGV0IG1lIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBhcmUgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucycgcmV0dXJuIHZhbHVlcyBhcmUgdXNlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY2hhbmdlIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNToxNC4xNzk2NjI4MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTY1ODE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MjQ0OD1ib29sIHVkcF9za19yeF9kc3Rfc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjQ2NC0gKi9cXG5uZXQvaXB2NC91ZHAuYzoyNDY1OnN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC91ZHAuYy0yNDY2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdWRwaGRyICAqdWgsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNTkxPWludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNjQ5LVxcdGlmIChydC1cXHUwMDNlcnRfZmxhZ3MgXFx1MDAyNiAoUlRDRl9CUk9BRENBU1R8UlRDRl9NVUxUSUNBU1QpKVxcbm5ldC9pcHY0L3VkcC5jOjI2NTA6XFx0XFx0cmV0dXJuIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgdWgsIHNhZGRyLCBkYWRkcik7XFxubmV0L2lwdjQvdWRwLmMtMjY1MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2gtNy0jIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaDo4OiMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaC05LSMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNToxNi42NzUzMjcxMzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5NDM2OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEZWNvZGluZyB0aGUgVURQIFJlY2VpdmUgRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIGRvd24gdGhpcyBtdWx0aWNhc3QgZGVsaXZlcnkgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJldHVybiB2YWx1ZSBvZiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyBjcml0aWNhbCwgcmlnaHQ/IFRoYXQncyB3aGF0IGB1ZHBfcmN2YCBpcyBwYXNzaW5nIGJhY2suIFJpZ2h0LCBgdWRwX3JjdmAgaXMgdGhlIElQdjQgVURQIHJlY2VpdmUgaGFuZGxlciwgc28gaXQgbWFrZXMgc2Vuc2UgaXQncyB0aGUgZ2F0ZWtlZXBlci4gSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCBraW5kIG9mIHR5cGUgYHVkcF9yY3ZgIHJldHVybnMuLi4gSXQgcmV0dXJucyBhbiBgaW50YC4gT2theSwgZ290IGl0LlxuXG5UaW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZzogSSBuZWVkIHRvIG9wZW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCBgdWRwX3JjdmAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgYW5kIEknbGwgc2VlIGhvdyB0aGF0IHJldHVybiB2YWx1ZSBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmxvdyBpcyBlc3NlbnRpYWwgdG8gb3B0aW1pemUgVURQIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgd2hhdCB0aGF0IGBpbnRgIHNpZ25pZmllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjE5Ljk3NDc2NTkyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcyNDIwNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB1ZHBfcmN2XFxcXChzdHJ1Y3Qgc2tfYnVmZiBcXFxcKnNrYlxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3VkcC5oPTQyMj12b2lkIHVkcDRfaHdjc3VtKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QpO1xcbmluY2x1ZGUvbmV0L3VkcC5oOjQyMzppbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC91ZHAuaC00MjQtaW50IHVkcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZyk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNTY5PXN0YXRpYyBpbnQgdWRwX3VuaWNhc3RfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNTkwLVxcbm5ldC9pcHY0L3VkcC5jOjI1OTE6aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC91ZHAuYy0yNTkyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MjIuODQ3MTkxMTU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNjgwNTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRFAgUmVjZWl2ZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gYXQgdGhlIHJlY2VpdmluZyBlbmQgb2YgYSBVRFAgZGF0YWdyYW0uIExldCdzIHN0YXJ0IHdpdGggYHVkcF9yY3ZgIOKAkyB0aGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBleGFtaW5lIGluIGBuZXQvaXB2NC91ZHAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciwgbW9yZSBhY2N1cmF0ZWx5LCB0aGUgcHJlZGljdGFibGUgcHJvY2Vzcykgb2YgaGFuZGxpbmcgaW5jb21pbmcgVURQIHBhY2tldHMgcmVhbGx5IGJlZ2lucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZsb3cgY29udHJvbC4uLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNToyNi4zNTM5OTgzNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU5MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1OTE6XFx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yNTkyOlxcdHtcXG4yNTkzOlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbjI1OTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMjU5NTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xcbjI1OTY6XFx0XFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcXG4yNTk3OlxcdFxcdF9fYmUzMiBzYWRkciwgZGFkZHI7XFxuMjU5ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4yNTk5OlxcdFxcdGJvb2wgcmVmY291bnRlZDtcXG4yNjAwOlxcdFxcdGludCBkcm9wX3JlYXNvbjtcXG4yNjAxOlxcdFxcbjI2MDI6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4yNjAzOlxcdFxcbjI2MDQ6XFx0XFx0LypcXG4yNjA1OlxcdFxcdCAqICBWYWxpZGF0ZSB0aGUgcGFja2V0LlxcbjI2MDY6XFx0XFx0ICovXFxuMjYwNzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpKVxcbjI2MDg6XFx0XFx0XFx0Z290byBkcm9wO1xcdFxcdC8qIE5vIHNwYWNlIGZvciBoZWFkZXIuICovXFxuMjYwOTpcXHRcXG4yNjEwOlxcdFxcdHVoICAgPSB1ZHBfaGRyKHNrYik7XFxuMjYxMTpcXHRcXHR1bGVuID0gbnRvaHModWgtXFx1MDAzZWxlbik7XFxuMjYxMjpcXHRcXHRzYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4yNjEzOlxcdFxcdGRhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbjI2MTQ6XFx0XFxuMjYxNTpcXHRcXHRpZiAodWxlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjI2MTY6XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYxNzpcXHRcXG4yNjE4OlxcdFxcdGlmICh1bGVuIFxcdTAwM2Mgc2l6ZW9mKCp1aCkpXFxuMjYxOTpcXHRcXHRcXHRnb3RvIHNob3J0X3BhY2tldDtcXG4yNjIwOlxcdFxcbjI2MjE6XFx0XFx0aWYgKHVsZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbjI2MjI6XFx0XFx0XFx0aWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHVsZW4pKVxcbjI2MjM6XFx0XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbjI2MjY6XFx0XFx0fVxcbjI2Mjc6XFx0XFxuMjYyODpcXHRcXHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXFxuMjYyOTpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMjYzMDpcXHRcXG4yNjMxOlxcdFxcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cXHUwMDNlc291cmNlLCBkYWRkciwgdWgtXFx1MDAzZWRlc3QsXFxuMjYzMjpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZWZjb3VudGVkLCB1ZHBfZWhhc2hmbik7XFxuMjYzMzpcXHRcXHRpZiAoSVNfRVJSKHNrKSlcXG4yNjM0OlxcdFxcdFxcdGdvdG8gbm9fc2s7XFxuMjYzNTpcXHRcXG4yNjM2OlxcdFxcdGlmIChzaykge1xcbjI2Mzc6XFx0XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xcbjI2Mzg6XFx0XFx0XFx0aW50IHJldDtcXG4yNjM5OlxcdFxcbjI2NDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZShzay1cXHUwMDNlc2tfcnhfZHN0KSAhPSBkc3QpKVxcbjI2NDE6XFx0XFx0XFx0XFx0dWRwX3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XFxuMjY0MjpcXHRcXG4yNjQzOlxcdFxcdFxcdHJldCA9IHVkcF91bmljYXN0X3Jjdl9za2Ioc2ssIHNrYiwgdWgpO1xcbjI2NDQ6XFx0XFx0XFx0aWYgKHJlZmNvdW50ZWQpXFxuMjY0NTpcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuMjY0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRpZiAocnQtXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcXG4yNjUwOlxcdFxcdFxcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRzayA9IF9fdWRwNF9saWJfbG9va3VwX3NrYihza2IsIHVoLVxcdTAwM2Vzb3VyY2UsIHVoLVxcdTAwM2VkZXN0KTtcXG4yNjUzOlxcdFxcdGlmIChzaylcXG4yNjU0OlxcdFxcdFxcdHJldHVybiB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcXG4yNjU1OlxcdG5vX3NrOlxcbjI2NTY6XFx0XFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpXFxuMjY1NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjY1ODpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbjI2NTk6XFx0XFxuMjY2MDpcXHRcXHQvKiBObyBzb2NrZXQuIERyb3AgcGFja2V0IHNpbGVudGx5LCBpZiBjaGVja3N1bSBpcyB3cm9uZyAqL1xcbjI2NjE6XFx0XFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4yNjYyOlxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbjI2NjU6XFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9OT1BPUlRTKTtcXG4yNjY2OlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxuMjY2NzpcXHRcXG4yNjY4OlxcdFxcdC8qXFxuMjY2OTpcXHRcXHQgKiBIbW0uICBXZSBnb3QgYW4gVURQIHBhY2tldCB0byBhIHBvcnQgdG8gd2hpY2ggd2VcXG4yNjcwOlxcdFxcdCAqIGRvbid0IHdhbm5hIGxpc3Rlbi4gIElnbm9yZSBpdC5cXG4yNjcxOlxcdFxcdCAqL1xcbjI2NzI6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcXG4yNjczOlxcdFxcdHJldHVybiAwO1xcbjI2NzQ6XFx0XFxuMjY3NTpcXHRzaG9ydF9wYWNrZXQ6XFxuMjY3NjpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbjI2Nzc6XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiVURQOiBzaG9ydCBwYWNrZXQ6IEZyb20gJXBJNDoldSAlZC8lZCB0byAlcEk0OiV1XFxcXG5cXFwiLFxcbjI2Nzg6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzYWRkciwgbnRvaHModWgtXFx1MDAzZXNvdXJjZSksXFxuMjY3OTpcXHRcXHRcXHRcXHQgICAgdWxlbiwgc2tiLVxcdTAwM2VsZW4sXFxuMjY4MDpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cXHUwMDNlZGVzdCkpO1xcbjI2ODE6XFx0XFx0Z290byBkcm9wO1xcbjI2ODI6XFx0XFxuMjY4MzpcXHRjc3VtX2Vycm9yOlxcbjI2ODQ6XFx0XFx0LypcXG4yNjg1OlxcdFxcdCAqIFJGQzExMjI6IE9LLiAgRGlzY2FyZHMgdGhlIGJhZCBwYWNrZXQgc2lsZW50bHkgKGFzIGZhciBhc1xcbjI2ODY6XFx0XFx0ICogdGhlIG5ldHdvcmsgaXMgY29uY2VybmVkLCBhbnl3YXkpIGFzIHBlciA0LjEuMy40IChNVVNUKS5cXG4yNjg3OlxcdFxcdCAqL1xcbjI2ODg6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVURQX0NTVU07XFxuMjY4OTpcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJVRFA6IGJhZCBjaGVja3N1bS4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbiAlZFxcXFxuXFxcIixcXG4yNjkwOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2FkZHIsIG50b2hzKHVoLVxcdTAwM2Vzb3VyY2UpLCBcXHUwMDI2ZGFkZHIsIG50b2hzKHVoLVxcdTAwM2VkZXN0KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MjYuMzU0MjAzMDk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MjQyMTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVEUCBSZWNlaXZlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYHVkcF9yY3ZgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCBqdXN0IHJldHVybnMgd2hhdGV2ZXIgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZ2l2ZXMgaXQuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpcyBgdWRwX3JjdmAgYWN0dWFsbHkgKmNhbGxlZCo/IFJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIHNvbWV0aGluZyBsaWtlIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWDigKYgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW4gdGhhdCBnZW5lcmFsIHZpY2luaXR5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIHNpdGVzIG9mIGB1ZHBfcmN2YC4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgZG9uZSB3aXRoIHRoYXQgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBjaGVja2luZz8gRmxvdyBjb250cm9sPyBJcyBpdCBjcml0aWNhbCBmb3IgcHJvcGVyIG11bHRpY2FzdCBkZWxpdmVyeT8gVW5kZXJzdGFuZGluZyB0aGUgYHVkcF9yY3ZgIGNhbGwgY2hhaW4gYW5kIGhvdyB0aGUgcmV0dXJuIHZhbHVlIGlzIGhhbmRsZWQgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIFVEUCByZWNlaXZlIHBhdGguIFRoaXMgbG9va3MgbGlrZSB0aGUgcGxhY2UgdG8gZm9jdXMgbXkgZWZmb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6MjkuODk2NjI2NjgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk4NTU2Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcF9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdWRwLmg9NDIyPXZvaWQgdWRwNF9od2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNyYywgX19iZTMyIGRzdCk7XFxuaW5jbHVkZS9uZXQvdWRwLmg6NDIzOmludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3VkcC5oLTQyNC1pbnQgdWRwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oPTU3Nz12b2lkIHVkcHY2X2VuY2FwX2VuYWJsZSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oLTU3OS1cXG5pbmNsdWRlL25ldC91ZHAuaDo1ODA6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3Jjdl9zZWdtZW50KHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL25ldC91ZHAuaC01ODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBpcHY0KVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTkyNS1cXHRuZXRfaG90ZGF0YS51ZHBfcHJvdG9jb2wgPSAoc3RydWN0IG5ldF9wcm90b2NvbCkge1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxOTI2OlxcdFxcdC5oYW5kbGVyID1cXHR1ZHBfcmN2LFxcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTI3LVxcdFxcdC5lcnJfaGFuZGxlciA9XFx0dWRwX2VycixcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MTUwPWJvb2wgaXBfY2FsbF9yYV9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0xODYtXFxubmV0L2lwdjQvaXBfaW5wdXQuYzoxODc6SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0xODgtSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYz0xODk9dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjA2LVxcdFxcdH1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIwNzpcXHRcXHRyZXQgPSBJTkRJUkVDVF9DQUxMXzIoaXBwcm90LVxcdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjA4LVxcdFxcdFxcdFxcdCAgICAgIHNrYik7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xNTEwPXZvaWQgdWRwX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTE1MjYtLyogYWxsIGhlYWQgc3RhdGVzIChkc3QsIHNrLCBuZiBjb25udHJhY2spIGV4Y2VwdCBza2IgZXh0ZW5zaW9ucyBhcmVcXG5uZXQvaXB2NC91ZHAuYzoxNTI3OiAqIGNsZWFyZWQgYnkgdWRwX3JjdigpLlxcbm5ldC9pcHY0L3VkcC5jLTE1MjgtICpcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI0MjM9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNDMyLVxcdF9fc2tiX3B1c2goc2tiLCAtc2tiX21hY19vZmZzZXQoc2tiKSk7XFxubmV0L2lwdjQvdWRwLmM6MjQzMzpcXHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIHRydWUpO1xcbm5ldC9pcHY0L3VkcC5jLTI0MzQtXFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjU2OT1zdGF0aWMgaW50IHVkcF91bmljYXN0X3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjU5MC1cXG5uZXQvaXB2NC91ZHAuYzoyNTkxOmludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdWRwLmMtMjU5Mi17XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz04Nzc9c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTg4NS1cXHRfX3NrYl9wdXNoKHNrYiwgLXNrYl9tYWNfb2Zmc2V0KHNrYikpO1xcbm5ldC9pcHY2L3VkcC5jOjg4NjpcXHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIGZhbHNlKTtcXG5uZXQvaXB2Ni91ZHAuYy04ODctXFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz04MTY9c3RhdGljIGludCBzY3RwX2N0bF9zb2NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy04MzktXFxubmV0L3NjdHAvcHJvdG9jb2wuYzo4NDA6c3RhdGljIGludCBzY3RwX3VkcF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtODQxLXtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9ODQ5PWludCBzY3RwX3VkcF9zb2NrX3N0YXJ0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtODY1LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjg2NjpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gc2N0cF91ZHBfcmN2O1xcbm5ldC9zY3RwL3Byb3RvY29sLmMtODY3LVxcdHR1bmNmZy5lbmNhcF9lcnJfbG9va3VwID0gc2N0cF91ZHBfdjRfZXJyO1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy04ODctXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSAxO1xcbm5ldC9zY3RwL3Byb3RvY29sLmM6ODg4OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBzY3RwX3VkcF9yY3Y7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy04ODktXFx0dHVuY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBzY3RwX3VkcF92Nl9lcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjMyLjg5NTE4ODg5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDMwMTczODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBVRFAgUGFja2V0IFJlLVN1Ym1pc3Npb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGB1ZHBfcXVldWVfcmN2X3NrYmAgZnVuY3Rpb24uLi4gaXQgc2VlbXMgdG8gYmUgcmV0dXJuaW5nIGEgcG9zaXRpdmUgdmFsdWUgd2hlbiBpdCAqZW5jYXBzdWxhdGVzKiB0aGUgaW5jb21pbmcgcGFja2V0IGFuZCBuZWVkcyBpdCB0byBiZSByZXN1Ym1pdHRlZC4gVGhhdCdzLi4uIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LlxuXG5SaWdodCwgc28gbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9pcHY0L3VkcC5jYCBhbmQgZGlnIGludG8gYHVkcF9xdWV1ZV9yY3Zfc2tiYC4gSSBuZWVkIHRvIHNlZSAqZXhhY3RseSogd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBwb3NpdGl2ZSByZXR1cm4sIHdoYXQgY29uZGl0aW9ucyBhcmUgYmVpbmcgY2hlY2tlZCwgYW5kIHdoYXQncyBoYXBwZW5pbmcgdG8gdGhlIHBhY2tldCB3aGVuIGl0J3MgZmxhZ2dlZCBmb3IgcmVzdWJtaXNzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZW5jYXBzdWxhdGlvbiBsb2dpYyBoZXJlIGFuZCBob3cgaXQncyBhZmZlY3RpbmcgdGhlIG5vcm1hbCBkYXRhZ3JhbSBwcm9jZXNzaW5nLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGltcGFjdCBwZXJmb3JtYW5jZSBpZiB3ZSdyZSBub3QgY2FyZWZ1bC4gTGV0J3Mgc2VlIGlmIHRoaXMgYmVoYXZpb3VyIGlzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjQyLjMyNTM2NDg3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MzY5NjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiXFxcXChzdHJ1Y3Qgc29jayBcXFxcKnNrLCBzdHJ1Y3Qgc2tfYnVmZiBcXFxcKnNrYlxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTIzNTA9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjQyMi1cXG5uZXQvaXB2NC91ZHAuYzoyNDIzOnN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3VkcC5jLTI0MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo0NS4yNjkwNjkwMTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NTQ2NTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRFAgUmVjZWl2ZSBRdWV1ZSBGdW5jdGlvbioqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdWRwX3F1ZXVlX3Jjdl9za2JgLiBBbHdheXMgZ29vZCB0byByZWZyZXNoIHRoZSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHBhdGgsIGFuZCB1bmRlcnN0YW5kIGFueSBzdWJ0bGUgbnVhbmNlcy4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHR5cGljYWwgcGF0dGVybnM6IFNLQiBoYW5kbGluZywgc29ja2V0IGxvY2sgYWNxdWlzaXRpb24sIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiByZWFzc2VtYmx5IG9yIG9mZmxvYWQgY29uc2lkZXJhdGlvbnMsIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVjZWl2ZSBxdWV1ZSBpdHNlbGYsIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGNvbnRleHQgdmVyc3VzIHRhc2tsZXQgY29uc2lkZXJhdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSB1cGRhdGVzLiBUaGlzIGlzIHdoZXJlIHRob3NlIHN1YnRsZSBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGFuZCBsb2NrIGhpZXJhcmNoeSB2aW9sYXRpb25zIHRlbmQgdG8gc25lYWsgaW4uIEkgZXhwZWN0IHRvIHNlZSBzb21lIGNsZXZlciB0cmlja3MgZm9yIGhhbmRsaW5nIFVEUCdzIGNvbm5lY3Rpb25sZXNzIG5hdHVyZSBhbmQgcG9zc2libHkgc29tZSBvcHRpbWl6YXRpb25zIGxldmVyYWdpbmcgdGhpbmdzIGxpa2UgY2hlY2tzdW0gb2ZmbG9hZCwgUlNTLCBvciBldmVuIGhhcmR3YXJlIHJlY2VpdmUgZmlsdGVycyBpZiB0aGUgTklDIHN1cHBvcnRzIHRoZW0uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjQ4LjkxNDUzNzAyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQyMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQyMzpcXHRzdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yNDI0OlxcdHtcXG4yNDI1OlxcdFxcdHN0cnVjdCBza19idWZmICpuZXh0LCAqc2VncztcXG4yNDI2OlxcdFxcdGludCByZXQ7XFxuMjQyNzpcXHRcXG4yNDI4OlxcdFxcdGlmIChsaWtlbHkoIXVkcF91bmV4cGVjdGVkX2dzbyhzaywgc2tiKSkpXFxuMjQyOTpcXHRcXHRcXHRyZXR1cm4gdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xcbjI0MzA6XFx0XFxuMjQzMTpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1ZHBfc2tiX2NiKSBcXHUwMDNlIFNLQl9HU09fQ0JfT0ZGU0VUKTtcXG4yNDMyOlxcdFxcdF9fc2tiX3B1c2goc2tiLCAtc2tiX21hY19vZmZzZXQoc2tiKSk7XFxuMjQzMzpcXHRcXHRzZWdzID0gdWRwX3Jjdl9zZWdtZW50KHNrLCBza2IsIHRydWUpO1xcbjI0MzQ6XFx0XFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbjI0MzU6XFx0XFx0XFx0X19za2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbjI0MzY6XFx0XFxuMjQzNzpcXHRcXHRcXHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XFxuMjQzODpcXHRcXHRcXHRyZXQgPSB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XFxuMjQzOTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4yNDQwOlxcdFxcdFxcdFxcdGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBza2IsIHJldCk7XFxuMjQ0MTpcXHRcXHR9XFxuMjQ0MjpcXHRcXHRyZXR1cm4gMDtcXG4yNDQzOlxcdH1cXG4yNDQ0OlxcdFxcbjI0NDU6XFx0LyogRm9yIFRDUCBzb2NrZXRzLCBza19yeF9kc3QgaXMgcHJvdGVjdGVkIGJ5IHNvY2tldCBsb2NrXFxuMjQ0NjpcXHQgKiBGb3IgVURQLCB3ZSB1c2UgeGNoZygpIHRvIGd1YXJkIGFnYWluc3QgY29uY3VycmVudCBjaGFuZ2VzLlxcbjI0NDc6XFx0ICovXFxuMjQ0ODpcXHRib29sIHVkcF9za19yeF9kc3Rfc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbjI0NDk6XFx0e1xcbjI0NTA6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqb2xkO1xcbjI0NTE6XFx0XFxuMjQ1MjpcXHRcXHRpZiAoZHN0X2hvbGRfc2FmZShkc3QpKSB7XFxuMjQ1MzpcXHRcXHRcXHRvbGQgPSB1bnJjdV9wb2ludGVyKHhjaGcoXFx1MDAyNnNrLVxcdTAwM2Vza19yeF9kc3QsIFJDVV9JTklUSUFMSVpFUihkc3QpKSk7XFxuMjQ1NDpcXHRcXHRcXHRkc3RfcmVsZWFzZShvbGQpO1xcbjI0NTU6XFx0XFx0XFx0cmV0dXJuIG9sZCAhPSBkc3Q7XFxuMjQ1NjpcXHRcXHR9XFxuMjQ1NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjQ1ODpcXHR9XFxuMjQ1OTpcXHRcXG4yNDYwOlxcdC8qXFxuMjQ2MTpcXHQgKlxcdE11bHRpY2FzdHMgYW5kIGJyb2FkY2FzdHMgZ28gdG8gZWFjaCBsaXN0ZW5lci5cXG4yNDYyOlxcdCAqXFxuMjQ2MzpcXHQgKlxcdE5vdGU6IGNhbGxlZCBvbmx5IGZyb20gdGhlIEJIIGhhbmRsZXIgY29udGV4dC5cXG4yNDY0OlxcdCAqL1xcbjI0NjU6XFx0c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjI0NjY6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcXG4yNDY3OlxcdFxcdFxcdFxcdFxcdCAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkcilcXG4yNDY4OlxcdHtcXG4yNDY5OlxcdFxcdHN0cnVjdCB1ZHBfdGFibGUgKnVkcHRhYmxlID0gbmV0LVxcdTAwM2VpcHY0LnVkcF90YWJsZTtcXG4yNDcwOlxcdFxcdHVuc2lnbmVkIGludCBoYXNoMiwgaGFzaDJfYW55LCBvZmZzZXQ7XFxuMjQ3MTpcXHRcXHR1bnNpZ25lZCBzaG9ydCBobnVtID0gbnRvaHModWgtXFx1MDAzZWRlc3QpO1xcbjI0NzI6XFx0XFx0c3RydWN0IHNvY2sgKnNrLCAqZmlyc3QgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo0OC45MTQ5MDMwODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MjUyMDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgVURQIFBhY2tldCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBVRFAgcGFja2V0cy4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaGF2aW5nIHNvbWUgc3BlY2lhbCBiZWhhdmlvciByZWxhdGVkIHRvIGVuY2Fwc3VsYXRpb24uIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGUgcGFja2V0ICpuZWVkcyogdG8gYmUgcmVzdWJtaXR0ZWQsIHByZXN1bWFibHkgYmVjYXVzZSBpdCdzIGVuY2Fwc3VsYXRlZCBpbiBzb21lIGZhc2hpb24uIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgZXhhY3RseSBob3cgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgd29ya3MuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaXRzIHJldHVybiB2YWx1ZSBzZW1hbnRpY3MsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IHJldHVybnMgcG9zaXRpdmUsIGFuZCB3aGF0IHRoYXQgcG9zaXRpdmUgdmFsdWUgc2lnbmlmaWVzIGluIHRlcm1zIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LiBFc3NlbnRpYWxseSwgSSBuZWVkIGEgZGV0YWlsZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXNlIHBhY2tldHMgYXJlIG1hbmFnZWQgdXBzdHJlYW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo1Mi4zNjc0Mjc0NTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNTA6XFx0c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIzNTE6XFx0e1xcbjIzNTI6XFx0XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4yMzUzOlxcdFxcdHN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spO1xcbjIzNTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRcXHQvKlxcbjIzNTc6XFx0XFx0ICpcXHRDaGFyZ2UgaXQgdG8gdGhlIHNvY2tldCwgZHJvcHBpbmcgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwuXFxuMjM1ODpcXHRcXHQgKi9cXG4yMzU5OlxcdFxcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbjIzNjA6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XFxuMjM2MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjM2MjpcXHRcXHR9XFxuMjM2MzpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbjIzNjQ6XFx0XFxuMjM2NTpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2dWRwX2VuY2FwX25lZWRlZF9rZXkpIFxcdTAwMjZcXHUwMDI2XFxuMjM2NjpcXHRcXHQgICAgUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF90eXBlKSkge1xcbjIzNjc6XFx0XFx0XFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbjIzNjg6XFx0XFxuMjM2OTpcXHRcXHRcXHQvKlxcbjIzNzA6XFx0XFx0XFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cXG4yMzcxOlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQncyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XFxuMjM3MjpcXHRcXHRcXHQgKiBmYWxsIHRocm91Z2ggYW5kIHBhc3MgdGhpcyB1cCB0aGUgVURQIHNvY2tldC5cXG4yMzczOlxcdFxcdFxcdCAqIHVwLVxcdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XFxuMjM3NDpcXHRcXHRcXHQgKiA9MCBpZiBza2Igd2FzIHN1Y2Nlc3NmdWxseSBwYXNzZWQgdG8gdGhlIGVuY2FwXFxuMjM3NTpcXHRcXHRcXHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXFxuMjM3NjpcXHRcXHRcXHQgKiBcXHUwMDNlMCBpZiBza2Igc2hvdWxkIGJlIHBhc3NlZCBvbiB0byBVRFAuXFxuMjM3NzpcXHRcXHRcXHQgKiBcXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXFxuMjM3ODpcXHRcXHRcXHQgKi9cXG4yMzc5OlxcdFxcbjIzODA6XFx0XFx0XFx0LyogaWYgd2UncmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xcbjIzODE6XFx0XFx0XFx0ZW5jYXBfcmN2ID0gUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF9yY3YpO1xcbjIzODI6XFx0XFx0XFx0aWYgKGVuY2FwX3Jjdikge1xcbjIzODM6XFx0XFx0XFx0XFx0aW50IHJldDtcXG4yMzg0OlxcdFxcbjIzODU6XFx0XFx0XFx0XFx0LyogVmVyaWZ5IGNoZWNrc3VtIGJlZm9yZSBnaXZpbmcgdG8gZW5jYXAgKi9cXG4yMzg2OlxcdFxcdFxcdFxcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuMjM4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMjM4ODpcXHRcXG4yMzg5OlxcdFxcdFxcdFxcdHJldCA9IGVuY2FwX3Jjdihzaywgc2tiKTtcXG4yMzkwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbjIzOTE6XFx0XFx0XFx0XFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XFxuMjM5MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLXJldDtcXG4yMzkzOlxcdFxcdFxcdFxcdH1cXG4yMzk0OlxcdFxcdFxcdH1cXG4yMzk1OlxcdFxcbjIzOTY6XFx0XFx0XFx0LyogRkFMTFRIUk9VR0ggLS0gaXQncyBhIFVEUCBQYWNrZXQgKi9cXG4yMzk3OlxcdFxcdH1cXG4yMzk4OlxcdFxcbjIzOTk6XFx0XFx0cHJlZmV0Y2goXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzU6NTIuMzY3NjExMDM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjM3OTIxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgdGhlIFVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgUGF0aCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgcmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgaWYgYGVuY2FwX3JjdmAgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLiBUaGF0IG5lZ2F0aXZlIHZhbHVlIGZyb20gYGVuY2FwX3JjdmAgc2lnbmlmaWVzIHRoYXQgdGhlIGBza2JgIG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wsIHNheSwgYC1OYC4gU28gd2hlbiBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCByZXR1cm5zIGEgdmFsdWUsIGxldCdzIGNhbGwgaXQgYC1yZXRgLCAgdGhhdCB2YWx1ZSwgd2hlbiByZS1pbnRlcnByZXRlZCwgaXMgYWN0dWFsbHkgKnBvc2l0aXZlKiBhbmQgaW5kaWNhdGVzIGEgcmVzdWJtaXNzaW9uIGlzIG5lZWRlZCBmb3IgcHJvdG9jb2wgYHJldGAuXG5cbk5vdywgZGlnZ2luZyBhIGJpdCBkZWVwZXIgaW50byBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBJIHNlZSB0aGF0IGl0IHVzZXMgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaWYgdGhlIEdTTyBpc24ndCB1bmV4cGVjdGVkLiBUaGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0ICBgdWRwX3F1ZXVlX3Jjdl9za2JgIGl0c2VsZiByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUgaWYgdGhlIHBhY2tldCBtdXN0IGJlIHJlc3VibWl0dGVkLlxuXG5Mb29raW5nIGF0IGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIG5leHQuIEhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBhcyBpdCBhcHBlYXJzIHRvIHJldHVybiBgLXJldGAgd2hlbiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybnMgYSBwb3NpdGl2ZSBgcmV0YC4gVGhpcyBtZWFucyB0aGF0IGlmIHJlc3VibWlzc2lvbiBpcyByZXF1aXJlZCAoaW5kaWNhdGVkIGJ5IGB1ZHBfcXVldWVfcmN2X3NrYmAgcmV0dXJuaW5nIGBcdTAwM2UgMGApLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuIEZpbmFsbHksIGB1ZHBfcmN2YCBpdHNlbGYgcmV0dXJucyB3aGF0ZXZlciBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpbiBgbmV0L2lwdjQvaXBfaW5wdXQuY2AgdG8gc2VlIGhvdyB0aGUgd2hvbGUgcHJvY2VzcyBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM1OjU4LjczMTQwNTE2NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4OTpcXHR2b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxcbiAxOTA6XFx0e1xcbiAxOTE6XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCAqaXBwcm90O1xcbiAxOTI6XFx0XFx0aW50IHJhdywgcmV0O1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRyZXN1Ym1pdDpcXG4gMTk1OlxcdFxcdHJhdyA9IHJhd19sb2NhbF9kZWxpdmVyKHNrYiwgcHJvdG9jb2wpO1xcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9wcm90b3NbcHJvdG9jb2xdKTtcXG4gMTk4OlxcdFxcdGlmIChpcHByb3QpIHtcXG4gMTk5OlxcdFxcdFxcdGlmICghaXBwcm90LVxcdTAwM2Vub19wb2xpY3kpIHtcXG4gMjAwOlxcdFxcdFxcdFxcdGlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuIDIwMTpcXHRcXHRcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYixcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1kpO1xcbiAyMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDQ6XFx0XFx0XFx0XFx0fVxcbiAyMDU6XFx0XFx0XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gMjA2OlxcdFxcdFxcdH1cXG4gMjA3OlxcdFxcdFxcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXFx1MDAzZWhhbmRsZXIsIHRjcF92NF9yY3YsIHVkcF9yY3YsXFxuIDIwODpcXHRcXHRcXHRcXHRcXHQgICAgICBza2IpO1xcbiAyMDk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMjEwOlxcdFxcdFxcdFxcdHByb3RvY29sID0gLXJldDtcXG4gMjExOlxcdFxcdFxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuIDIxMjpcXHRcXHRcXHR9XFxuIDIxMzpcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xcbiAyMTQ6XFx0XFx0fSBlbHNlIHtcXG4gMjE1OlxcdFxcdFxcdGlmICghcmF3KSB7XFxuIDIxNjpcXHRcXHRcXHRcXHRpZiAoeGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuIDIxNzpcXHRcXHRcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOVU5LTk9XTlBST1RPUyk7XFxuIDIxODpcXHRcXHRcXHRcXHRcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCxcXG4gMjE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgSUNNUF9QUk9UX1VOUkVBQ0gsIDApO1xcbiAyMjA6XFx0XFx0XFx0XFx0fVxcbiAyMjE6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9OT1BST1RPKTtcXG4gMjIyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIyMzpcXHRcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xcbiAyMjQ6XFx0XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gMjI1OlxcdFxcdFxcdH1cXG4gMjI2OlxcdFxcdH1cXG4gMjI3OlxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XFxuIDIzMjpcXHRcXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xcbiAyMzM6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSk7XFxuIDIzNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcXG4gMjM4OlxcdFxcdF9fc2tiX3B1bGwoc2tiLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNTo1OC43MzE1MDUxNjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1ODgwNjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUHJvdG9jb2wgRGVsaXZlcnkgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgY2hlY2tzIGlmIHRoZSByZXR1cm4gdmFsdWUsIGByZXRgLCBpcyBsZXNzIHRoYW4gemVyby4gSWYgaXQgKmlzKiwgdGhlbiBpdCdzIGludGVycHJldGluZyB0aGF0IG5lZ2F0aXZlIHZhbHVlLiBUaGUgY29kZSBzZXRzIGBwcm90b2NvbGAgdG8gdGhlICphYnNvbHV0ZSB2YWx1ZSogb2YgYHJldGAsIGVmZmVjdGl2ZWx5IGludmVydGluZyBpdCwgYW5kIHRoZW4ganVtcHMgdG8gdGhlIGByZXN1Ym1pdGAgbGFiZWwuIFNvLCBpZiBhIGZ1bmN0aW9uIGxpa2UgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgd2VyZSB0byByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgc3BlY2lmaWNhbGx5IGEgbmVnYXRpdmUgdmFsdWUgdGhhdCdzIHRoZSBuZWdhdGl2ZSBvZiBhIHBvc2l0aXZlIHByb3RvY29sIG51bWJlciAobWVhbmluZyBpdCByZXR1cm5zIGAtcmV0YCwgd2hlcmUgYHJldCBcdTAwM2UgMGAgaXMgdGhlIHByb3RvY29sIG51bWJlciksIHRoYXQgbmVnYXRpdmUgcmV0dXJuIHdpbGwgY29ycmVjdGx5IHRyaWdnZXIgdGhlIHJlc3VibWlzc2lvbiBwYXRoIHdpdGhpbiBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaGUgd2hvbGUgc3lzdGVtIHNlZW1zIHdlbGwgZGVzaWduZWQuIEJ1dCBJIHNob3VsZCBjb25maXJtIHRoaXMgaXMgY29uc2lzdGVudCBhY3Jvc3MgSVB2NCBhbmQgSVB2Ni4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIElQdjYgZXF1aXZhbGVudCwgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAsIGxvY2F0ZWQgaW4gYG5ldC9pcHY2L2lwNl9pbnB1dC5jYC4gSSBoYXZlIHRvIGNvbmZpcm0gdGhpcyBzYW1lIGxvZ2ljIGhvbGRzIHRydWUgZm9yIElQdjYgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjAzLjI5MDMxNTE1NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5Njc5MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXB2Ni5oPTEwODc9aW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9pcHY2Lmg6MTA4ODp2b2lkIGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLFxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMDg5LVxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0zOTg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDItICovXFxubmV0L2lwdjYvaXA2X2lucHV0LmM6NDAzOnZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNDA0LVxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzMtXFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MzQ6XFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCAwLCBmYWxzZSk7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTM1LVxcbi0tXFxubmV0L2lwdjYvdWRwLmM9ODc3PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy04OTItXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxubmV0L2lwdjYvdWRwLmM6ODkzOlxcdFxcdFxcdGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgc2tiLCByZXQsXFxubmV0L2lwdjYvdWRwLmMtODk0LVxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MDUuMzg3MTE3NjA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQzMzkyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YDpcblxuKipBbmFseXppbmcgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGdldHRpbmcgc2l0dWF0ZWQuIFwiaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1XCIuLi4gdGhpcyBzY3JlYW1zIElQdjYgcHJvdG9jb2wgZGVsaXZlcnksIGxpa2VseSBpbnZvbHZpbmcgUmVhZC1Db3B5IFVwZGF0ZSAoUkNVKSBmb3IgY29uY3VycmVuY3kgc2FmZXR5LiBLbm93aW5nIHRoZSBjb250ZXh0IGlzIGNydWNpYWwsIHNvIEknbSBhbHJlYWR5IG1lbnRhbGx5IHRhZ2dpbmcgdGhpcyBhcyBhIGNvcmUgbmV0d29yayBmdW5jdGlvbiwgcHJvYmFibHkgZGVhbGluZyB3aXRoIHBhY2tldCByZWNlcHRpb24gb3IgZm9yd2FyZGluZyBhdCBhIHByZXR0eSBmdW5kYW1lbnRhbCBsZXZlbC4gVGhlIFwiUkNVXCIgcGFydCBpcyBhIGdvb2Qgc2lnbiDigJMgaXQgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgYWxsb3dpbmcgY29uY3VycmVudCByZWFkcywgd2hpbGUgdXBkYXRlcyAoYW5kIG1vZGlmaWNhdGlvbnMpIGFyZSBoYW5kbGVkIGluIGEgc2VwYXJhdGUgcGhhc2VkIG1hbm5lciB0byBwcmV2ZW50IGRhdGEgY29ycnVwdGlvbi4gTWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBzZWUgKmhvdyogdGhleSdyZSB1c2luZyBSQ1UsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwcm90ZWN0ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHdvcmtmbG93IGlzLiBJcyBpdCBhIHF1ZXVlLCBoYXNoIHRhYmxlLCBhIGxvb2t1cD8gTGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MDkuMTExNDU5MzU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDM6XFx0dm9pZCBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcixcXG4gNDA0OlxcdFxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcXG4gNDA1OlxcdHtcXG4gNDA2OlxcdFxcdGludCBleHRoZHJfY250ID0gSVA2Q0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZTS0JfSE9QQllIT1AgPyAxIDogMDtcXG4gNDA3OlxcdFxcdGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqaXBwcm90O1xcbiA0MDg6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gNDA5OlxcdFxcdHVuc2lnbmVkIGludCBuaG9mZjtcXG4gNDEwOlxcdFxcdFNLQl9EUihyZWFzb24pO1xcbiA0MTE6XFx0XFx0Ym9vbCByYXc7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdC8qXFxuIDQxNDpcXHRcXHQgKlxcdFBhcnNlIGV4dGVuc2lvbiBoZWFkZXJzXFxuIDQxNTpcXHRcXHQgKi9cXG4gNDE2OlxcdFxcbiA0MTc6XFx0cmVzdWJtaXQ6XFxuIDQxODpcXHRcXHRpZGV2ID0gaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSk7XFxuIDQxOTpcXHRcXHRuaG9mZiA9IElQNkNCKHNrYiktXFx1MDAzZW5ob2ZmO1xcbiA0MjA6XFx0XFx0aWYgKCFoYXZlX2ZpbmFsKSB7XFxuIDQyMTpcXHRcXHRcXHRpZiAoIXBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpKVxcbiA0MjI6XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0MjM6XFx0XFx0XFx0bmV4dGhkciA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpW25ob2ZmXTtcXG4gNDI0OlxcdFxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0cmVzdWJtaXRfZmluYWw6XFxuIDQyNzpcXHRcXHRyYXcgPSByYXc2X2xvY2FsX2RlbGl2ZXIoc2tiLCBuZXh0aGRyKTtcXG4gNDI4OlxcdFxcdGlwcHJvdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbbmV4dGhkcl0pO1xcbiA0Mjk6XFx0XFx0aWYgKGlwcHJvdCkge1xcbiA0MzA6XFx0XFx0XFx0aW50IHJldDtcXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0XFx0aWYgKGhhdmVfZmluYWwpIHtcXG4gNDMzOlxcdFxcdFxcdFxcdGlmICghKGlwcHJvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkpIHtcXG4gNDM0OlxcdFxcdFxcdFxcdFxcdC8qIE9uY2Ugd2UndmUgc2VlbiBhIGZpbmFsIHByb3RvY29sIGRvbid0XFxuIDQzNTpcXHRcXHRcXHRcXHRcXHQgKiBhbGxvdyBlbmNhcHN1bGF0aW9uIG9uIGFueSBub24tZmluYWxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAqIG9uZXMuIFRoaXMgYWxsb3dzIGZvbyBpbiBVRFAgZW5jYXBzdWxhdGlvblxcbiA0Mzc6XFx0XFx0XFx0XFx0XFx0ICogdG8gd29yay5cXG4gNDM4OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA0Mzk6XFx0XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0NDA6XFx0XFx0XFx0XFx0fVxcbiA0NDE6XFx0XFx0XFx0fSBlbHNlIGlmIChpcHByb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU5FVDZfUFJPVE9fRklOQUwpIHtcXG4gNDQyOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxuIDQ0MzpcXHRcXHRcXHRcXHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcXG4gNDQ0OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdFxcdFxcdC8qIE9ubHkgZG8gdGhpcyBvbmNlIGZvciBmaXJzdCBmaW5hbCBwcm90b2NvbCAqL1xcbiA0NDc6XFx0XFx0XFx0XFx0aGF2ZV9maW5hbCA9IHRydWU7XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDQ1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA0NTI6XFx0XFx0XFx0XFx0aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MDkuMTExNTY2MzA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjQ1MzgxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0ZWxsaW5nIG15c2VsZiB0byBhY3R1YWxseSAqcmVhZCogdGhlIHJlc3Qgb2YgdGhlIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGZ1bmN0aW9uLiBObyBza2ltbWluZywgbm8gYXNzdW1wdGlvbnMsIGp1c3QgYSB0aG9yb3VnaCwgbGluZS1ieS1saW5lIGV4YW1pbmF0aW9uLiBUaGlzIGlzbid0IHRoZSBraW5kIG9mIGZ1bmN0aW9uIHlvdSBjYW4ganVzdCBnbGFuY2UgYXQ7IHRoZXJlIGFyZSBsaWtlbHkgc3VidGxlIGludGVyYWN0aW9ucyBhbmQgdGltaW5nIGlzc3VlcyBpbiBwbGF5IHRoYXQgcmVxdWlyZSBhIGRlZXAgdW5kZXJzdGFuZGluZy4gSSdtIG1lbnRhbGx5IHByZXBhcmluZyB0byBkaWcgaW4gYW5kIHJlYWxseSAqdW5kZXJzdGFuZCogd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIHRoZSBJUHY2IHByb3RvY29sIHN0YWNrLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgUkNVLXJlbGF0ZWQgZnVuY3Rpb25zIGNhbiBoYXZlIGNvbXBsZXggbG9ja2luZyBhbmQgbWVtb3J5IHN5bmNocm9uaXphdGlvbiBjb25zaWRlcmF0aW9ucywgc28gSSdtIGJyYWNpbmcgbXlzZWxmIGZvciB0aGF0LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgaW4gdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MTIuNDM2MTA2NTAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwNl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdFxcdFxcdC8qIHNrYi1cXHUwMDNlZGV2IHBhc3NlZCBtYXkgYmUgbWFzdGVyIGRldiBmb3IgdnJmcy4gKi9cXG4gNDU1OlxcdFxcdFxcdFxcdGlmIChzZGlmKSB7XFxuIDQ1NjpcXHRcXHRcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHNkaWYpO1xcbiA0NTc6XFx0XFx0XFx0XFx0XFx0aWYgKCFkZXYpXFxuIDQ1ODpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuIDQ1OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA0NjA6XFx0XFx0XFx0XFx0XFx0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIDQ2MTpcXHRcXHRcXHRcXHR9XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdFxcdFxcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZoZHItXFx1MDAzZWRhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbiA0NjQ6XFx0XFx0XFx0XFx0ICAgICFpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIsXFxuIDQ2NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmhkci1cXHUwMDNlc2FkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIDQ2NjpcXHRcXHRcXHRcXHQgICAgIWlwdjZfaXNfbWxkKHNrYiwgbmV4dGhkciwgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSkge1xcbiA0Njc6XFx0XFx0XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIElQX0lOQUREUkVSUk9SUyk7XFxuIDQ2ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuIDQ2OTpcXHRcXHRcXHRcXHR9XFxuIDQ3MDpcXHRcXHRcXHR9XFxuIDQ3MTpcXHRcXHRcXHRpZiAoIShpcHByb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU5FVDZfUFJPVE9fTk9QT0xJQ1kpKSB7XFxuIDQ3MjpcXHRcXHRcXHRcXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiA0NzM6XFx0XFx0XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFhGUk1fUE9MSUNZKTtcXG4gNDc0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDc1OlxcdFxcdFxcdFxcdH1cXG4gNDc2OlxcdFxcdFxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIDQ3NzpcXHRcXHRcXHR9XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdFxcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXFx1MDAzZWhhbmRsZXIsIHRjcF92Nl9yY3YsIHVkcHY2X3JjdixcXG4gNDgwOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYik7XFxuIDQ4MTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbiA0ODI6XFx0XFx0XFx0XFx0aWYgKGlwcHJvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTkVUNl9QUk9UT19GSU5BTCkge1xcbiA0ODM6XFx0XFx0XFx0XFx0XFx0LyogTm90IGFuIGV4dGVuc2lvbiBoZWFkZXIsIG1vc3QgbGlrZWx5IFVEUFxcbiA0ODQ6XFx0XFx0XFx0XFx0XFx0ICogZW5jYXBzdWxhdGlvbi4gVXNlIHJldHVybiB2YWx1ZSBhcyBuZXh0aGRyXFxuIDQ4NTpcXHRcXHRcXHRcXHRcXHQgKiBwcm90b2NvbCBub3QgbmhvZmYgKHdoaWNoIHByZXN1bWFibHkgaXNcXG4gNDg2OlxcdFxcdFxcdFxcdFxcdCAqIG5vdCBzZXQgYnkgaGFuZGxlcikuXFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNDg4OlxcdFxcdFxcdFxcdFxcdG5leHRoZHIgPSByZXQ7XFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3VibWl0X2ZpbmFsO1xcbiA0OTA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDkxOlxcdFxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShleHRoZHJfY250KysgXFx1MDAzZT0gSVA2X01BWF9FWFRfSERSU19DTlQpKSB7XFxuIDQ5MjpcXHRcXHRcXHRcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBWNl9UT09fTUFOWV9FWFRIRFJTKTtcXG4gNDkzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDk0OlxcdFxcdFxcdFxcdFxcdH1cXG4gNDk1OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuIDQ5NjpcXHRcXHRcXHRcXHR9XFxuIDQ5NzpcXHRcXHRcXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XFxuIDQ5ODpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcXG4gNDk5OlxcdFxcdFxcdH1cXG4gNTAwOlxcdFxcdH0gZWxzZSB7XFxuIDUwMTpcXHRcXHRcXHRpZiAoIXJhdykge1xcbiA1MDI6XFx0XFx0XFx0XFx0aWYgKHhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjoxMi40MzYyMDA0ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2ODYzMTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJUHY2IFBhY2tldCBEZWxpdmVyeSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBJUHY2IGNvZGUgYW5kIHNvbWV0aGluZydzIGNhdWdodCBteSBleWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBoYXMgdGhpcyBleHBlY3RhdGlvbjogaXQgbmVlZHMgYHJldCBcdTAwM2UgMGAgdG8gdHJpZ2dlciBhIHJlc3VibWl0LiBJbnRlcmVzdGluZy4gTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBgcmV0YCBjb21lcyBmcm9tLiBBaGEhIFRoZSBmdW5jdGlvbiBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zIHRoaXMgYHJldGAgdmFsdWUuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgcmV0YCBpcyBjb21pbmcgZnJvbSBhIGRvd25zdHJlYW0gZnVuY3Rpb24sIGFuZCBpbiBwYXJ0aWN1bGFyLCB0aGF0IHRoaXMgYHJldGAgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSByZXN1Ym1pdCBpcyByZXF1aXJlZC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmFjdG9ycyBpbXBhY3QgdGhpcyByZXR1cm4gdmFsdWUuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHJldGAgdmFsdWUgaXMuIEl0IGFwcGVhcnMgdG8gYmUgdGllZCB0byBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd29ya3MuIFRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2Ni91ZHAuY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBxdWV1ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjoxNi4zMDQ4MzQwOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3NzpcXHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA4Nzg6XFx0e1xcbiA4Nzk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5leHQsICpzZWdzO1xcbiA4ODA6XFx0XFx0aW50IHJldDtcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcXG4gODgzOlxcdFxcdFxcdHJldHVybiB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcXG4gODg2OlxcdFxcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgZmFsc2UpO1xcbiA4ODc6XFx0XFx0c2tiX2xpc3Rfd2Fsa19zYWZlKHNlZ3MsIHNrYiwgbmV4dCkge1xcbiA4ODg6XFx0XFx0XFx0X19za2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpO1xcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHRcXHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XFxuIDg5MTpcXHRcXHRcXHRyZXQgPSB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcXG4gODkyOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiA4OTM6XFx0XFx0XFx0XFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBza2IsIHJldCxcXG4gODk0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4gODk1OlxcdFxcdH1cXG4gODk2OlxcdFxcdHJldHVybiAwO1xcbiA4OTc6XFx0fVxcbiA4OTg6XFx0XFxuIDg5OTpcXHRzdGF0aWMgYm9vbCBfX3VkcF92Nl9pc19tY2FzdF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiA5MDA6XFx0XFx0XFx0XFx0XFx0ICAgX19iZTE2IGxvY19wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLFxcbiA5MDE6XFx0XFx0XFx0XFx0XFx0ICAgX19iZTE2IHJtdF9wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLFxcbiA5MDI6XFx0XFx0XFx0XFx0XFx0ICAgaW50IGRpZiwgaW50IHNkaWYsIHVuc2lnbmVkIHNob3J0IGhudW0pXFxuIDkwMzpcXHR7XFxuIDkwNDpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuIDkwNTpcXHRcXG4gOTA2OlxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4gOTA3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0aWYgKHVkcF9zayhzayktXFx1MDAzZXVkcF9wb3J0X2hhc2ggIT0gaG51bSB8fFxcbiA5MTA6XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gUEZfSU5FVDYgfHxcXG4gOTExOlxcdFxcdCAgICAoaW5ldC1cXHUwMDNlaW5ldF9kcG9ydCBcXHUwMDI2XFx1MDAyNiBpbmV0LVxcdTAwM2VpbmV0X2Rwb3J0ICE9IHJtdF9wb3J0KSB8fFxcbiA5MTI6XFx0XFx0ICAgICghaXB2Nl9hZGRyX2FueShcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbiA5MTM6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9kYWRkciwgcm10X2FkZHIpKSB8fFxcbiA5MTQ6XFx0XFx0ICAgICF1ZHBfc2tfYm91bmRfZGV2X2VxKG5ldCwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpLCBkaWYsIHNkaWYpIHx8XFxuIDkxNTpcXHRcXHQgICAgKCFpcHY2X2FkZHJfYW55KFxcdTAwMjZzay1cXHUwMDNlc2tfdjZfcmN2X3NhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbiA5MTY6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNnNrLVxcdTAwM2Vza192Nl9yY3Zfc2FkZHIsIGxvY19hZGRyKSkpXFxuIDkxNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDkxODpcXHRcXHRpZiAoIWluZXQ2X21jX2NoZWNrKHNrLCBsb2NfYWRkciwgcm10X2FkZHIpKVxcbiA5MTk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5MjA6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDkyMTpcXHR9XFxuIDkyMjpcXHRcXG4gOTIzOlxcdHN0YXRpYyB2b2lkIHVkcDZfY3N1bV96ZXJvX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxuIDkyNDpcXHR7XFxuIDkyNTpcXHRcXHQvKiBSRkMgMjQ2MCBzZWN0aW9uIDguMSBzYXlzIHRoYXQgd2UgU0hPVUxEIGxvZ1xcbiA5MjY6XFx0XFx0ICogdGhpcyBlcnJvci4gV2VsbCwgaXQgaXMgcmVhc29uYWJsZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MTYuMzA0OTk0MDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MjczOTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipVRFB2NiBSZXN1Ym1pc3Npb24gTG9naWMgLSBBIFF1aWNrIENoZWNrKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGNsaWNrZWQuIEkgd2FzIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIElQdjYgVURQIGNvZGUsIGJ1dCBJIHRoaW5rIEkgcmVtZW1iZXIgc29tZXRoaW5nIGltcG9ydGFudC4gV2Fzbid0IGl0IHRoZSBjYXNlIHRoYXQgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBiZWhhdmVzIGxpa2UgaXRzIElQdjQgY291bnRlcnBhcnQsIHNwZWNpZmljYWxseSByZXR1cm5pbmcgYSB2YWx1ZSAqZ3JlYXRlciB0aGFuIHplcm8qIGlmIHRoZSBTS0IgbmVlZHMgdG8gYmUgcmVzdWJtaXR0ZWQ/IEl0J3MgdGhhdCBpbmRpY2F0b3Igd2UncmUgYWZ0ZXIsIHJpZ2h0PyBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCdzIHJldHVybiB2YWx1ZSBpcyB0aGUga2V5IHNpZ25hbCB3ZSdyZSBsb29raW5nIGZvciwganVzdCBhcyBpdCBpcyBpbiB0aGUgSVB2NCBpbXBsZW1lbnRhdGlvbi4gQmV0dGVyIHRvIGJlIHByZWNpc2UgYW5kIHJlLWV4YW1pbmUgdGhhdCBmdW5jdGlvbiB0byBlbGltaW5hdGUgYW55IGFtYmlndWl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5OTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjIwLjA1NzczNTg0OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4ODU0MTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiXFxcXChzdHJ1Y3Qgc29jayBcXFxcKnNrLCBzdHJ1Y3Qgc2tfYnVmZiBcXFxcKnNrYlxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3VkcC5jPTc3Mj1zdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy04MDUtXFxubmV0L2lwdjYvdWRwLmM6ODA2OnN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L3VkcC5jLTgwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjIyLjg0NjI4MzQ1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY5NTE1NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggcmVjZWl2aW5nIGEgc2luZ2xlIFNLQiAoU29ja2V0IEJ1ZmZlcikgd2l0aGluIHRoZSBJUHY2IFVEUCBjb250ZXh0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBwYXJzaW5nIHdoYXQgSSBleHBlY3QgdG8gZmluZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljOiB0aGUgaW50YWtlIG9mIHRoZSBkYXRhLCBhbnkgY3J1Y2lhbCBjaGVja3Mgb24gdGhlIHBhY2tldCBoZWFkZXJzIChzb3VyY2UvZGVzdGluYXRpb24gcG9ydHMsIGxlbmd0aHMsIGNoZWNrc3VtcyDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cyksIGFuZCBob3cgaXQncyB0aGVuIHF1ZXVlZCBvciBwcm9jZXNzZWQgZnVydGhlciB3aXRoaW4gdGhlIElQdjYgVURQIHN0YWNrLiBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIOKAkyBhcmUgdGhlcmUgbG9ja3MgaW52b2x2ZWQsIGFyZSB0aGluZ3MgYXRvbWljPyBTaW5jZSBpdCdzIGEgXCJxdWV1ZVwiIGZ1bmN0aW9uLCBJIGFzc3VtZSB0aGVyZSdzIHNvbWUga2luZCBvZiBkYXRhIHN0cnVjdHVyZSwgbGlrZWx5IGEgbGlua2VkIGxpc3Qgb3Igc2ltaWxhciwgaW52b2x2ZWQgaW4gaG9sZGluZyBwYWNrZXRzIHRoYXQgaGF2ZW4ndCBiZWVuIGZ1bGx5IGhhbmRsZWQgeWV0LiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmUgKGxpa2VseSBgc3RydWN0IHNvY2tgKSBhbmQgd2hhdCByb2xlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWlnaHQgcGxheSBoZXJlLCBpZiBhbnkuIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHF1ZXVlIGlzIGZ1bGw/IFdoYXQgaWYgY2hlY2tzdW0gdmFsaWRhdGlvbiBmYWlscz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgSSBjYW4gaWRlbnRpZnkgcXVpY2tseSwgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIGlzc3VlcyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzPyBBbmQgZmluYWxseSwgZ2l2ZW4gdGhpcyBpcyBJUHY2LCBJIHdpbGwgd2FudCB0byBzZWUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgY2FwYWJpbGl0aWVzLiBNeSBleHBlcnQgaW5zdGluY3QgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXMgYmFkbHkgaW1wbGVtZW50ZWQsIHRoZW4gdGhlIHdob2xlIHN5c3RlbSB3aWxsIGJlIGV4cG9zZWQgdG8gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MjYuOTE1ODAyMDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDY6XFx0c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDgwNzpcXHR7XFxuIDgwODpcXHRcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbiA4MDk6XFx0XFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuIDgxMDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuIDgxMTpcXHRcXG4gODEyOlxcdFxcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiA4MTM6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XFxuIDgxNDpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDgxNTpcXHRcXHR9XFxuIDgxNjpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2dWRwdjZfZW5jYXBfbmVlZGVkX2tleSkgXFx1MDAyNlxcdTAwMjZcXG4gODE5OlxcdFxcdCAgICBSRUFEX09OQ0UodXAtXFx1MDAzZWVuY2FwX3R5cGUpKSB7XFxuIDgyMDpcXHRcXHRcXHRpbnQgKCplbmNhcF9yY3YpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIDgyMTpcXHRcXG4gODIyOlxcdFxcdFxcdC8qXFxuIDgyMzpcXHRcXHRcXHQgKiBUaGlzIGlzIGFuIGVuY2Fwc3VsYXRpb24gc29ja2V0IHNvIHBhc3MgdGhlIHNrYiB0b1xcbiA4MjQ6XFx0XFx0XFx0ICogdGhlIHNvY2tldCdzIHVkcF9lbmNhcF9yY3YoKSBob29rLiBPdGhlcndpc2UsIGp1c3RcXG4gODI1OlxcdFxcdFxcdCAqIGZhbGwgdGhyb3VnaCBhbmQgcGFzcyB0aGlzIHVwIHRoZSBVRFAgc29ja2V0LlxcbiA4MjY6XFx0XFx0XFx0ICogdXAtXFx1MDAzZWVuY2FwX3JjdigpIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZTpcXG4gODI3OlxcdFxcdFxcdCAqID0wIGlmIHNrYiB3YXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCB0byB0aGUgZW5jYXBcXG4gODI4OlxcdFxcdFxcdCAqICAgIGhhbmRsZXIgb3Igd2FzIGRpc2NhcmRlZCBieSBpdC5cXG4gODI5OlxcdFxcdFxcdCAqIFxcdTAwM2UwIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIFVEUC5cXG4gODMwOlxcdFxcdFxcdCAqIFxcdTAwM2MwIGlmIHNrYiBzaG91bGQgYmUgcmVzdWJtaXR0ZWQgYXMgcHJvdG8gLU5cXG4gODMxOlxcdFxcdFxcdCAqL1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRcXHQvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXFxuIDgzNDpcXHRcXHRcXHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXFx1MDAzZWVuY2FwX3Jjdik7XFxuIDgzNTpcXHRcXHRcXHRpZiAoZW5jYXBfcmN2KSB7XFxuIDgzNjpcXHRcXHRcXHRcXHRpbnQgcmV0O1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRcXHRcXHQvKiBWZXJpZnkgY2hlY2tzdW0gYmVmb3JlIGdpdmluZyB0byBlbmNhcCAqL1xcbiA4Mzk6XFx0XFx0XFx0XFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4gODQwOlxcdFxcdFxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG4gODQxOlxcdFxcbiA4NDI6XFx0XFx0XFx0XFx0cmV0ID0gZW5jYXBfcmN2KHNrLCBza2IpO1xcbiA4NDM6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKSB7XFxuIDg0NDpcXHRcXHRcXHRcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XFxuIDg0NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLXJldDtcXG4gODQ2OlxcdFxcdFxcdFxcdH1cXG4gODQ3OlxcdFxcdFxcdH1cXG4gODQ4OlxcdFxcbiA4NDk6XFx0XFx0XFx0LyogRkFMTFRIUk9VR0ggLS0gaXQncyBhIFVEUCBQYWNrZXQgKi9cXG4gODUwOlxcdFxcdH1cXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0cHJlZmV0Y2goXFx1MDAyNnNrLVxcdTAwM2Vza19ybWVtX2FsbG9jKTtcXG4gODUzOlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoc2stXFx1MDAzZXNrX2ZpbHRlcikgXFx1MDAyNlxcdTAwMjZcXG4gODU0OlxcdFxcdCAgICB1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuIDg1NTpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjI2LjkxNTk0MDE3MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTc3MDI2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVEUHY2IE11bHRpY2FzdCBEZWxpdmVyeSBSZS1leGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaGFuZHMgYmFjayBhIG5lZ2F0aXZlIHJldHVybiBjb2RlIHdoZW4gYGVuY2FwX3JjdmAgZmFpbHMsIHdoaWNoIG1lYW5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gemVyby4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgVGhlcmVmb3JlLCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gaW1wbGllcyB0aGUgcGFja2V0IG5lZWRzIHRvIGJlIHJlc3VibWl0dGVkLCBnb3QgaXQuIE5vdyBJJ20gbG9va2luZyBhdCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQsIHNwZWNpZmljYWxseSwgdGhhdCBpbml0aWFsIGBpZiAoZmlyc3QpYCBibG9jay4gIFdlIGhhdmUgYHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7YCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBgaWYgKHJldCBcdTAwM2UgMCkgcmV0dXJuIHJldDtgLiAgUmlnaHQsIHRoYXQgbWVhbnMgdGhlIHJldHVybiBjb2RlIGRpcmVjdGx5IHByb3BhZ2F0ZXMgdXBzdHJlYW0uIEJ1dCB3YWl0LCBzaW5jZSBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCByZXR1cm5zIGByZXRgLCB3aGljaCBjb3VsZCBiZSBncmVhdGVyIHRoYW4gemVybywgdGhlbiBpdCdzIGRpcmVjdGx5IHJlc3VibWl0dGluZyB0aGUgcGFja2V0IHRvIHRoZSBzdGFjay4gIEkgbmVlZCB0byBjaGVjayBob3cgYHVkcHY2X3JjdmAgaGFuZGxlcyB0aGlzIGluIGBuZXQvaXB2Ni91ZHAuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjI5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzEuNDkyOTY5NjY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1MDEyMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB1ZHB2Nl9yY3ZcXFxcKHN0cnVjdCBza19idWZmIFxcXFwqc2tiXFxcXClcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdWRwLmM9MTAzNz1zdGF0aWMgaW50IHVkcDZfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTA2OC1cXG5uZXQvaXB2Ni91ZHAuYzoxMDY5OklORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni91ZHAuYy0xMDcwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzQuMTQ3OTkwOTgyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQwODgzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB1ZHB2Nl9yY3ZgIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBvZiB0aGUgSVB2NiBVRFAgcmVjZWl2ZXIgcHJvY2VzcyB0aG9yb3VnaGx5LiBNeSBleHBlcnRpc2UgaXMgaW4gbmV0d29ya2luZywgYW5kIEkndmUgc2VlbiBhIGxvdCBvZiBVRFAgaW1wbGVtZW50YXRpb25zLCBidXQgZXZlcnkgb25lIGhhcyBpdHMgbnVhbmNlcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZnJhZ21lbnRhdGlvbiwgY2hlY2tzdW0gdmFsaWRhdGlvbiwgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXBwZXItbGF5ZXIgcHJvdG9jb2xzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCByZWFzc2VtYmx5IG9mIGZyYWdtZW50ZWQgcGFja2V0cyBhbmQgaWYgaXQgaW1wbGVtZW50cyBhbnkgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXMuIFRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHNob3VsZCBtYWtlIHRoZSBmdW5jdGlvbmFsaXR5IGNsZWFyLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY29udHJvbCBmbG93IGFuZCBjcml0aWNhbCBzZWN0aW9ucy4gSSBleHBlY3QgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHJvYnVzdCBhcHByb2FjaCB0byBwb3RlbnRpYWwgbWFsaWNpb3VzIHRyYWZmaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzcuNDEyMDgyMDczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDY5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY5OlxcdElORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbjEwNzI6XFx0XFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyO1xcbjEwNzM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMTA3NDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xcbjEwNzU6XFx0XFx0c3RydWN0IHVkcGhkciAqdWg7XFxuMTA3NjpcXHRcXHRib29sIHJlZmNvdW50ZWQ7XFxuMTA3NzpcXHRcXHR1MzIgdWxlbiA9IDA7XFxuMTA3ODpcXHRcXG4xMDc5OlxcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxuMTA4MDpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdHNhZGRyID0gXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbjEwODM6XFx0XFx0ZGFkZHIgPSBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxuMTA4NDpcXHRcXHR1aCA9IHVkcF9oZHIoc2tiKTtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0dWxlbiA9IG50b2hzKHVoLVxcdTAwM2VsZW4pO1xcbjEwODc6XFx0XFx0aWYgKHVsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMDg4OlxcdFxcdFxcdGdvdG8gc2hvcnRfcGFja2V0O1xcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHQvKiBDaGVjayBmb3IganVtYm8gcGF5bG9hZCAqL1xcbjEwOTE6XFx0XFx0aWYgKHVsZW4gPT0gMClcXG4xMDkyOlxcdFxcdFxcdHVsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDkzOlxcdFxcbjEwOTQ6XFx0XFx0aWYgKHVsZW4gXFx1MDAzYyBzaXplb2YoKnVoKSlcXG4xMDk1OlxcdFxcdFxcdGdvdG8gc2hvcnRfcGFja2V0O1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRpZiAodWxlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKSB7XFxuMTA5ODpcXHRcXHRcXHRpZiAocHNrYl90cmltX3Jjc3VtKHNrYiwgdWxlbikpXFxuMTA5OTpcXHRcXHRcXHRcXHRnb3RvIHNob3J0X3BhY2tldDtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0XFx0c2FkZHIgPSBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlc2FkZHI7XFxuMTEwMjpcXHRcXHRcXHRkYWRkciA9IFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4xMTAzOlxcdFxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbjExMDQ6XFx0XFx0fVxcbjExMDU6XFx0XFxuMTEwNjpcXHRcXHRpZiAodWRwNl9jc3VtX2luaXQoc2tiLCB1aCkpXFxuMTEwNzpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdC8qIENoZWNrIGlmIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBhdmFpbGFibGUsIGUuZy4gZHVlIHRvIGVhcmx5IGRlbXV4ICovXFxuMTExMDpcXHRcXHRzayA9IGluZXQ2X3N0ZWFsX3NvY2sobmV0LCBza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgc2FkZHIsIHVoLVxcdTAwM2Vzb3VyY2UsIGRhZGRyLCB1aC1cXHUwMDNlZGVzdCxcXG4xMTExOlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZyZWZjb3VudGVkLCB1ZHA2X2VoYXNoZm4pO1xcbjExMTI6XFx0XFx0aWYgKElTX0VSUihzaykpXFxuMTExMzpcXHRcXHRcXHRnb3RvIG5vX3NrO1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRpZiAoc2spIHtcXG4xMTE2OlxcdFxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4xMTE3OlxcdFxcdFxcdGludCByZXQ7XFxuMTExODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6MzY6MzcuNDEyMTk4MDYzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODI3OTM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcHJvdG9jb2wgYW5hbHlzaXMuXG5cbioqRGl2aW5nIEJhY2sgaW50byBgdWRwdjZfcmN2YCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgbGV0J3Mgc3RvcCBmb3IgYSBtb21lbnQgYW5kIGdvIGJhY2sgdG8gcmVhZGluZyB0aGUgcmVzdCBvZiBgdWRwdjZfcmN2YC4gSeKAmXZlIGJlZW4gYW5hbHl6aW5nIGl0IGZvciBhIHdoaWxlIG5vdywgYW5kIGl04oCZcyBpbXBvcnRhbnQgdG8gc3RheSBmb2N1c2VkLCByZXZpZXcgdGhlIGNvbnRleHQsIGFuZCB0cmFjZSB0aGUgY29udHJvbCBmbG93LiBUaGVyZSdzIHByb2JhYmx5IHNvbWV0aGluZyBJIG1pc3NlZCBvciBuZWVkIHRvIHJlLWV2YWx1YXRlIGluIGxpZ2h0IG9mIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyByb3V0aW5lIGZpdHMgd2l0aGluIHRoZSBvdmVyYWxsIElQdjYgVURQIHJlY2VpdmluZyBwcm9jZXNzLiBOZWVkIHRvIGNhcmVmdWxseSByZXRyYWNlIHRoZSBzdGVwcyB0byBlbnN1cmUgSSBoYXZlbid0IGdvdHRlbiBsb3N0IGluIHRoZSBkZXRhaWxzLCBvciBtaXNzZWQgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIGZvciBhbm90aGVyIHBhc3MgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjQwLjU5NDk5Mzc5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTE5OlxcdFxcdFxcdGlmICh1bmxpa2VseShyY3VfZGVyZWZlcmVuY2Uoc2stXFx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcXG4xMTIwOlxcdFxcdFxcdFxcdHVkcDZfc2tfcnhfZHN0X3NldChzaywgZHN0KTtcXG4xMTIxOlxcdFxcbjExMjI6XFx0XFx0XFx0aWYgKCF1aC1cXHUwMDNlY2hlY2sgXFx1MDAyNlxcdTAwMjYgIXVkcF9nZXRfbm9fY2hlY2s2X3J4KHNrKSkge1xcbjExMjM6XFx0XFx0XFx0XFx0aWYgKHJlZmNvdW50ZWQpXFxuMTEyNDpcXHRcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuMTEyNTpcXHRcXHRcXHRcXHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xcbjExMjY6XFx0XFx0XFx0fVxcbjExMjc6XFx0XFxuMTEyODpcXHRcXHRcXHRyZXQgPSB1ZHA2X3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XFxuMTEyOTpcXHRcXHRcXHRpZiAocmVmY291bnRlZClcXG4xMTMwOlxcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4xMTMxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTEzMjpcXHRcXHR9XFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdC8qXFxuMTEzNTpcXHRcXHQgKlxcdE11bHRpY2FzdCByZWNlaXZlIGNvZGVcXG4xMTM2OlxcdFxcdCAqL1xcbjExMzc6XFx0XFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoZGFkZHIpKVxcbjExMzg6XFx0XFx0XFx0cmV0dXJuIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgc2FkZHIsIGRhZGRyKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0LyogVW5pY2FzdCAqL1xcbjExNDE6XFx0XFx0c2sgPSBfX3VkcDZfbGliX2xvb2t1cF9za2Ioc2tiLCB1aC1cXHUwMDNlc291cmNlLCB1aC1cXHUwMDNlZGVzdCk7XFxuMTE0MjpcXHRcXHRpZiAoc2spIHtcXG4xMTQzOlxcdFxcdFxcdGlmICghdWgtXFx1MDAzZWNoZWNrIFxcdTAwMjZcXHUwMDI2ICF1ZHBfZ2V0X25vX2NoZWNrNl9yeChzaykpXFxuMTE0NDpcXHRcXHRcXHRcXHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xcbjExNDU6XFx0XFx0XFx0cmV0dXJuIHVkcDZfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcXG4xMTQ2OlxcdFxcdH1cXG4xMTQ3OlxcdG5vX3NrOlxcbjExNDg6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcXG4xMTQ5OlxcdFxcbjExNTA6XFx0XFx0aWYgKCF1aC1cXHUwMDNlY2hlY2spXFxuMTE1MTpcXHRcXHRcXHRnb3RvIHJlcG9ydF9jc3VtX2Vycm9yO1xcbjExNTI6XFx0XFxuMTE1MzpcXHRcXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSlcXG4xMTU0OlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4xMTU1OlxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuMTE1ODpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdF9fVURQNl9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX05PUE9SVFMpO1xcbjExNjE6XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwKTtcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxuMTE2NDpcXHRcXHRyZXR1cm4gMDtcXG4xMTY1OlxcdFxcbjExNjY6XFx0c2hvcnRfcGFja2V0OlxcbjExNjc6XFx0XFx0aWYgKHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRClcXG4xMTY4OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjo0MC41OTUxMjY2OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQyOTY1Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0d29ya2luZyBTdGFjayBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIGB1ZHB2Nl9yY3ZgIGhhbmRzIG9mZiBpdHMgcmV0dXJuIHZhbHVlIHRvIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBUaGVuLCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBjb3JyZWN0bHkgY2hlY2tzIGlmIHRoYXQgcmV0dXJuIHZhbHVlLCBgcmV0YCwgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHJlc3VibWl0cyB0aGUgcGFja2V0IGlmIGl0IGlzLiBTbyB0aGUgZmFjdCB0aGF0IGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIGlzIHJldHVybmluZyBhIHBvc2l0aXZlIGByZXRgIGlzIGtleSBhbmQgdHJpZ2dlcnMgdGhlIGV4cGVjdGVkIHJlc3VibWlzc2lvbi4gR29vZC5cblxuVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEkgZ2F0aGVyLCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBkZWZpY2llbmN5IGluIHRoZSBjb3JlIFVEUCBtdWx0aWNhc3QgZGVsaXZlcnkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBTcGVjaWZpY2FsbHksIEZPVS1lbmNhcHN1bGF0ZWQgcGFja2V0cyB3aXRoIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUHMgd2VyZW4ndCBiZWluZyBjb3JyZWN0bHkgcGFzc2VkIGRvd24gdG8gdGhlaXIgaW5uZXIgcHJvdG9jb2xzLCBsaWtlIEdSRS4gVGhleSB3ZXJlIGdldHRpbmcgZHJvcHBlZCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIGJ1Zy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0ICphYnNvbHV0ZWx5KiB3YXJyYW50cyBzZXJpb3VzIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgbmVlZHMgdG8gYmUgZnV6emVkLiBUaGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMsIG9idmlvdXNseSwgYXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gVGhlc2UgYXJlIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucyBhbmQgYXJlIG15IHByaW1hcnkgdGFyZ2V0cyBmb3IgYEZvY3VzU3ltYm9sc2AuXG5cbk5leHQsIEkgbmVlZCB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmlnaHQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaGUgdGVzdCBzY3JpcHQgcmVmZXJlbmNlcyBgQ09ORklHX05FVF9GT1VgLiBIbW0sIHRoZSBzY3JpcHQgc2VlbXMgdG8gc3VnZ2VzdCBgQ09ORklHX05FVF9GT1VgIGlzIGJ1aWx0LWluLiBCdXQgdGhlIGNvbmZpZyBmaWxlIHNldHMgYENPTkZJR19JUFY2X0ZPVT1tYCBhbmQgYENPTkZJR19JUFY2X0ZPVV9UVU5ORUw9bWAuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gZXhhY3RseSBob3cgRk9VIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjQ2LjkzODA5NTYyN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MTk1NTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0ZPVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMxNj1jb25maWcgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzIwLVxcbm5ldC9pcHY0L0tjb25maWc6MzIxOmNvbmZpZyBORVRfRk9VXFxubmV0L2lwdjQvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxubmV0L2lwdjQvS2NvbmZpZy0zMzEtXFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjQ5LjAwMDA1OTQ1MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUwOTY1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIElQdjYgb3ZlciBVRFAgVHVubmVsIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgYENPTkZJR19JUFY2X0ZPVWAuIEl0J3MgYSBrZXkgaW5kaWNhdG9yLiBJZiB0aGlzIGlzIGVuYWJsZWQsIHRoZW4gd2UncmUgc2V0IHVwIHRvIGhhbmRsZSBJUHY2IHRyYWZmaWMgZW5jYXBzdWxhdGVkIHdpdGhpbiBVRFAgdHVubmVscy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgb2Z0ZW4gYSBwcmVyZXF1aXNpdGUgZm9yIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9ucywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHNvbWV0aGluZyBsaWtlIElQdjYgb3ZlciBhIG5ldHdvcmsgdGhhdCBvbmx5IG5hdGl2ZWx5IHN1cHBvcnRzIElQdjQsIG9yIHBlcmhhcHMgdG8gaW1wbGVtZW50IGEgVlBOIHNvbHV0aW9uLiBTbywgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgd2FudCB0byBjb25maXJtIHRoYXQgZmVhdHVyZSBpcyBlbmFibGVkLiBPdGhlcndpc2UsIHRoZSBiZWhhdmlvciBJIGFtIGV4cGVjdGluZyBtaWdodCBub3Qgd29yayBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjo1My41NTEwMjgzNjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjY1NTY1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfRk9VXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjEwPWNvbmZpZyBJUFY2X0dSRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNjo1NS4zNzc1OTI4MTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Mjc4ODU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBgQ09ORklHX05FVF9GT1VgIC0gdGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUHY0LCByaWdodD9cIiBNeSBtZW1vcnkgaXMgam9nZ2luZywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRvIGdldCB0byB0aG9zZSBtb2RpZmllZCBjb2RlIHNlY3Rpb25zLCB3ZSdyZSBnb2luZyB0byBuZWVkIFVEUCBtdWx0aWNhc3QgcmVjZXB0aW9uIGVuYWJsZWQgb24gdGhlIHN5c3RlbS4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC5cblxuTm93LCB0byB0cmlnZ2VyIHRoYXQgc3BlY2lmaWMgYHJldCBcdTAwM2UgMGAgcGF0aCDigJMgdGhlIHJlc3VibWlzc2lvbiBhc3BlY3Qg4oCTIHdlJ3JlIGdvaW5nIHRvIG5lZWQgYSBVRFAgZW5jYXBzdWxhdGlvbiBwcm90b2NvbC4gVGhhdCBwcm90b2NvbCBuZWVkcyB0byBoYXZlIGFuIGBlbmNhcF9yY3ZgIGhvb2sgdGhhdCByZXR1cm5zIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseSwgYnV0IGZyb20gbXkgZXhwZXJpZW5jZSwgRk9VIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBhIFVEUCBlbmNhcHN1bGF0aW9uIHByb3RvY29sIHRoYXQgYmVoYXZlcyB0aGF0IHdheS4gVGhhdCBzb3VuZHMgcmlnaHQgdG8gbWUsIHNvIEkgdGhpbmsgdGhhdCBGT1UgaXMgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS5cblxuU28sIGxldCBtZSBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjQvZm91LmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBmdW5jdGlvbnMgbGlrZSBgZm91X3JlY3ZfcHVsbGAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEZPVSBoYW5kbGVzIHJlY2VwdGlvbiBhbmQgaWYgaXRzIGBlbmNhcF9yY3ZgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgdGhpbmcgdGhhdCBpcyByZXR1cm5pbmcgbmVnYXRpdmUgdmFsdWVzIHRoYXQgdHJpZ2dlciByZXN1Ym1pc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDMzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM2OjU5LjYzMDM4NDAyMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNzQxNTUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb3VfcmVjdl9wdWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZvdV9jb3JlLmM9NTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm91ICpmb3VfZnJvbV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNTUtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo1NjpzdGF0aWMgaW50IGZvdV9yZWN2X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZvdSAqZm91LCBzaXplX3QgbGVuKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNTcte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz03Mz1zdGF0aWMgaW50IGZvdV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTc5LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6ODA6XFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxubmV0L2lwdjQvZm91X2NvcmUuYy04MS1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyMD1zdGF0aWMgaW50IGd1ZV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTE1Ny1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjE1ODpcXHRcXHRpZiAoZm91X3JlY3ZfcHVsbChza2IsIGZvdSwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSlcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTE1OS1cXHRcXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjAxLjQ1NzgwNzAyNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcxNjU2MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIHByb2dyYW1taW5nLCBwb3NzaWJseSBkZWJ1Z2dpbmc6XG5cbioqRGl2aW5nIGludG8gYGZvdV91ZHBfcmVjdmAqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgZm91X3VkcF9yZWN2YC4gVGhhdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIFVEUCB0cmFmZmljLCBwcm9iYWJseSBzb21lIHNvcnQgb2YgdHVubmVsIG9yIG92ZXJsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHJlY2VpdmUgZW5kLiBXaGF0J3MgdGhlIHN0YXRlIG9mIHRoZSBzdGFjaz8gQXJlIHdlIGRyb3BwaW5nIHBhY2tldHM/IEFyZSB3ZSBoYW5kbGluZyB0aGUgZGVjYXBzdWxhdGlvbiBjb3JyZWN0bHk/IElzIHRoZXJlIGJ1ZmZlciBleGhhdXN0aW9uPyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGRhdGEsIHNvIGxldCdzIHN0YXJ0IGhlcmUuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGlzLCB1bmRlcnN0YW5kIGl0cyBsb2dpYywgaXRzIGVycm9yIGhhbmRsaW5nLCBhbmQgdHJhY2UgdGhlIHBhY2tldCBmbG93LiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSwgbWVudGFsbHkgbWFwIG91dCB0aGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgb2JzZXJ2ZWQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjA1LjAyOTQ2NTYwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZm91X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MzpcXHRzdGF0aWMgaW50IGZvdV91ZHBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICA3NDpcXHR7XFxuICA3NTpcXHRcXHRzdHJ1Y3QgZm91ICpmb3UgPSBmb3VfZnJvbV9zb2NrKHNrKTtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0aWYgKCFmb3UpXFxuICA3ODpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0aWYgKGZvdV9yZWN2X3B1bGwoc2tiLCBmb3UsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXFxuICA4MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdHJldHVybiAtZm91LVxcdTAwM2Vwcm90b2NvbDtcXG4gIDg0OlxcdFxcbiAgODU6XFx0ZHJvcDpcXG4gIDg2OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgODc6XFx0XFx0cmV0dXJuIDA7XFxuICA4ODpcXHR9XFxuICA4OTpcXHRcXG4gIDkwOlxcdHN0YXRpYyBzdHJ1Y3QgZ3VlaGRyICpndWVfcmVtY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ3VlaGRyICpndWVoZHIsXFxuICA5MTpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmRhdGEsIHNpemVfdCBoZHJsZW4sIHU4IGlwcHJvdG8sXFxuICA5MjpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgbm9wYXJ0aWFsKVxcbiAgOTM6XFx0e1xcbiAgOTQ6XFx0XFx0X19iZTE2ICpwZCA9IGRhdGE7XFxuICA5NTpcXHRcXHRzaXplX3Qgc3RhcnQgPSBudG9ocyhwZFswXSk7XFxuICA5NjpcXHRcXHRzaXplX3Qgb2Zmc2V0ID0gbnRvaHMocGRbMV0pO1xcbiAgOTc6XFx0XFx0c2l6ZV90IHBsZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBoZHJsZW4gK1xcbiAgOTg6XFx0XFx0ICAgIG1heF90KHNpemVfdCwgb2Zmc2V0ICsgc2l6ZW9mKHUxNiksIHN0YXJ0KTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcmVtY3N1bV9vZmZsb2FkKVxcbiAxMDE6XFx0XFx0XFx0cmV0dXJuIGd1ZWhkcjtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgcGxlbikpXFxuIDEwNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA1OlxcdFxcdGd1ZWhkciA9IChzdHJ1Y3QgZ3VlaGRyICopXFx1MDAyNnVkcF9oZHIoc2tiKVsxXTtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0c2tiX3JlbWNzdW1fcHJvY2Vzcyhza2IsICh2b2lkICopZ3VlaGRyICsgaGRybGVuLFxcbiAxMDg6XFx0XFx0XFx0XFx0ICAgIHN0YXJ0LCBvZmZzZXQsIG5vcGFydGlhbCk7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdHJldHVybiBndWVoZHI7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbnQgZ3VlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ3VlaGRyICpndWVoZHIpXFxuIDExNDpcXHR7XFxuIDExNTpcXHRcXHQvKiBObyBzdXBwb3J0IHlldCAqL1xcbiAxMTY6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDExNzpcXHRcXHRyZXR1cm4gMDtcXG4gMTE4OlxcdH1cXG4gMTE5OlxcdFxcbiAxMjA6XFx0c3RhdGljIGludCBndWVfdWRwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxMjE6XFx0e1xcbiAxMjI6XFx0XFx0c3RydWN0IGZvdSAqZm91ID0gZm91X2Zyb21fc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjA1LjAyOTYwNDk5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI0NDYwMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVRFAgRW5jYXBzdWxhdGlvbiBQcm90b2NvbCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGBmb3VfdWRwX3JlY3ZgIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIHRoZSBuZWdhdGl2ZSBvZiB0aGUgRk9VIHByb3RvY29sIG51bWJlci4gRXhjZWxsZW50LiBUaGF0J3Mgd2hhdCBJIG5lZWRlZCB0byBlc3RhYmxpc2ggdG8gbW92ZSBmb3J3YXJkLiBTbyBlbmFibGluZyBgTkVUX0ZPVWAgaW4gdGhlIGtlcm5lbCBjb25maWcgc2VlbXMgbGlrZSBhIHNvdW5kIGNob2ljZSBiYXNlZCBvbiB0aGlzLlxuXG5Ob3csIGEgbW9yZSBnZW5lcmFsIHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IGFyZSB0aGVyZSBvdGhlciBVRFAgZW5jYXBzdWxhdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhbHNvIHVzZSBhIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBpbiBhIHNpbWlsYXIgd2F5IHRvIHNpZ25hbCBwcm90b2NvbCB0eXBlPyBJZiBzbywgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlbS4gQSBicm9hZCBzZWFyY2ggZm9yIGBlbmNhcF9yY3ZgIGltcGxlbWVudGF0aW9ucyBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwYXR0ZXJucy4gSSdsbCBmb2N1cyBvbiB0aG9zZSByZXR1cm4gdmFsdWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGxhbmRzY2FwZSBvZiB0aGUgYGVuY2FwX3JjdmAgaW1wbGVtZW50YXRpb25zIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjA4LjI1NDA2ODM1MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4ODUxNDUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmNhcF9yY3YgPVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYz0yNTk9c3RhdGljIHN0cnVjdCBzb2NrZXQgKnJ4ZV9zZXR1cF91ZHBfdHVubmVsKHN0cnVjdCBuZXQgKm5ldCwgX19iZTE2IHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0yODItXFx0dG5sX2NmZy5lbmNhcF90eXBlID0gMTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYzoyODM6XFx0dG5sX2NmZy5lbmNhcF9yY3YgPSByeGVfdWRwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmMtMjg0LVxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmM9Mjk3MT1zdGF0aWMgaW50IGFtdF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBhbXRfZGV2ICphbXQpXFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYy0yOTgzLVxcdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XFxuZHJpdmVycy9uZXQvYW10LmM6Mjk4NDpcXHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGFtdF9yY3Y7XFxuZHJpdmVycy9uZXQvYW10LmMtMjk4NS1cXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBhbXRfZXJyX2xvb2t1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz0yNTU9c3RhdGljIGludCBiYXJldWRwX3NvY2tldF9jcmVhdGUoc3RydWN0IGJhcmV1ZHBfZGV2ICpiYXJldWRwLCBfX2JlMTYgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy0yNjctXFx0dHVubmVsX2NmZy5lbmNhcF90eXBlID0gMTtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmM6MjY4OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gYmFyZXVkcF91ZHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY5LVxcdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IGJhcmV1ZHBfZXJyX2xvb2t1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMDI1LVxcdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMDI2OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZ2VuZXZlX3VkcF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXFx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTQwMz1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzMtXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE0MzQ6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzUtXFx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTY0OD1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNjg4LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNjg5OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNjkwLVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gZ3RwX2VuY2FwX2Rlc3Ryb3k7XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTM4ND1pbnQgb3Zwbl91ZHBfc29ja2V0X2F0dGFjaChzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKm92cG5fc29jaywgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzg5LVxcdFxcdC5lbmNhcF90eXBlID0gVURQX0VOQ0FQX09WUE5JTlVEUCxcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjM5MDpcXHRcXHQuZW5jYXBfcmN2ID0gb3Zwbl91ZHBfZW5jYXBfcmVjdixcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM5MS1cXHRcXHQuZW5jYXBfZGVzdHJveSA9IG92cG5fdWRwX2VuY2FwX2Rlc3Ryb3ksXFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmM9MTU1PXN0YXRpYyBzdHJ1Y3Qgc29jayAqcGZjcF9jcmVhdGVfc29jayhzdHJ1Y3QgcGZjcF9kZXYgKnBmY3ApXFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmMtMTcyLVxcdHR1bmNmZy5za191c2VyX2RhdGEgPSBwZmNwO1xcbmRyaXZlcnMvbmV0L3BmY3AuYzoxNzM6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IHBmY3BfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9wZmNwLmMtMTc0LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNTc3PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgaXB2NixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNjE0LVxcdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjM2MTU6XFx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSB2eGxhbl9yY3Y7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM2MTYtXFx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gdnhsYW5fZXJyX2xvb2t1cDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYz0zNDg9aW50IHdnX3NvY2tldF9pbml0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCB1MTYgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYy0zNTQtXFx0XFx0LmVuY2FwX3R5cGUgPSAxLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYzozNTU6XFx0XFx0LmVuY2FwX3JjdiA9IHdnX3JlY2VpdmVcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMtMzU2LVxcdH07XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTU2Nj1zdGF0aWMgaW50IGZvdV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZm91X2NmZyAqY2ZnLFxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy02MDItXFx0Y2FzZSBGT1VfRU5DQVBfRElSRUNUOlxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6NjAzOlxcdFxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZm91X3VkcF9yZWN2O1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNjA0LVxcdFxcdHR1bm5lbF9jZmcuZ3JvX3JlY2VpdmUgPSBmb3VfZ3JvX3JlY2VpdmU7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTYwOC1cXHRjYXNlIEZPVV9FTkNBUF9HVUU6XFxubmV0L2lwdjQvZm91X2NvcmUuYzo2MDk6XFx0XFx0dHVubmVsX2NmZy5lbmNhcF9yY3YgPSBndWVfdWRwX3JlY3Y7XFxubmV0L2lwdjQvZm91X2NvcmUuYy02MTAtXFx0XFx0dHVubmVsX2NmZy5ncm9fcmVjZWl2ZSA9IGd1ZV9ncm9fcmVjZWl2ZTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTIzNTA9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjM4MC1cXHRcXHQvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXFxubmV0L2lwdjQvdWRwLmM6MjM4MTpcXHRcXHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXFx1MDAzZWVuY2FwX3Jjdik7XFxubmV0L2lwdjQvdWRwLmMtMjM4Mi1cXHRcXHRpZiAoZW5jYXBfcmN2KSB7XFxuLS1cXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz03MT12b2lkIHNldHVwX3VkcF90dW5uZWxfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTgyLVxcdHVkcF9zayhzayktXFx1MDAzZWVuY2FwX3R5cGUgPSBjZmctXFx1MDAzZWVuY2FwX3R5cGU7XFxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmM6ODM6XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfcmN2ID0gY2ZnLVxcdTAwM2VlbmNhcF9yY3Y7XFxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmMtODQtXFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZXJyX3JjdiA9IGNmZy1cXHUwMDNlZW5jYXBfZXJyX3JjdjtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTgwNj1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTgzMy1cXHRcXHQvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovXFxubmV0L2lwdjYvdWRwLmM6ODM0OlxcdFxcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cXHUwMDNlZW5jYXBfcmN2KTtcXG5uZXQvaXB2Ni91ZHAuYy04MzUtXFx0XFx0aWYgKGVuY2FwX3Jjdikge1xcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9MTQzPXN0YXRpYyB2b2lkIGwydHBfdHVubmVsX2ZyZWUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNTQtXFx0XFx0XFx0V1JJVEVfT05DRSh1ZHBfc2soc2spLVxcdTAwM2VlbmNhcF90eXBlLCAwKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxNTU6XFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfcmN2ID0gTlVMTDtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNTYtXFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZGVzdHJveSA9IE5VTEw7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjQzPWludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4MS1cXHRcXHRcXHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9MMlRQSU5VRFAsXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY4MjpcXHRcXHRcXHQuZW5jYXBfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfcmVjdixcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjgzLVxcdFxcdFxcdC5lbmNhcF9lcnJfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfZXJyX3JlY3YsXFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NS1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTg0OT1pbnQgc2N0cF91ZHBfc29ja19zdGFydChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg2NS1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IDE7XFxubmV0L3NjdHAvcHJvdG9jb2wuYzo4NjY6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IHNjdHBfdWRwX3JjdjtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTg2Ny1cXHR0dW5jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IHNjdHBfdWRwX3Y0X2VycjtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtODg3LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjg4ODpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gc2N0cF91ZHBfcmN2O1xcbm5ldC9zY3RwL3Byb3RvY29sLmMtODg5LVxcdHR1bmNmZy5lbmNhcF9lcnJfbG9va3VwID0gc2N0cF91ZHBfdjZfZXJyO1xcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmM9NjYyPXN0YXRpYyBpbnQgdGlwY191ZHBfZW5hYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYmVhcmVyICpiLFxcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNzc1LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gMTtcXG5uZXQvdGlwYy91ZHBfbWVkaWEuYzo3NzY6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IHRpcGNfdWRwX3JlY3Y7XFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNzc3LVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MTAuMTQyNTg4MzUxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTQ0NzM1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFVEUCBFbmNhcHN1bGF0aW9uIFJlY2VpdmVycyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGd1ZV91ZHBfcmVjdmAuIEkga25vdyB0aGF0J3MgZ29pbmcgdG8gYmUgaW4gYG5ldC9pcHY0L2ZvdV9jb3JlLmNgLCBzbyBJJ2xsIGNoZWNrIHRoZXJlIGZvciBzdGFydGVycy4gSSByZW1lbWJlciB0aGF0J3MgdGhlIEdlbmVyaWMgVURQIEVuY2Fwc3VsYXRpb24gcmVjZWl2ZXIuIFRoZW4sIEkgbmVlZCB0byBjb21wYXJlIHRoYXQgdG8gYGwydHBfdWRwX2VuY2FwX3JlY3ZgLiBUaGlzIGlzIEwyVFAgb3ZlciBVRFAgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhZmZpYyBpcyBmbG93aW5nLiBJIHdpbGwgY2hlY2sgdGhlIHJlbGF0aW9uc2hpcCBvZiBib3RoLCBzaW5jZSB0aGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIHdob2xlIHJlY2VpdmluZyBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI4MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjEzLjUzNzA2NDc4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ4MTY4MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfdWRwX2VuY2FwX3JlY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2wydHAucnN0PTYxOT1lbmNhcHN1bGF0ZWQgVURQIHNvY2tldCBieSBzZXR0aW5nIGVuY2FwX3JjdiBhbmQgZW5jYXBfZGVzdHJveVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9sMnRwLnJzdDo2MjA6Y2FsbGJhY2tzIG9uIHRoZSBVRFAgc29ja2V0LiBsMnRwX3VkcF9lbmNhcF9yZWN2IGlzIGNhbGxlZCB3aGVuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2wydHAucnN0LTYyMS1wYWNrZXRzIGFyZSByZWNlaXZlZCBvbiB0aGUgc29ja2V0LiBsMnRwX3VkcF9lbmNhcF9kZXN0cm95IGlzIGNhbGxlZFxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9MTAwNT1zdGF0aWMgdm9pZCBsMnRwX3Nlc3Npb25fcXVldWVfcHVyZ2Uoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbilcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwMTUtLyogVURQIGVuY2Fwc3VsYXRpb24gcmVjZWl2ZSBoYW5kbGVyLiBTZWUgbmV0L2lwdjQvdWRwLmMgZm9yIGRldGFpbHMuICovXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTAxNjppbnQgbDJ0cF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTAxNy17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTE0LX1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMTE1OkVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdWRwX2VuY2FwX3JlY3YpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTExMTYtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjQzPWludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY4MS1cXHRcXHRcXHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9MMlRQSU5VRFAsXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY4MjpcXHRcXHRcXHQuZW5jYXBfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfcmVjdixcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjgzLVxcdFxcdFxcdC5lbmNhcF9lcnJfcmN2ID0gbDJ0cF91ZHBfZW5jYXBfZXJyX3JlY3YsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yNTQ9dm9pZCBsMnRwX3JlY3ZfY29tbW9uKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNTYtXFx0XFx0ICAgICAgaW50IGxlbmd0aCk7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjU3OmludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjU4LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz00NTc9c3RhdGljIGludCBwcHBvbDJ0cF9iYWNrbG9nX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy00NjAtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo0NjE6XFx0cmMgPSBsMnRwX3VkcF9lbmNhcF9yZWN2KHNrLCBza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtNDYyLVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MTUuMzg1MjM3MzcyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDUzODg0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoZSBjb250ZXh0IGlzIHRyb3VibGVzaG9vdGluZy9hbmFseXppbmcgbmV0d29yayB0cmFmZmljIG9yIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uXG5cbioqRGl2aW5nIGludG8gYGwydHBfdWRwX2VuY2FwX3JlY3ZgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiT2theSwgcHJvYmxlbSBhdCBoYW5kLi4uIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IGN1bHByaXQ/IExldCdzIGNoZWNrIGBsMnRwX3VkcF9lbmNhcF9yZWN2YC5cIiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBjb3JlIG9mIHJlY2VpdmluZyBMMlRQIGVuY2Fwc3VsYXRlZCB0cmFmZmljIG92ZXIgVURQLCBzbyB0aGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J3MgdGhlIHJlY2VpdmVyLCB0aGUgZ2F0ZWtlZXBlci4gQW55dGhpbmcgYW1pc3MgdGhlcmUsIGFuZCB0aGUgcmVzdCBvZiB0aGUgZmxvdyBpcyBkZWFkIGluIHRoZSB3YXRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHVuZGVyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMuIEl0IGlzIGxpa2VseSB0aGF0IHRoZSBjdXJyZW50IGlzc3VlIGxpZXMgd2l0aCB0aGF0IHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgcHJvY2Vzcy4gSSB3aWxsIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGljYXRpb25zIGFzIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI5MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjE4LjkzMDYyODgxOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2wydHAvbDJ0cF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAxNjpcXHRpbnQgbDJ0cF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuMTAxNzpcXHR7XFxuMTAxODpcXHRcXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uID0gTlVMTDtcXG4xMDE5OlxcdFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDtcXG4xMDIwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4xMDIxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKnB0ciwgKm9wdHI7XFxuMTAyMjpcXHRcXHR1MTYgaGRyZmxhZ3M7XFxuMTAyMzpcXHRcXHR1MTYgdmVyc2lvbjtcXG4xMDI0OlxcdFxcdGludCBsZW5ndGg7XFxuMTAyNTpcXHRcXG4xMDI2OlxcdFxcdC8qIFVEUCBoYXMgdmVyaWZpZWQgY2hlY2tzdW0gKi9cXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0LyogVURQIGFsd2F5cyB2ZXJpZmllcyB0aGUgcGFja2V0IGxlbmd0aC4gKi9cXG4xMDI5OlxcdFxcdF9fc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbjEwMzA6XFx0XFxuMTAzMTpcXHRcXHQvKiBTaG9ydCBwYWNrZXQ/ICovXFxuMTAzMjpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBMMlRQX0hEUl9TSVpFX01BWCkpXFxuMTAzMzpcXHRcXHRcXHRnb3RvIHBhc3M7XFxuMTAzNDpcXHRcXG4xMDM1OlxcdFxcdC8qIFBvaW50IHRvIEwyVFAgaGVhZGVyICovXFxuMTAzNjpcXHRcXHRvcHRyID0gc2tiLVxcdTAwM2VkYXRhO1xcbjEwMzc6XFx0XFx0cHRyID0gc2tiLVxcdTAwM2VkYXRhO1xcbjEwMzg6XFx0XFxuMTAzOTpcXHRcXHQvKiBHZXQgTDJUUCBoZWFkZXIgZmxhZ3MgKi9cXG4xMDQwOlxcdFxcdGhkcmZsYWdzID0gbnRvaHMoKihfX2JlMTYgKilwdHIpO1xcbjEwNDE6XFx0XFxuMTA0MjpcXHRcXHQvKiBHZXQgcHJvdG9jb2wgdmVyc2lvbiAqL1xcbjEwNDM6XFx0XFx0dmVyc2lvbiA9IGhkcmZsYWdzIFxcdTAwMjYgTDJUUF9IRFJfVkVSX01BU0s7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdC8qIEdldCBsZW5ndGggb2YgTDJUUCBwYWNrZXQgKi9cXG4xMDQ2OlxcdFxcdGxlbmd0aCA9IHNrYi1cXHUwMDNlbGVuO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRcXHQvKiBJZiB0eXBlIGlzIGNvbnRyb2wgcGFja2V0LCBpdCBpcyBoYW5kbGVkIGJ5IHVzZXJzcGFjZS4gKi9cXG4xMDQ5OlxcdFxcdGlmIChoZHJmbGFncyBcXHUwMDI2IEwyVFBfSERSRkxBR19UKVxcbjEwNTA6XFx0XFx0XFx0Z290byBwYXNzO1xcbjEwNTE6XFx0XFxuMTA1MjpcXHRcXHQvKiBTa2lwIGZsYWdzICovXFxuMTA1MzpcXHRcXHRwdHIgKz0gMjtcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0aWYgKHZlcnNpb24gPT0gTDJUUF9IRFJfVkVSXzIpIHtcXG4xMDU2OlxcdFxcdFxcdHUxNiB0dW5uZWxfaWQsIHNlc3Npb25faWQ7XFxuMTA1NzpcXHRcXG4xMDU4OlxcdFxcdFxcdC8qIElmIGxlbmd0aCBpcyBwcmVzZW50LCBza2lwIGl0ICovXFxuMTA1OTpcXHRcXHRcXHRpZiAoaGRyZmxhZ3MgXFx1MDAyNiBMMlRQX0hEUkZMQUdfTClcXG4xMDYwOlxcdFxcdFxcdFxcdHB0ciArPSAyO1xcbjEwNjE6XFx0XFxuMTA2MjpcXHRcXHRcXHQvKiBFeHRyYWN0IHR1bm5lbCBhbmQgc2Vzc2lvbiBJRCAqL1xcbjEwNjM6XFx0XFx0XFx0dHVubmVsX2lkID0gbnRvaHMoKihfX2JlMTYgKilwdHIpO1xcbjEwNjQ6XFx0XFx0XFx0cHRyICs9IDI7XFxuMTA2NTpcXHRcXHRcXHRzZXNzaW9uX2lkID0gbnRvaHMoKihfX2JlMTYgKilwdHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzoxOC45MzA3NjA1ODhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjkzMDU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbDJ0cF91ZHBfZW5jYXBfcmVjdmAncyBDb25jbHVzaW9uKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluLiBJJ20gZm9jdXNpbmcgb24gdGhlIGVuZCBvZiB0aGUgYGwydHBfdWRwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5jb21pbmcgVURQIGVuY2Fwc3VsYXRlZCBMMlRQIHRyYWZmaWMgaXMgZmluYWxseSBwcm9jZXNzZWQsIG9yIGlmIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSB0cmlnZ2VyZWQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBhIHZ1bG5lcmFiaWxpdHkgKm1pZ2h0KiBleGlzdCwgb3IgaWYgdGhlIGN1cnJlbnQgY29kZSBoYW5kbGVzIGFsbCBhbnRpY2lwYXRlZCBzY2VuYXJpb3MuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGVuc3VyZSBwcm9wZXIgcGFja2V0IGhhbmRsaW5nLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBwbGFjZSB3aGVyZSBtYWxmb3JtZWQgcGFja2V0cyBhcmUgY2F1c2luZyBpc3N1ZXM/IExldCBtZSBjaGVjayBmb3IgdW5leHBlY3RlZCBlcnJvciByZXR1cm5zIGZyb20gdGhlIGxvd2VyIGxheWVycywgYW5kIGNvbnNpZGVyIHRoZWlyIGltcGxpY2F0aW9ucy4gSSBhbSBsb29raW5nIGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCBwcm9ibGVtcyBhcyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUgb2Ygd2hhdCBoYXBwZW5zIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgcmVjZWl2aW5nIHJvdXRpbmUsIGFuZCBpZiBpdCdzIHRoZSByaWdodCBmaW5hbCByZXN0aW5nIHBsYWNlIGZvciB0aGUgcmVjZWl2ZWQgcGFja2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNjYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjIyLjM2MzY5Mzg1NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2wydHAvbDJ0cF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2NjpcXHRcXHRcXHRwdHIgKz0gMjtcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0XFx0c2Vzc2lvbiA9IGwydHBfdjJfc2Vzc2lvbl9nZXQobmV0LCB0dW5uZWxfaWQsIHNlc3Npb25faWQpO1xcbjEwNjk6XFx0XFx0fSBlbHNlIHtcXG4xMDcwOlxcdFxcdFxcdHUzMiBzZXNzaW9uX2lkO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHRcXHRwdHIgKz0gMjtcXHQvKiBza2lwIHJlc2VydmVkIGJpdHMgKi9cXG4xMDczOlxcdFxcdFxcdHNlc3Npb25faWQgPSBudG9obCgqKF9fYmUzMiAqKXB0cik7XFxuMTA3NDpcXHRcXHRcXHRwdHIgKz0gNDtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0XFx0c2Vzc2lvbiA9IGwydHBfdjNfc2Vzc2lvbl9nZXQobmV0LCBzaywgc2Vzc2lvbl9pZCk7XFxuMTA3NzpcXHRcXHR9XFxuMTA3ODpcXHRcXG4xMDc5OlxcdFxcdGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi1cXHUwMDNlcmVjdl9za2IpIHtcXG4xMDgwOlxcdFxcdFxcdGlmIChzZXNzaW9uKVxcbjEwODE6XFx0XFx0XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0XFx0LyogTm90IGZvdW5kPyBQYXNzIHRvIHVzZXJzcGFjZSB0byBkZWFsIHdpdGggKi9cXG4xMDg0OlxcdFxcdFxcdGdvdG8gcGFzcztcXG4xMDg1OlxcdFxcdH1cXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0dHVubmVsID0gc2Vzc2lvbi1cXHUwMDNldHVubmVsO1xcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHQvKiBDaGVjayBwcm90b2NvbCB2ZXJzaW9uICovXFxuMTA5MDpcXHRcXHRpZiAodmVyc2lvbiAhPSB0dW5uZWwtXFx1MDAzZXZlcnNpb24pIHtcXG4xMDkxOlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxuMTA5MjpcXHRcXHRcXHRnb3RvIGludmFsaWQ7XFxuMTA5MzpcXHRcXHR9XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdGlmICh2ZXJzaW9uID09IEwyVFBfSERSX1ZFUl8zIFxcdTAwMjZcXHUwMDI2XFxuMTA5NjpcXHRcXHQgICAgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzZXNzaW9uLCBza2IsIFxcdTAwMjZwdHIsIFxcdTAwMjZvcHRyKSkge1xcbjEwOTc6XFx0XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG4xMDk4OlxcdFxcdFxcdGdvdG8gaW52YWxpZDtcXG4xMDk5OlxcdFxcdH1cXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0bDJ0cF9yZWN2X2NvbW1vbihzZXNzaW9uLCBza2IsIHB0ciwgb3B0ciwgaGRyZmxhZ3MsIGxlbmd0aCk7XFxuMTEwMjpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRyZXR1cm4gMDtcXG4xMTA1OlxcdFxcbjExMDY6XFx0aW52YWxpZDpcXG4xMTA3OlxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2dHVubmVsLVxcdTAwM2VzdGF0cy5yeF9pbnZhbGlkKTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0cGFzczpcXG4xMTEwOlxcdFxcdC8qIFB1dCBVRFAgaGVhZGVyIGJhY2sgKi9cXG4xMTExOlxcdFxcdF9fc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbjExMTI6XFx0XFxuMTExMzpcXHRcXHRyZXR1cm4gMTtcXG4xMTE0OlxcdH1cXG4xMTE1OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdWRwX2VuY2FwX3JlY3YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzoyMi4zNjM4MjU4NTVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTczNzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgc28gYGwydHBfdWRwX2VuY2FwX3JlY3ZgIGlzIHRlbGxpbmcgbWUgc29tZXRoaW5nIGltcG9ydGFudC4gSXQncyByZXR1cm5pbmcgYSAxIGlmIGEgcGFja2V0IG5lZWRzIHRvIGJlIHBhc3NlZCB1cCB0byB1c2Vyc3BhY2UgdmlhIFVEUC4gQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJ3QqKiByZXR1cm4gYW55dGhpbmcgbmVnYXRpdmUuIFRoYXQgZWxpbWluYXRlcyBzb21lIHBvc3NpYmxlIGF2ZW51ZXMgb2YgaW52ZXN0aWdhdGlvbi4gVGhpcyBpcyB1c2VmdWwgZGF0YS5cblxuVGhlIG5lZ2F0aXZlIHJldHVybiB2YWx1ZXMsIHRoZW4sIGFyZSBwcmltYXJpbHkgY29taW5nIGZyb20gYE5FVF9GT1VgLiBXZSBzaG91bGQgY2hlY2sgYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgIHRvIGZpbmQgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjI2LjQzNTU2NTc4NloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMzQ3ODkxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYXJldWRwX3VkcF9lbmNhcF9yZWN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JhcmV1ZHAuYz00OT1zdHJ1Y3QgYmFyZXVkcF9kZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTYwLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzo2MTpzdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy02Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmM9MjU1PXN0YXRpYyBpbnQgYmFyZXVkcF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcCwgX19iZTE2IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmMtMjY3LVxcdHR1bm5lbF9jZmcuZW5jYXBfdHlwZSA9IDE7XFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjI2ODpcXHR0dW5uZWxfY2ZnLmVuY2FwX3JjdiA9IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTI2OS1cXHR0dW5uZWxfY2ZnLmVuY2FwX2Vycl9sb29rdXAgPSBiYXJldWRwX2Vycl9sb29rdXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjI4LjI2OTA1MDE1OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzExOTgzNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm90b2NvbHMgYW5kIGxvdy1sZXZlbCBwcm9ncmFtbWluZzpcblxuKipBbmFseXppbmcgdGhlIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgYSBiYXJlIFVEUCBlbmNhcHN1bGF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBsaWtlbHkgb24gdGhlIGRldGFpbHMgb2YgcmVjZWl2aW5nIFVEUCBwYWNrZXRzIHRoYXQgYXJlIHNvbWVob3cgXCJlbmNhcHN1bGF0ZWQuXCIgVGhpcyBzdWdnZXN0cyBhIHByb3RvY29sIG9yIG1lY2hhbmlzbSBvbiB0b3Agb2Ygc3RhbmRhcmQgVURQLCBhbmQgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzOiBpcyBpdCBhIHR1bm5lbCwgYSBjdXN0b20gZnJhbWluZyBmb3JtYXQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJhdyBpbmNvbWluZyBkYXRhZ3JhbSBhbmQgZXh0cmFjdHMgdGhlIHJlbGV2YW50IGVuY2Fwc3VsYXRlZCBkYXRhLiBLZXkgcXVlc3Rpb25zIEkgaGF2ZSBhcmUgd2hhdCB0aGUgZXhwZWN0ZWQgZGF0YWdyYW0gc3RydWN0dXJlIGlzLCB0aGUgbWV0aG9kcyB1c2VkIHRvIGRldGVybWluZSBwYWNrZXQgYm91bmRhcmllcyBpZiBhbnksIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgbWFsZm9ybWVkIG9yIGluY29tcGxldGUgZGF0YS4gTXkgbmV4dCBzdGVwcyBpbnZvbHZlIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLCBkYXRhIGJ1ZmZlcnMsIGFuZCBhbnkgc3RhdGUgdmFyaWFibGVzIHVzZWQgZHVyaW5nIHRoZSByZWNlaXZlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MzEuOTgxMDM2MDYxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9iYXJldWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjE6XFx0c3RhdGljIGludCBiYXJldWRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3QgPSBOVUxMO1xcbiAgNjQ6XFx0XFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Moa2V5KSA9IHsgfTtcXG4gIDY1OlxcdFxcdHN0cnVjdCBiYXJldWRwX2RldiAqYmFyZXVkcDtcXG4gIDY2OlxcdFxcdHVuc2lnbmVkIHNob3J0IGZhbWlseTtcXG4gIDY3OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuICA2ODpcXHRcXHRfX2JlMTYgcHJvdG87XFxuICA2OTpcXHRcXHR2b2lkICpvaXBoO1xcbiAgNzA6XFx0XFx0aW50IGVycjtcXG4gIDcxOlxcdFxcdGludCBuaDtcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0YmFyZXVkcCA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiAgNzQ6XFx0XFx0aWYgKCFiYXJldWRwKVxcbiAgNzU6XFx0XFx0XFx0Z290byBkcm9wO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSAgaHRvbnMoRVRIX1BfSVApKVxcbiAgNzg6XFx0XFx0XFx0ZmFtaWx5ID0gQUZfSU5FVDtcXG4gIDc5OlxcdFxcdGVsc2VcXG4gIDgwOlxcdFxcdFxcdGZhbWlseSA9IEFGX0lORVQ2O1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRpZiAoYmFyZXVkcC1cXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSkge1xcbiAgODM6XFx0XFx0XFx0X191OCBpcHZlcnNpb247XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdFxcdGlmIChza2JfY29weV9iaXRzKHNrYiwgQkFSRVVEUF9CQVNFX0hMRU4sIFxcdTAwMjZpcHZlcnNpb24sXFxuICA4NjpcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihpcHZlcnNpb24pKSkge1xcbiAgODc6XFx0XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXFx1MDAzZWRldik7XFxuICA4ODpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA4OTpcXHRcXHRcXHR9XFxuICA5MDpcXHRcXHRcXHRpcHZlcnNpb24gXFx1MDAzZVxcdTAwM2U9IDQ7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdFxcdGlmIChpcHZlcnNpb24gPT0gNCkge1xcbiAgOTM6XFx0XFx0XFx0XFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuICA5NDpcXHRcXHRcXHR9IGVsc2UgaWYgKGlwdmVyc2lvbiA9PSA2IFxcdTAwMjZcXHUwMDI2IGJhcmV1ZHAtXFx1MDAzZW11bHRpX3Byb3RvX21vZGUpIHtcXG4gIDk1OlxcdFxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuICA5NjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAgOTc6XFx0XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXFx1MDAzZWRldik7XFxuICA5ODpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuICA5OTpcXHRcXHRcXHR9XFxuIDEwMDpcXHRcXHR9IGVsc2UgaWYgKGJhcmV1ZHAtXFx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9NUExTX1VDKSkge1xcbiAxMDE6XFx0XFx0XFx0c3RydWN0IGlwaGRyICp0dW5uZWxfaGRyO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHR0dW5uZWxfaGRyID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiAxMDQ6XFx0XFx0XFx0aWYgKHR1bm5lbF9oZHItXFx1MDAzZXZlcnNpb24gPT0gNCkge1xcbiAxMDU6XFx0XFx0XFx0XFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdCh0dW5uZWxfaGRyLVxcdTAwM2VkYWRkcikpIHtcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdHByb3RvID0gYmFyZXVkcC1cXHUwMDNlZXRoZXJ0eXBlO1xcbiAxMDc6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChiYXJldWRwLVxcdTAwM2VtdWx0aV9wcm90b19tb2RlIFxcdTAwMjZcXHUwMDI2XFxuIDEwODpcXHRcXHRcXHRcXHRcXHQgICBpcHY0X2lzX211bHRpY2FzdCh0dW5uZWxfaGRyLVxcdTAwM2VkYWRkcikpIHtcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfTVBMU19NQyk7XFxuIDExMDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzozMS45ODExNzE1MzFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDU4Mzc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYmFyZXVkcF91ZHBfZW5jYXBfcmVjdmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBhcyBmYXIgYXMgaGFuZGxpbmcgZW5jYXBzdWxhdGVkIFVEUCB0cmFmZmljIGlzIGNvbmNlcm5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgZXNwZWNpYWxseSBhdCB0aGUgZW5kLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBsb2dpYywgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgZmluYWwgc3RhdGUgdHJhbnNpdGlvbnMuIEknbSBhc3N1bWluZywgYmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlIHdpdGggc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMsIHRoYXQgdGhlIGVuZCB3aWxsIGJlIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSBmaW5hbCBzdGVwcyB0aGlzIGZ1bmN0aW9uIHRha2VzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgdnVsbmVyYWJpbGl0aWVzIGF0IHRoZSBjb25jbHVzaW9uIG9mIHRoaXMgcm91dGluZT8gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGNvZGUgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjM1LjI5MTc1NzgzOFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9iYXJldWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTExLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTExOlxcdFxcdFxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVxcdTAwM2VkZXYpO1xcbiAxMTI6XFx0XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMTM6XFx0XFx0XFx0XFx0fVxcbiAxMTQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTE1OlxcdFxcdFxcdFxcdGludCBhZGRyX3R5cGU7XFxuIDExNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqdHVubmVsX2hkcl92NjtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0XFx0XFx0dHVubmVsX2hkcl92NiA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiAxMTk6XFx0XFx0XFx0XFx0YWRkcl90eXBlID1cXG4gMTIwOlxcdFxcdFxcdFxcdGlwdjZfYWRkcl90eXBlKChzdHJ1Y3QgaW42X2FkZHIgKilcXHUwMDI2dHVubmVsX2hkcl92Ni1cXHUwMDNlZGFkZHIpO1xcbiAxMjE6XFx0XFx0XFx0XFx0aWYgKCEoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpIHtcXG4gMTIyOlxcdFxcdFxcdFxcdFxcdHByb3RvID0gYmFyZXVkcC1cXHUwMDNlZXRoZXJ0eXBlO1xcbiAxMjM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChiYXJldWRwLVxcdTAwM2VtdWx0aV9wcm90b19tb2RlIFxcdTAwMjZcXHUwMDI2XFxuIDEyNDpcXHRcXHRcXHRcXHRcXHQgICAoYWRkcl90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkpIHtcXG4gMTI1OlxcdFxcdFxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfTVBMU19NQyk7XFxuIDEyNjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMjc6XFx0XFx0XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGJhcmV1ZHAtXFx1MDAzZWRldik7XFxuIDEyODpcXHRcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDEyOTpcXHRcXHRcXHRcXHR9XFxuIDEzMDpcXHRcXHRcXHR9XFxuIDEzMTpcXHRcXHR9IGVsc2Uge1xcbiAxMzI6XFx0XFx0XFx0cHJvdG8gPSBiYXJldWRwLVxcdTAwM2VldGhlcnR5cGU7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmIChpcHR1bm5lbF9wdWxsX2hlYWRlcihza2IsIEJBUkVVRFBfQkFTRV9ITEVOLFxcbiAxMzY6XFx0XFx0XFx0XFx0XFx0IHByb3RvLFxcbiAxMzc6XFx0XFx0XFx0XFx0XFx0ICFuZXRfZXEoYmFyZXVkcC1cXHUwMDNlbmV0LFxcbiAxMzg6XFx0XFx0XFx0XFx0XFx0IGRldl9uZXQoYmFyZXVkcC1cXHUwMDNlZGV2KSkpKSB7XFxuIDEzOTpcXHRcXHRcXHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQoYmFyZXVkcC1cXHUwMDNlZGV2KTtcXG4gMTQwOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBrZXkpO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHR0dW5fZHN0ID0gdWRwX3R1bl9yeF9kc3Qoc2tiLCBmYW1pbHksIGtleSwgMCwgMCk7XFxuIDE0NjpcXHRcXHRpZiAoIXR1bl9kc3QpIHtcXG4gMTQ3OlxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChiYXJldWRwLVxcdTAwM2VkZXYpO1xcbiAxNDg6XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2dHVuX2RzdC1cXHUwMDNlZHN0KTtcXG4gMTUxOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gYmFyZXVkcC1cXHUwMDNlZGV2O1xcbiAxNTI6XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogU2F2ZSBvZmZzZXQgb2Ygb3V0ZXIgaGVhZGVyIHJlbGF0aXZlIHRvIHNrYi1cXHUwMDNlaGVhZCxcXG4gMTU1OlxcdFxcdCAqIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0IHRoZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgaW5uZXIgaGVhZGVyXFxuIDE1NjpcXHRcXHQgKiBhbmQgbWlnaHQgY2hhbmdlIHNrYi1cXHUwMDNlaGVhZC5cXG4gMTU3OlxcdFxcdCAqL1xcbiAxNTg6XFx0XFx0bmggPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZDtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjM1LjI5MTg1NjEwOFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwNDI0MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBhbmFseXplLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGluc3RydWN0aW9uIGlzIGNsZWFyIOKAkyBJJ20gbW92aW5nIG9uIHRvIGRpc3NlY3QgdGhlIGZ1bmN0aW9uIGBiYXJldWRwX3VkcF9lbmNhcF9yZWN2YC4gSSd2ZSBhbHJlYWR5IGV4YW1pbmVkIHNvbWUgcmVsYXRlZCBwYXJ0cywgYnV0IG5vdyBpdCdzIHRpbWUgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgKG9yIGF0IGxlYXN0LCBsb2dpY2FsbHksIGlmIGl0J3MgZGVuc2UpIGFuZCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGZvciBhbnl0aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LCBhbnkgcG90ZW50aWFsIGdvdGNoYXMsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUuIEknbGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGFib3V0IGVycm9yIGhhbmRsaW5nLCBidWZmZXIgbWFuYWdlbWVudCwgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gcGFyc2luZyBwb3RlbnRpYWxseSBtYWxpY2lvdXMgVURQIHBhY2tldHMgd2l0aGluIHRoaXMgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZW5jYXBzdWxhdGlvbiBpcyBwZXJmb3JtaW5nIGFzIGV4cGVjdGVkLCBlbnN1cmluZyB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgaXNuJ3QgY29tcHJvbWlzZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHBhc3NlZCBhcm91bmQgaW4gdGhpcyBjcml0aWNhbCBhcmVhLCBrZWVwaW5nIGluIG1pbmQgbXkgcGFzdCBleHBlcmllbmNlIHdpdGggdGhlc2UgaW1wbGVtZW50YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6MzkuNTUyMjgzMDUzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JhcmV1ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKSB7XFxuIDE2MzpcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXFx1MDAzZWRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XFxuIDE2NDpcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4gMTY1OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTY2OlxcdFxcdH1cXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0LyogR2V0IHRoZSBvdXRlciBoZWFkZXIuICovXFxuIDE2OTpcXHRcXHRvaXBoID0gc2tiLVxcdTAwM2VoZWFkICsgbmg7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGlmICghaXB2Nl9tb2RfZW5hYmxlZCgpIHx8IGZhbWlseSA9PSBBRl9JTkVUKVxcbiAxNzI6XFx0XFx0XFx0ZXJyID0gSVBfRUNOX2RlY2Fwc3VsYXRlKG9pcGgsIHNrYik7XFxuIDE3MzpcXHRcXHRlbHNlXFxuIDE3NDpcXHRcXHRcXHRlcnIgPSBJUDZfRUNOX2RlY2Fwc3VsYXRlKG9pcGgsIHNrYik7XFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuIDE3NzpcXHRcXHRcXHRpZiAobG9nX2Vjbl9lcnJvcikge1xcbiAxNzg6XFx0XFx0XFx0XFx0aWYgICghaXB2Nl9tb2RfZW5hYmxlZCgpIHx8IGZhbWlseSA9PSBBRl9JTkVUKVxcbiAxNzk6XFx0XFx0XFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIm5vbi1FQ1QgZnJvbSAlcEk0IFxcXCJcXG4gMTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIndpdGggVE9TPSUjeFxcXFxuXFxcIixcXG4gMTgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNigoc3RydWN0IGlwaGRyICopb2lwaCktXFx1MDAzZXNhZGRyLFxcbiAxODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAoKHN0cnVjdCBpcGhkciAqKW9pcGgpLVxcdTAwM2V0b3MpO1xcbiAxODM6XFx0XFx0XFx0XFx0ZWxzZVxcbiAxODQ6XFx0XFx0XFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIm5vbi1FQ1QgZnJvbSAlcEk2XFxcXG5cXFwiLFxcbiAxODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2KChzdHJ1Y3QgaXB2NmhkciAqKW9pcGgpLVxcdTAwM2VzYWRkcik7XFxuIDE4NjpcXHRcXHRcXHR9XFxuIDE4NzpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMSkge1xcbiAxODg6XFx0XFx0XFx0XFx0REVWX1NUQVRTX0lOQyhiYXJldWRwLVxcdTAwM2VkZXYsIHJ4X2ZyYW1lX2Vycm9ycyk7XFxuIDE4OTpcXHRcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGJhcmV1ZHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4gMTkwOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDE5NTpcXHRcXHRlcnIgPSBncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2YmFyZXVkcC1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbiAxOTY6XFx0XFx0aWYgKGxpa2VseShlcnIgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbiAxOTc6XFx0XFx0XFx0ZGV2X2RzdGF0c19yeF9hZGQoYmFyZXVkcC1cXHUwMDNlZGV2LCBsZW4pO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMjAwOlxcdGRyb3A6XFxuIDIwMTpcXHRcXHQvKiBDb25zdW1lIGJhZCBwYWNrZXQgKi9cXG4gMjAyOlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjA1OlxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0c3RhdGljIGludCBiYXJldWRwX2Vycl9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyMDg6XFx0e1xcbiAyMDk6XFx0XFx0cmV0dXJuIDA7XFxuIDIxMDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjM5LjU1MjM3NDI5M1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3OTE0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGVjb2RpbmcgYSBOZXR3b3JrIEVuY2Fwc3VsYXRpb24gUHV6emxlKipcblxuQWxyaWdodCwgc28gYGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3ZgIGlzIHJldHVybmluZyBhIHplcm8uIFRoYXQncyBub3QgdGhlIHByb2JsZW0uIFRoYXQncyBhIHN1Y2Nlc3MsIGF0IGxlYXN0IGZyb20gKml0cyogcGVyc3BlY3RpdmUuICBJIGtuZXcgdGhhdC4gU28sIEkgbmVlZCB0byBsb29rIHVwc3RyZWFtLiBJdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gYmUgYE5FVF9GT1VgIHRoYXQncyB0aGUgY3VscHJpdCwgcmV0dXJuaW5nIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8uIFRoYXQncyB0aGUgb25lIHRoYXQncyB0cmlnZ2VyaW5nIHRoZSByZXN1Ym1pc3Npb24uIFRoYXQgbWFrZXMgc2Vuc2UuIExldCdzIGRpZyBpbnRvIGBndHBfZW5jYXBfcmVjdmAgbmV4dCwgdGhhdCdzIHdoZXJlIHRoZSBwcm9ibGVtIGlzIGFsbW9zdCBjZXJ0YWlubHkgb3JpZ2luYXRpbmcsIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjQzLjQ5MDI5MDgwNloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NzUzMzcyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz04ODU9c3RhdGljIHZvaWQgZ3RwX2VuY2FwX2Rpc2FibGUoc3RydWN0IGd0cF9kZXYgKmd0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkwMS0gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo5MDI6c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE0MDM9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfY3JlYXRlX3NvY2soaW50IHR5cGUsIHN0cnVjdCBndHBfZGV2ICpndHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNDMzLVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNDM0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNDM1LVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE2NDg9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfZW5jYXBfZW5hYmxlX3NvY2tldChpbnQgZmQsIGludCB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY4OC1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTY4OTpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5MC1cXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzo0NS41NDc4M1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA3Nzk5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBndHBfZW5jYXBfcmVjdmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBgZ3RwX2VuY2FwX3JlY3ZgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uLCBvciBhdCBsZWFzdCBhIGtleSBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93LiBJdCdzIHRoZSBwb2ludCB3aGVyZSBHVFAgcGFja2V0cyBhcmUgYmVpbmcgaGFuZGxlZCwgcHJlc3VtYWJseSByZWNlaXZlZCBhbmQgZGVjYXBzdWxhdGVkLiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSB3b3JraW5nIG9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCB0aGlzIGlzIHdvcmtpbmcsIG9yIHdoZXJlIGFueSBwb3RlbnRpYWwgcHJvYmxlbXMgbWlnaHQgYmUgbHVya2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2hlcmUgYW55IGlzc3VlcyB3aXRoIHBhY2tldCBoYW5kbGluZyB3b3VsZCBiZSBtYW5pZmVzdGluZy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjQ4Ljk1NTYzMjc1OFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAyOlxcdHN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MDM6XFx0e1xcbiA5MDQ6XFx0XFx0c3RydWN0IGd0cF9kZXYgKmd0cDtcXG4gOTA1OlxcdFxcdGludCByZXQgPSAwO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRndHAgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcXG4gOTA4OlxcdFxcdGlmICghZ3RwKVxcbiA5MDk6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDkxMDpcXHRcXG4gOTExOlxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJlbmNhcF9yZWN2IHNrPSVwXFxcXG5cXFwiLCBzayk7XFxuIDkxMjpcXHRcXG4gOTEzOlxcdFxcdHN3aXRjaCAoUkVBRF9PTkNFKHVkcF9zayhzayktXFx1MDAzZWVuY2FwX3R5cGUpKSB7XFxuIDkxNDpcXHRcXHRjYXNlIFVEUF9FTkNBUF9HVFAwOlxcbiA5MTU6XFx0XFx0XFx0bmV0ZGV2X2RiZyhndHAtXFx1MDAzZWRldiwgXFxcInJlY2VpdmVkIEdUUDAgcGFja2V0XFxcXG5cXFwiKTtcXG4gOTE2OlxcdFxcdFxcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xcbiA5MTc6XFx0XFx0XFx0YnJlYWs7XFxuIDkxODpcXHRcXHRjYXNlIFVEUF9FTkNBUF9HVFAxVTpcXG4gOTE5OlxcdFxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJyZWNlaXZlZCBHVFAxVSBwYWNrZXRcXFxcblxcXCIpO1xcbiA5MjA6XFx0XFx0XFx0cmV0ID0gZ3RwMXVfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xcbiA5MjE6XFx0XFx0XFx0YnJlYWs7XFxuIDkyMjpcXHRcXHRkZWZhdWx0OlxcbiA5MjM6XFx0XFx0XFx0cmV0ID0gLTE7IC8qIFNob3VsZG4ndCBoYXBwZW4uICovXFxuIDkyNDpcXHRcXHR9XFxuIDkyNTpcXHRcXG4gOTI2OlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuIDkyNzpcXHRcXHRjYXNlIDE6XFxuIDkyODpcXHRcXHRcXHRuZXRkZXZfZGJnKGd0cC1cXHUwMDNlZGV2LCBcXFwicGFzcyB1cCB0byB0aGUgcHJvY2Vzc1xcXFxuXFxcIik7XFxuIDkyOTpcXHRcXHRcXHRicmVhaztcXG4gOTMwOlxcdFxcdGNhc2UgMDpcXG4gOTMxOlxcdFxcdFxcdGJyZWFrO1xcbiA5MzI6XFx0XFx0Y2FzZSAtMTpcXG4gOTMzOlxcdFxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJHVFAgcGFja2V0IGhhcyBiZWVuIGRyb3BwZWRcXFxcblxcXCIpO1xcbiA5MzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDkzNTpcXHRcXHRcXHRyZXQgPSAwO1xcbiA5MzY6XFx0XFx0XFx0YnJlYWs7XFxuIDkzNzpcXHRcXHR9XFxuIDkzODpcXHRcXG4gOTM5OlxcdFxcdHJldHVybiByZXQ7XFxuIDk0MDpcXHR9XFxuIDk0MTpcXHRcXG4gOTQyOlxcdHN0YXRpYyB2b2lkIGd0cF9kZXZfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDk0MzpcXHR7XFxuIDk0NDpcXHRcXHRzdHJ1Y3QgZ3RwX2RldiAqZ3RwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0Z3RwX2VuY2FwX2Rpc2FibGUoZ3RwKTtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdFxcbiA5NDk6XFx0c3RhdGljIGlubGluZSB2b2lkIGd0cDBfcHVzaF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBkcF9jdHggKnBjdHgpXFxuIDk1MDpcXHR7XFxuIDk1MTpcXHRcXHRpbnQgcGF5bG9hZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6NDguOTU1Nzk3OTc4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTU5NDM1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEdUUCBFbmNhcHN1bGF0aW9uIFJldHVybiBDb2RlcyoqXG5cbk9rYXksIHNvIGBndHBfZW5jYXBfcmVjdmAgaXMgb25seSBnaXZpbmcgbWUgdGhyZWUgcG9zc2libGUgcmV0dXJuIHZhbHVlczogMSwgMCwgb3IgLTEuIEFuZCBJIGtub3cgdGhhdCAtMSBpcyB0aGVuIGNvbnZlcnRlZCB0byAwLiBUaGF0J3MgZ29vZCB0byBrbm93LCBidXQgbm90IHF1aXRlIHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBJdCdzIG5vdCByZXR1cm5pbmcgYW55dGhpbmcgbGlrZSBhIG5lZ2F0aXZlIHZhbHVlIGxlc3MgdGhhbiB6ZXJvLCBzdWNoIGFzIHdoYXQgSSdkIHNlZSB3aXRoIGAtSVBQUk9UT19JUElQYC4gSG1tLi4uIGl0IHNlZW1zIGxpa2UgYE5FVF9GT1VgIGlzIHRoZSBpbmRpY2F0b3IgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZW4uXG5cbkxldCdzIHNoaWZ0IGdlYXJzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAuIFNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgdGVsbGluZyBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjUyLjU1MTc0MzgyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwOTk2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmV2ZV91ZHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz01NzA9c3RhdGljIGludCBnZW5ldmVfcG9zdF9kZWNhcF9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTY1MC0vKiBDYWxsYmFjayBmcm9tIG5ldC9pcHY0L3VkcC5jIHRvIHJlY2VpdmUgcGFja2V0cyAqL1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjY1MTpzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtNjUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTk5Mz1zdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xMDI1LVxcdHR1bm5lbF9jZmcuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxMDI2OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gZ2VuZXZlX3VkcF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTEwMjctXFx0dHVubmVsX2NmZy5lbmNhcF9lcnJfbG9va3VwID0gZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozNzo1NC40NDI3NDc3NzhaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MzQ0NDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAqKlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YC4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgc29tZSBmdW5jdGlvbiBpbnZvbHZlZCBpbiByZWNlaXZpbmcgZW5jYXBzdWxhdGVkIEdlbmV2ZSBwYWNrZXRzIG92ZXIgVURQLiBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgdXMgdGhhdCBtdWNoLiBHaXZlbiB0aGF0IEknbSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGlvbiwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0OiB3aGF0IGFyZSB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCwgd2hhdCdzIHRoZSB0eXBpY2FsIG5ldHdvcmsgZmxvdywgYW5kIHdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHM/IElzIGl0IHBhcnQgb2YgdGhlIGZhc3QgcGF0aCwgb3IgaXMgaXQgbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBldmVuIGlmIGl0IGlzIG5vdCAqb24qIHRoZSBmYXN0IHBhdGg/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgcGFyc2luZyB0aGUgVURQIGhlYWRlciwgdmVyaWZ5aW5nIGl0cyBjaGVja3N1bSwgYW5kIHRoZW4gcGVlbGluZyBvZmYgdGhlIEdlbmV2ZSBoZWFkZXIgdG8gZ2V0IGF0IHRoZSBpbm5lciBwYWNrZXQuIEkgbmVlZCB0byBrbm93IGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgbGlrZSBmcmFnbWVudGVkIFVEUCBwYWNrZXRzIGFuZCBpZiBpdCBoYXMgYW55IHNlY3VyaXR5IGNoZWNrcyBhcyB0aGUgR2VuZXZlIGhlYWRlciBjb250YWlucyBtZXRhZGF0YSB0aGF0IGEgbWFsaWNpb3VzIGFjdG9yIG1pZ2h0IHNlZWsgdG8gdXNlIHRvIGNvbXByb21pc2UgYSBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBpdCBkZWFscyB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gSSdsbCBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgcGF5bG9hZCBpcyBoYW5kZWQgb2ZmLiBEb2VzIGl0IGNvcHkgdGhlIGRhdGEsIG9yIHBhc3MgYSBwb2ludGVyPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBhbmQgdGhyZWFkIHNhZmV0eT8gSSBrbm93IGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgZW5jYXBzdWxhdGlvbiBmdW5jdGlvbnMgdG8gYmUgZWZmaWNpZW50LCBzbyBJJ2xsIGJlIHRoaW5raW5nIGFib3V0IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzLCB0b28uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODgyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzc6NTguNjM2MTk0OTU5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NTE6XFx0c3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA2NTI6XFx0e1xcbiA2NTM6XFx0XFx0c3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaDtcXG4gNjU0OlxcdFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU7XFxuIDY1NTpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xcbiA2NTY6XFx0XFx0X19iZTE2IGlubmVyX3Byb3RvO1xcbiA2NTc6XFx0XFx0aW50IG9wdHNfbGVuO1xcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHQvKiBOZWVkIFVEUCBhbmQgR2VuZXZlIGhlYWRlciB0byBiZSBwcmVzZW50ICovXFxuIDY2MDpcXHRcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBHRU5FVkVfQkFTRV9ITEVOKSkpXFxuIDY2MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY2MjpcXHRcXG4gNjYzOlxcdFxcdC8qIFJldHVybiBwYWNrZXRzIHdpdGggcmVzZXJ2ZWQgYml0cyBzZXQgKi9cXG4gNjY0OlxcdFxcdGdlbmV2ZWggPSBnZW5ldmVfaGRyKHNrYik7XFxuIDY2NTpcXHRcXHRpZiAodW5saWtlbHkoZ2VuZXZlaC1cXHUwMDNldmVyICE9IEdFTkVWRV9WRVIpKVxcbiA2NjY6XFx0XFx0XFx0Z290byBkcm9wO1xcbiA2Njc6XFx0XFxuIDY2ODpcXHRcXHRncyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiA2Njk6XFx0XFx0aWYgKCFncylcXG4gNjcwOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNjcxOlxcdFxcbiA2NzI6XFx0XFx0Z2VuZXZlID0gZ2VuZXZlX2xvb2t1cF9za2IoZ3MsIHNrYik7XFxuIDY3MzpcXHRcXHRpZiAoIWdlbmV2ZSlcXG4gNjc0OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVxcdTAwM2Vwcm90b190eXBlO1xcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRpZiAodW5saWtlbHkoKCFnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFxcdTAwMjZcXHUwMDI2XFxuIDY3OTpcXHRcXHRcXHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcXG4gNjgwOlxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtXFx1MDAzZWRldik7XFxuIDY4MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY4MjpcXHRcXHR9XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdG9wdHNfbGVuID0gZ2VuZXZlaC1cXHUwMDNlb3B0X2xlbiAqIDQ7XFxuIDY4NTpcXHRcXHRpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBHRU5FVkVfQkFTRV9ITEVOICsgb3B0c19sZW4sIGlubmVyX3Byb3RvLFxcbiA2ODY6XFx0XFx0XFx0XFx0XFx0ICFuZXRfZXEoZ2VuZXZlLVxcdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVxcdTAwM2VkZXYpKSkpIHtcXG4gNjg3OlxcdFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtXFx1MDAzZWRldik7XFxuIDY4ODpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDY4OTpcXHRcXHR9XFxuIDY5MDpcXHRcXG4gNjkxOlxcdFxcdC8qXFxuIDY5MjpcXHRcXHQgKiBBZnRlciBoaW50IHByb2Nlc3NpbmcsIHRoZSB0cmFuc3BvcnQgaGVhZGVyIHBvaW50cyB0byB0aGUgaW5uZXIgb25lXFxuIDY5MzpcXHRcXHQgKiBhbmQgd2UgY2FuJ3QgdXNlIGFueW1vcmUgb24gZ2VuZXZlX2hkcigpLlxcbiA2OTQ6XFx0XFx0ICovXFxuIDY5NTpcXHRcXHRnZW5ldmVoID0gZ2VuZXZlX2hkcihza2IpO1xcbiA2OTY6XFx0XFx0aWYgKGdlbmV2ZV9wb3N0X2RlY2FwX2hpbnQoc2ssIHNrYiwgc2l6ZW9mKHN0cnVjdCBnZW5ldmVoZHIpICtcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdCAgIG9wdHNfbGVuLCBcXHUwMDI2Z2VuZXZlaCkpIHtcXG4gNjk4OlxcdFxcdFxcdERFVl9TVEFUU19JTkMoZ2VuZXZlLVxcdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XFxuIDY5OTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDcwMDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM3OjU4LjYzNjM2NDE4OVoiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA5Njc2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgIEZ1bmN0aW9uJ3MgVGFpbCoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSB0YWlsIGVuZCBvZiB0aGUgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAgZnVuY3Rpb24uIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBjcml0aWNhbCBwYXRoIGxpa2VseSByZXZlYWxzIGl0c2VsZiwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGVycm9yIGNvbmRpdGlvbnMuIEl0J3MgdGhlIHBsYWNlIHdoZXJlIHRoZSBwcm9jZXNzZWQgcGFja2V0cyBhcmUgZmluYWxseSBoYW5kbGVkLCBhbmQgdGhpcyBpcyB3aGVyZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1pZ2h0IGJlIGx1cmtpbmcuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IGl0J3MgZG9pbmcgd2l0aCB0aGUgZGF0YSBvbmNlIGl0J3MgYmVlbiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLiBJcyBpdCBtZXJlbHkgZW5xdWV1aW5nLCBvciBpcyB0aGVyZSBtb3JlIGNvbXBsZXggcHJvY2Vzc2luZyBoYXBwZW5pbmcgdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQsIG9yIGV2ZW4gaGF2ZSBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IElzIHRoZXJlIGFueSBwYWNrZXQgYWNjb3VudGluZyBwZXJmb3JtZWQgaGVyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjAxLjg0NjA0MjkxNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZ2VuZXZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAxOlxcdFxcbiA3MDI6XFx0XFx0Z2VuZXZlX3J4KGdlbmV2ZSwgZ3MsIHNrYiwgZ2VuZXZlaCk7XFxuIDcwMzpcXHRcXHRyZXR1cm4gMDtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0ZHJvcDpcXG4gNzA2OlxcdFxcdC8qIENvbnN1bWUgYmFkIHBhY2tldCAqL1xcbiA3MDc6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDcwODpcXHRcXHRyZXR1cm4gMDtcXG4gNzA5OlxcdH1cXG4gNzEwOlxcdFxcbiA3MTE6XFx0LyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2ezQsNn0vdWRwLmMgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdHVubmVsIGZvciBlcnJvcnMgKi9cXG4gNzEyOlxcdHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNzEzOlxcdHtcXG4gNzE0OlxcdFxcdHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWg7XFxuIDcxNTpcXHRcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xcbiA3MTY6XFx0XFx0dTggemVyb192bmlbM10gPSB7IDAgfTtcXG4gNzE3OlxcdFxcdHU4ICp2bmkgPSB6ZXJvX3ZuaTtcXG4gNzE4OlxcdFxcbiA3MTk6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIEdFTkVWRV9CQVNFX0hMRU4pKVxcbiA3MjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdGdlbmV2ZWggPSBnZW5ldmVfaGRyKHNrYik7XFxuIDcyMzpcXHRcXHRpZiAoZ2VuZXZlaC1cXHUwMDNldmVyICE9IEdFTkVWRV9WRVIpXFxuIDcyNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzI1OlxcdFxcbiA3MjY6XFx0XFx0aWYgKGdlbmV2ZWgtXFx1MDAzZXByb3RvX3R5cGUgIT0gaHRvbnMoRVRIX1BfVEVCKSlcXG4gNzI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRncyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbiA3MzA6XFx0XFx0aWYgKCFncylcXG4gNzMxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAoZ2VuZXZlX2dldF9za19mYW1pbHkoZ3MpID09IEFGX0lORVQpIHtcXG4gNzM0OlxcdFxcdFxcdHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XFxuIDczNTpcXHRcXHRcXHRfX2JlMzIgYWRkcjQgPSAwO1xcbiA3MzY6XFx0XFxuIDczNzpcXHRcXHRcXHRpZiAoIWdzLVxcdTAwM2Vjb2xsZWN0X21kKSB7XFxuIDczODpcXHRcXHRcXHRcXHR2bmkgPSBnZW5ldmVfaGRyKHNrYiktXFx1MDAzZXZuaTtcXG4gNzM5OlxcdFxcdFxcdFxcdGFkZHI0ID0gaXBoLVxcdTAwM2VkYWRkcjtcXG4gNzQwOlxcdFxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0XFx0cmV0dXJuIGdlbmV2ZV9sb29rdXAoZ3MsIGFkZHI0LCB2bmkpID8gMCA6IC1FTk9FTlQ7XFxuIDc0MzpcXHRcXHR9XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA3NDY6XFx0XFx0aWYgKGdlbmV2ZV9nZXRfc2tfZmFtaWx5KGdzKSA9PSBBRl9JTkVUNikge1xcbiA3NDc6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbiA3NDg6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyIGFkZHI2O1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjAxLjg0NjE5ODU5NVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE0MTQ1MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBFbmNhcHN1bGF0aW9uIElzc3VlKipcblxuSG1tLCBzbyBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCBpcyByZXR1cm5pbmcgMC4gVGhhdCdzLi4uIG5vdCBpbW1lZGlhdGVseSBhbGFybWluZywgYnV0IGl0IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFR5cGljYWxseSwgYSB6ZXJvIHJldHVybiBmcm9tIGEgcmVjZWl2ZSBmdW5jdGlvbiBpc24ndCBhICpmYWlsdXJlKiwgaXQgdXN1YWxseSBpbXBsaWVzIGEgc3VjY2Vzc2Z1bCwgYnV0IHBvdGVudGlhbGx5IGVtcHR5LCByZWFkIG9yIHNvbWUgb3RoZXIgXCJPS1wiIGNvbmRpdGlvbi4gSG93ZXZlciwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGluIHRoZXNlIGVuY2Fwc3VsYXRpb24gcGF0aHMsIGEgemVybyByZXR1cm4gKmNhbiogbWFzayB1bmRlcmx5aW5nIGlzc3VlcywgZXNwZWNpYWxseSBpbiBjb3JuZXIgY2FzZXMuXG5cbk15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IGlmIHdlJ3JlIHNlZWluZyBhbiB1bmV4cGVjdGVkIHplcm8gZnJvbSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCwgaXQgbWlnaHQgYmUgYW4gaXNzdWUgdGhhdCB3ZSBtaWdodCBvdGhlcndpc2UgY2F0Y2ggd2l0aCBgTkVUX0ZPVWAuICBJdCdzIHZlcnkgY29tbW9uIHRvIHNlZSB0aGF0IHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLiAgVGhhdCdzIGdlbmVyYWxseSB0aGUgZnVuY3Rpb24gSSdkIGV4cGVjdCB0byBmbGFnIHNvbWV0aGluZyBnb2luZyBhd3J5IGluIHRoZSBmcmFtZSBwcm9jZXNzaW5nLlxuXG5MZXQgbWUgc3dpdGNoIGdlYXJzIGFuZCBxdWlja2x5IGV4YW1pbmUgYHZ4bGFuX3JjdmAuIFNpbmNlIEdlbmV2ZSBhbmQgVlhMQU4gc2hhcmUgYSBzaW1pbGFyIGFyY2hpdGVjdHVyYWwgcGFyYWRpZ20sIGFuZCB0aGUgZW5jYXBzdWxhdGlvbiBvciBkZWNhcHN1bGF0aW9uIHBhdGhzIGNhbiBnZXQgcXVpdGUgY29tcGxpY2F0ZWQsIGl0J3Mgd29ydGggY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGltbWVkaWF0ZSBjb3JyZWxhdGlvbiBvciBpZiB0aGUgYmVoYXZpb3IgbWlnaHQgYmUgc2ltaWxhciBpbiB0aGF0IGZ1bmN0aW9uLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGJhc2VsaW5lIGFuZCBhIGNvbXBhcmlzb24gcG9pbnQuIEknbGwgZm9jdXMgb24gaG93IFZYTEFOIGhhbmRsZXMgemVybyByZXR1cm4gdmFsdWVzIGZvciBjb3JyZWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwNTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjA2LjI2MDM0NjcwN1oiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNDEyMDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGxhbl9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2MjI9c3RhdGljIGJvb2wgdnhsYW5fZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCB2eGxhbl9zb2NrICp2cywgdm9pZCAqb2lwaCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ1LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNjQ2OnN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTY0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzU3Nz1zdGF0aWMgc3RydWN0IHZ4bGFuX3NvY2sgKnZ4bGFuX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBib29sIGlwdjYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzYxNC1cXHR0dW5uZWxfY2ZnLmVuY2FwX3R5cGUgPSAxO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozNjE1OlxcdHR1bm5lbF9jZmcuZW5jYXBfcmN2ID0gdnhsYW5fcmN2O1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNjE2LVxcdHR1bm5lbF9jZmcuZW5jYXBfZXJyX2xvb2t1cCA9IHZ4bGFuX2Vycl9sb29rdXA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3R1bm5lbC5jLTQ3LSAqICA0KSB2ZXRoMCdzIGluZ3Jlc3MgcXVldWUgcmVjZWl2ZSB0aGUgdHVubmVsZWQgcGFja2V0IGF0IG5hbWVzcGFjZSBhdF9uczAuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90dW5uZWwuYzo0ODogKiAgNSkgVHVubmVsIHByb3RvY29sIGhhbmRsZXIsIGV4OiB2eGxhbl9yY3YsIGRlY2FwIHRoZSBwYWNrZXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90dW5uZWwuYy00OS0gKiAgNikgRm9yd2FyZCB0aGUgcGFja2V0IHRvIHRoZSBvdmVybGF5IHRubCBkZXYuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjA4LjA3NDQ5ODg3MVoiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcyNzg5NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdnhsYW5fcmN2YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGB2eGxhbl9yY3ZgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LCBhbmQgdGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGFuc3dlcnMuIEkga25vdyBpdCdzIGEga2V5IHBhcnQgb2YgdGhlIFZ4TEFOIHJlY2VpdmluZyBwYXRoLCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NTcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxMS4zNDcyOTA2MTFaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjQ2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjQ2OlxcdHN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNjQ3OlxcdHtcXG4xNjQ4OlxcdFxcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSA9IE5VTEw7XFxuMTY0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgdnhsYW5oZHIgKnZoO1xcbjE2NTA6XFx0XFx0c3RydWN0IHZ4bGFuX2RldiAqdnhsYW47XFxuMTY1MTpcXHRcXHRzdHJ1Y3QgdnhsYW5fc29jayAqdnM7XFxuMTY1MjpcXHRcXHRzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgX21kO1xcbjE2NTM6XFx0XFx0c3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCA9IFxcdTAwMjZfbWQ7XFxuMTY1NDpcXHRcXHRfX2JlMTYgcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9URUIpO1xcbjE2NTU6XFx0XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbjE2NTY6XFx0XFx0Ym9vbCByYXdfcHJvdG8gPSBmYWxzZTtcXG4xNjU3OlxcdFxcdHZvaWQgKm9pcGg7XFxuMTY1ODpcXHRcXHRfX2JlMzIgdm5pID0gMDtcXG4xNjU5OlxcdFxcdGludCBuaDtcXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0LyogTmVlZCBVRFAgYW5kIFZYTEFOIGhlYWRlciB0byBiZSBwcmVzZW50ICovXFxuMTY2MjpcXHRcXHRyZWFzb24gPSBwc2tiX21heV9wdWxsX3JlYXNvbihza2IsIFZYTEFOX0hMRU4pO1xcbjE2NjM6XFx0XFx0aWYgKHJlYXNvbilcXG4xNjY0OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNjY1OlxcdFxcbjE2NjY6XFx0XFx0dmggPSB2eGxhbl9oZHIoc2tiKTtcXG4xNjY3OlxcdFxcdC8qIFZOSSBmbGFnIGFsd2F5cyByZXF1aXJlZCB0byBiZSBzZXQgKi9cXG4xNjY4OlxcdFxcdGlmICghKHZoLVxcdTAwM2V2eF9mbGFncyBcXHUwMDI2IFZYTEFOX0hGX1ZOSSkpIHtcXG4xNjY5OlxcdFxcdFxcdG5ldGRldl9kYmcoc2tiLVxcdTAwM2VkZXYsIFxcXCJpbnZhbGlkIHZ4bGFuIGZsYWdzPSUjeCB2bmk9JSN4XFxcXG5cXFwiLFxcbjE2NzA6XFx0XFx0XFx0XFx0ICAgbnRvaGwodmgtXFx1MDAzZXZ4X2ZsYWdzKSwgbnRvaGwodmgtXFx1MDAzZXZ4X3ZuaSkpO1xcbjE2NzE6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1ZYTEFOX0lOVkFMSURfSERSO1xcbjE2NzI6XFx0XFx0XFx0LyogUmV0dXJuIG5vbiB2eGxhbiBwa3QgKi9cXG4xNjczOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNjc0OlxcdFxcdH1cXG4xNjc1OlxcdFxcbjE2NzY6XFx0XFx0dnMgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcXG4xNjc3OlxcdFxcdGlmICghdnMpXFxuMTY3ODpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTY3OTpcXHRcXG4xNjgwOlxcdFxcdHZuaSA9IHZ4bGFuX3ZuaSh2aC1cXHUwMDNldnhfdm5pKTtcXG4xNjgxOlxcdFxcbjE2ODI6XFx0XFx0dnhsYW4gPSB2eGxhbl92c19maW5kX3ZuaSh2cywgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIHZuaSwgXFx1MDAyNnZuaW5vZGUpO1xcbjE2ODM6XFx0XFx0aWYgKCF2eGxhbikge1xcbjE2ODQ6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1ZYTEFOX1ZOSV9OT1RfRk9VTkQ7XFxuMTY4NTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTY4NjpcXHRcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdGlmICh2aC1cXHUwMDNldnhfZmxhZ3MgXFx1MDAyNiB2eGxhbi1cXHUwMDNlY2ZnLnJlc2VydmVkX2JpdHMudnhfZmxhZ3MgfHxcXG4xNjg5OlxcdFxcdCAgICB2aC1cXHUwMDNldnhfdm5pIFxcdTAwMjYgdnhsYW4tXFx1MDAzZWNmZy5yZXNlcnZlZF9iaXRzLnZ4X3ZuaSkge1xcbjE2OTA6XFx0XFx0XFx0LyogSWYgdGhlIGhlYWRlciB1c2VzIGJpdHMgYmVzaWRlcyB0aG9zZSBlbmFibGVkIGJ5IHRoZVxcbjE2OTE6XFx0XFx0XFx0ICogbmV0ZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHRyZWF0IHRoaXMgYXMgYSBtYWxmb3JtZWQgcGFja2V0LlxcbjE2OTI6XFx0XFx0XFx0ICogVGhpcyBiZWhhdmlvciBkaXZlcmdlcyBmcm9tIFZYTEFOIFJGQyAoUkZDNzM0OCkgd2hpY2hcXG4xNjkzOlxcdFxcdFxcdCAqIHN0aXB1bGF0ZXMgdGhhdCBiaXRzIGluIHJlc2VydmVkIGluIHJlc2VydmVkIGZpZWxkcyBhcmUgdG8gYmVcXG4xNjk0OlxcdFxcdFxcdCAqIGlnbm9yZWQuIFRoZSBhcHByb2FjaCBoZXJlIG1haW50YWlucyBjb21wYXRpYmlsaXR5IHdpdGhcXG4xNjk1OlxcdFxcdFxcdCAqIHByZXZpb3VzIHN0YWNrIGNvZGUsIGFuZCBhbHNvIGlzIG1vcmUgcm9idXN0IGFuZCBwcm92aWRlcyBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjExLjM0NzQ3MDEyMVoiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM3NDgzNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZ4bGFuX3JjdjogVGhlIEZpbmFsIEZyb250aWVyIChmb3IgTm93KSoqXG5cbk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRhaWwgZW5kIG9mIGB2eGxhbl9yY3ZgLiBJJ3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIGZ1bmN0aW9uIGZvciBhIHdoaWxlIG5vdywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSBtZW50YWwgbW9kZWwgb2YgaXRzIGZpbmFsIG9wZXJhdGlvbnMuIFdoZXJlIGRvZXMgdGhlIGRhdGEgZmluYWxseSBnbz8gV2hhdCdzIHRoZSB1bHRpbWF0ZSBwYXRoIGFmdGVyIHRoZSBkZWNhcHN1bGF0aW9uIGFuZCBiYXNpYyBjaGVja3M/IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGdsYXJpbmcgaXNzdWVzIG9uIG15IHJhZGFyLiBJcyB0aGVyZSBhbnl0aGluZyBpbiB0aGlzIGNvZGUgcGF0aCB0aGF0IGNvdWxkIGJlIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIHBlcmhhcHMgaW50cm9kdWNlIGEgc3VidGxlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIGhvdyBpdCBoYW5kbGVzIHRoZSBmaW5hbCBwYWNrZXQgcGxhY2VtZW50PyBBIGZpbmFsIHJldmlldyBvZiB0aGUgZW5kIG9mIHRoaXMgcHJvY2VzcyBzaG91bGQgY29tcGxldGUgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxODkyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxNS4xODQ5NTYxMjNaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODAwOlxcdFxcdGRldl9kc3RhdHNfcnhfYWRkKHZ4bGFuLVxcdTAwM2VkZXYsIHNrYi1cXHUwMDNlbGVuKTtcXG4xODAxOlxcdFxcdHZ4bGFuX3ZuaWZpbHRlcl9jb3VudCh2eGxhbiwgdm5pLCB2bmlub2RlLCBWWExBTl9WTklfU1RBVFNfUlgsIHNrYi1cXHUwMDNlbGVuKTtcXG4xODAyOlxcdFxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZ2eGxhbi1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbjE4MDM6XFx0XFxuMTgwNDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xODA1OlxcdFxcbjE4MDY6XFx0XFx0cmV0dXJuIDA7XFxuMTgwNzpcXHRcXG4xODA4OlxcdGRyb3A6XFxuMTgwOTpcXHRcXHRyZWFzb24gPSByZWFzb24gPzogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuMTgxMDpcXHRcXHQvKiBDb25zdW1lIGJhZCBwYWNrZXQgKi9cXG4xODExOlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbjE4MTI6XFx0XFx0cmV0dXJuIDA7XFxuMTgxMzpcXHR9XFxuMTgxNDpcXHRcXG4xODE1OlxcdHN0YXRpYyBpbnQgdnhsYW5fZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuMTgxNjpcXHR7XFxuMTgxNzpcXHRcXHRzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbjtcXG4xODE4OlxcdFxcdHN0cnVjdCB2eGxhbl9zb2NrICp2cztcXG4xODE5OlxcdFxcdHN0cnVjdCB2eGxhbmhkciAqaGRyO1xcbjE4MjA6XFx0XFx0X19iZTMyIHZuaTtcXG4xODIxOlxcdFxcbjE4MjI6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIFZYTEFOX0hMRU4pKVxcbjE4MjM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgyNDpcXHRcXG4xODI1OlxcdFxcdGhkciA9IHZ4bGFuX2hkcihza2IpO1xcbjE4MjY6XFx0XFxuMTgyNzpcXHRcXHRpZiAoIShoZHItXFx1MDAzZXZ4X2ZsYWdzIFxcdTAwMjYgVlhMQU5fSEZfVk5JKSlcXG4xODI4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4Mjk6XFx0XFxuMTgzMDpcXHRcXHR2cyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spO1xcbjE4MzE6XFx0XFx0aWYgKCF2cylcXG4xODMyOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4MzM6XFx0XFxuMTgzNDpcXHRcXHR2bmkgPSB2eGxhbl92bmkoaGRyLVxcdTAwM2V2eF92bmkpO1xcbjE4MzU6XFx0XFx0dnhsYW4gPSB2eGxhbl92c19maW5kX3ZuaSh2cywgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIHZuaSwgTlVMTCk7XFxuMTgzNjpcXHRcXHRpZiAoIXZ4bGFuKVxcbjE4Mzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTgzODpcXHRcXG4xODM5OlxcdFxcdHJldHVybiAwO1xcbjE4NDA6XFx0fVxcbjE4NDE6XFx0XFxuMTg0MjpcXHRzdGF0aWMgaW50IGFycF9yZWR1Y2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHZuaSlcXG4xODQzOlxcdHtcXG4xODQ0OlxcdFxcdHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xODQ1OlxcdFxcdHN0cnVjdCBhcnBoZHIgKnBhcnA7XFxuMTg0NjpcXHRcXHR1OCAqYXJwcHRyLCAqc2hhO1xcbjE4NDc6XFx0XFx0X19iZTMyIHNpcCwgdGlwO1xcbjE4NDg6XFx0XFx0c3RydWN0IG5laWdoYm91ciAqbjtcXG4xODQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxNS4xODUxNTUyMDNaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwODgzNjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbjogRGlzc2VjdGluZyB0aGUgVlhMQU4gUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gYHZ4bGFuX3JjdmAgaXMgcmV0dXJuaW5nIDAsIHdoaWNoIG1lYW5zIHdlJ3JlIGhpdHRpbmcgdGhlIHJpZ2h0IHBhdGggdG8gYmVnaW4gd2l0aCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBmb2N1cyBvbiBgTkVUX0ZPVWAuIE5vdywgaG9sZCBvbiwgYENPTkZJR19ORVRfRk9VYCBpcyB0cmlzdGF0ZS4gQ29uc2lkZXJpbmcgd2hhdCB0aGUgdGVzdCBzY3JpcHQgaXMgZG9pbmcsIGFuZCB0aGUgbW9kdWxlcyBpdCdzIGxvYWRpbmcsIGBmb3VgIGFuZCBgZm91NmAsIGl0IG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGVuYWJsZWQuXG5cblNvLCBsZXQncyBlbmFibGUgYE5FVF9GT1VgLCB0aGF0J3MgYSBnaXZlbi4gV2UnbGwgYWxzbyBuZWVkIGBJUFY2X0ZPVWAgYW5kIGBJUFY2X0ZPVV9UVU5ORUxgIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGUgSVB2NiBzaWRlIG9mIHRoaW5ncy4gR2l2ZW4gdGhlIEdSRSB0dW5uZWxzIGVtcGxveWVkIGluIHRoaXMgdGVzdCwgd2Ugc2hvdWxkIGFsc28gZW5hYmxlIGBORVRfSVBHUkVgIGFuZCBgSVBWNl9HUkVgIGFzIHdlbGwuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfTkVUX0lQR1JFYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4NzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODoxOS44OTM5OTM3NVoiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTA4ODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQR1JFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXFxubmV0L2lwdjQvS2NvbmZpZzoxOTI6Y29uZmlnIE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMTkzLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjA2LVxcbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiSVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6MjEuNzU5MDg4MDFaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5OTQ1MzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19JUFY2X0dSRWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBsaWtlbHkga25lZS1kZWVwIGluIGEgbmV0d29ya2luZy1yZWxhdGVkIGlzc3VlLCBwcm9iYWJseSBrZXJuZWwgY29uZmlndXJhdGlvbiBvciBzb21lIGZvcm0gb2YgbmV0d29yayBwcm90b2NvbCBhbmFseXNpcy4gVGhlIGltbWVkaWF0ZSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfSVBWNl9HUkVgIHN1Z2dlc3RzIEknbSBmb2N1c2luZyBvbiBJUHY2LW92ZXItR1JFIHR1bm5lbGluZy4gSXTigJlzIGEgY29yZSBjb21wb25lbnQgaW4gbWFueSBuZXR3b3JrIGFyY2hpdGVjdHVyZXMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIGxlZ2FjeSBzeXN0ZW1zIG9yIGNvbXBsZXggcm91dGluZyByZXF1aXJlbWVudHMsIHNvIHRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAuXG5cbkknbSBwcm9iYWJseSBhc2tpbmcgbXlzZWxmIGEgZmV3IGtleSBxdWVzdGlvbnM6IElzIElQdjYtb3Zlci1HUkUgZW5hYmxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24/IElmIHNvLCB3aGF0IGFyZSBpdHMgc2V0dGluZ3M/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzPyBBbSBJIGRlYWxpbmcgd2l0aCBhIGJ1aWxkIGZhaWx1cmUsIGEgcnVudGltZSBpc3N1ZSwgb3Igc2ltcGx5IGF0dGVtcHRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBkaWFnbm9zdGljIG9yIGRlcGxveW1lbnQgcHVycG9zZXM/IFRoaXMgbGluZSBvZiB0aGlua2luZyBoZWxwcyBtZSBxdWlja2x5IG5hcnJvdyBkb3duIHRoZSBzY29wZSBhbmQgc2VsZWN0IHRoZSBjb3JyZWN0IGRlYnVnZ2luZyBzdHJhdGVneSwgb3IgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgYWN0aW9ucy4gVGhlIGFic2VuY2Ugb2YgdGhpcyBrZXkgZmVhdHVyZSBtYXkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byBzb2x2ZSB0aGUgbmV0d29yayBjb21tdW5pY2F0aW9uIGlzc3VlIEkgYW0gZmFjaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ2OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjI1LjY1ODU0NDA4NloiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTk3OTI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9HUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6MjcuNDg4NTMwOFoiLCJTZXEiOjgxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTUyMjkyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGFzc3VtaW5nIEknbSB0aGUgb25lIHdvcmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIElQIFR1bm5lbGluZyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGdvYWwgaXMgdG8gZ2V0IHRoaXMgSVAgdHVubmVsaW5nIHN5c3RlbSB1cCBhbmQgcnVubmluZy4gVGhlIGluaXRpYWwgY29uZmlncyB0byBhY3RpdmF0ZSBzZWVtIHRvIGJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBORVRfRk9VYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gVGhvc2UgY292ZXIgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBmb3IgYm90aCBnZW5lcmljIHJvdXRpbmcgZW5jYXBzdWxhdGlvbiBhbmQgdGhlIG1vcmUgbW9kZXJuIEZPVSAoVURQIGVuY2Fwc3VsYXRpb24gb3ZlciBJUCkgYXNwZWN0cyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMuXG5cbldhaXQgYSBzZWNvbmTigKYgSSd2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcsIGEgZGV0YWlsIHRoYXQncyBlc3NlbnRpYWwgZm9yIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGhlcmUuIEFtIEkgbWlzc2luZyBzb21ldGhpbmcgcmVnYXJkaW5nIHRoZSBmaW5lciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIEZPVSB0dW5uZWxpbmc/IExldCdzIGNoZWNrIGBORVRfRk9VX0lQX1RVTk5FTFNgLiBJJ3ZlIGdvdCBhIGh1bmNoIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIEZPVSBlbmNhcHN1bGF0aW9uIHdpdGhpbiBJUCB0dW5uZWxzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGNvbmZpcm0gdGhhdCdzIGVuYWJsZWQgYXMgd2VsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODozNC40NDA4MjUyMTRaIiwiU2VxIjo4MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzI4MzYwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMyMT1jb25maWcgTkVUX0ZPVVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMjktXFxubmV0L2lwdjQvS2NvbmZpZzozMzA6Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbm5ldC9pcHY0L0tjb25maWctMzMxLVxcdGJvb2wgXFxcIklQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODozNi4yNzM2Njg3NTdaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2ODkwMjg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORVRfRk9VX0lQX1RVTk5FTFMgSGVscCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGBORVRfRk9VX0lQX1RVTk5FTFNgIHRoaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiwgb3IgaGVscCB0ZXh0LCBoYXMgdG8gc2F5IGFib3V0IGl0LiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSdtIHN1cmUgc29tZW9uZSdzIGRldGFpbGVkIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCB1c2FnZSBzb21ld2hlcmUuIEhvcGVmdWxseSwgaXQncyB3ZWxsLXdyaXR0ZW4sIGNsZWFybHkgZXhwbGFpbmluZyB0aGUgcHVycG9zZSwgYW55IHJlbGV2YW50IHBhcmFtZXRlcnMsIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBMZXQncyBnZXQgY3JhY2tpbmcgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjQxLjU0MjU3NDM1NloiLCJTZXEiOjg0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuIDMzMTpcXHRcXHRib29sIFxcXCJJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1xcXCJcXG4gMzMyOlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQSVAgfHwgTkVUX0lQR1JFIHx8IElQVjZfU0lUXFxuIDMzMzpcXHRcXHRzZWxlY3QgTkVUX0ZPVVxcbiAzMzQ6XFx0XFx0aGVscFxcbiAzMzU6XFx0XFx0ICBBbGxvdyBjb25maWd1cmF0aW9uIG9mIEZPVSBvciBHVUUgZW5jYXBzdWxhdGlvbiBmb3IgSVAgdHVubmVscy5cXG4gMzM2OlxcdFxcdCAgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIElQIHR1bm5lbHMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlXFxuIDMzNzpcXHRcXHQgIEZPVSBvciBHVUUgZW5jYXBzdWxhdGlvbi5cXG4gMzM4OlxcdFxcbiAzMzk6XFx0Y29uZmlnIElORVRfQUhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6NDEuNTQyNjY2MTY2WiIsIlNlcSI6ODUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTkzMjI5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRk9VIGFuZCBJUCBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIG9uIGNvbmZpZ3VyaW5nIEZPVSBlbmNhcHN1bGF0aW9uIGZvciBJUCB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgR1JFIHR1bm5lbHMgaGVyZS4gVGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IHRvIGdldCB0aGF0IGZ1bmN0aW9uYWxpdHksIEkgZGVmaW5pdGVseSBuZWVkIGBORVRfRk9VX0lQX1RVTk5FTFNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEknbGwgYWRkIHRoYXQgdG8gdGhlIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgYSBjcnVjaWFsIG5leHQgc3RlcDogV2hhdCBhYm91dCBJUHY2PyBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyBhbiBhbmFsb2dvdXMgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIElQdjYgc3VwcG9ydCwgZW5zdXJpbmcgY29tcGxldGUgY292ZXJhZ2UuIExldCBtZSBzZWUgaWYgc29tZXRoaW5nIHNpbWlsYXIgZXhpc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY3MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzg6NDUuMzQxOTkxNDdaIiwiU2VxIjo4NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDE1Nzk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGT1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTIxMD1jb25maWcgSVBWNl9HUkVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxubmV0L2lwdjYvS2NvbmZpZzoyMzA6XFx0ZGVmYXVsdCBORVRfRk9VIFxcdTAwMjZcXHUwMDI2IElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG5uZXQvaXB2Ni9LY29uZmlnOjIzNDpcXHRkZWZhdWx0IE5FVF9GT1VfSVBfVFVOTkVMUyBcXHUwMDI2XFx1MDAyNiBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjM1LVxcdHNlbGVjdCBJUFY2X1RVTk5FTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODo0NS42MjYxNTQyOTZaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxNTAwNjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGT1UgTXVsdGljYXN0IFJlc3VibWlzc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9GT1VgIGFuZCBgSVBWNl9GT1VfVFVOTkVMYCBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHdlIGhhdmUgYE5FVF9GT1VgIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYnV0IEknbGwgZXhwbGljaXRseSBsaXN0IGFsbCB0aGUgcmVsZXZhbnQgY29uZmlncyBmb3IgY2xhcml0eTogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIGhlYXJ0IG9mIGl0LiBUaGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaGVyZSBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5IHBhdGguIEl0J3MgdG91Y2hpbmcgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBHb29kLCB0aG9zZSBhcmVuJ3Qgb3Zlcmx5IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBtYWtpbmcgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AuIFRoZXkgYXJlIHNwZWNpZmljYWxseSB0aWVkIHRvIG11bHRpY2FzdCBVRFAgZGVsaXZlcnksIHdoaWNoIG5hcnJvd3MgdGhlIHNjb3BlIGFuZCBtYWtlcyBhbmFseXNpcyBlYXNpZXIuXG5cblRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgdG8gdGVzdHMgKCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdgKSwgYnV0IHRoZSByZWFsIG1lYXQgaXMgaW4gdGhlIGNvcmUgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC5cblxuSSdtIHRoaW5raW5nLCBpcyBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBldmVuIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZT8gQWgsIHllcywgaWYgeW91IHNlbmQgYSBVRFAgcGFja2V0IHRvIGEgbXVsdGljYXN0IGFkZHJlc3MgYW5kIHlvdSBoYXZlIGEgRk9VIHR1bm5lbCBjb25maWd1cmVkIHRvIHJlY2VpdmUgb24gdGhhdCBwb3J0LCBpdCB3aWxsLCBvZiBjb3Vyc2UsIHRyaWdnZXIgdGhlIHJlc3VibWlzc2lvbiBwYXRoLiBOb3csIHRoZSBjb250ZXh0IGlzIGNsZWFyLlxuXG5UaGUgY3J1eCBvZiB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgYnVnLiBJdCBzZWVtcyB0aGF0IFVEUCBtdWx0aWNhc3QgcGFja2V0cyBlbmNhcHN1bGF0ZWQgaW4gRk9VIHdlcmVuJ3QgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLCBhbmQgd2VyZSBpbnN0ZWFkIGp1c3QgZ2V0dGluZyBjb25zdW1lZC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBidWcgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjazsgaXQncyBjaGFuZ2luZyByZWFjaGFibGUga2VybmVsIGxvZ2ljLiBJdCBkaXJlY3RseSBhZmZlY3RzIHRoZSBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5LiBHaXZlbiB0aGlzLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGlzIG5ldyByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlxuXG5JbiBzdW1tYXJ5LCBteSBmb2N1cyBzeW1ib2xzIGFyZTogYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBhbmQgYElQVjZfR1JFYC4gQW5kIEkgYmV0dGVyIGFkZCBgTkVUX0lQR1JFX0RFTVVYYCB0byB0aGUgY29uZmlnIGxpc3QganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDozODo1NS41NDExNjQyMjdaIiwiU2VxIjo4OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTI6XFx0Y29uZmlnIE5FVF9JUEdSRVxcbiAxOTM6XFx0XFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgdHVubmVscyBvdmVyIElQXFxcIlxcbiAxOTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG4gMTk1OlxcdFxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxuIDE5NjpcXHRcXHRoZWxwXFxuIDE5NzpcXHRcXHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXFxuIDE5ODpcXHRcXHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcXG4gMTk5OlxcdFxcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xcbiAyMDA6XFx0XFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xcbiAyMDE6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIG9mIElQdjQgb3IgSVB2NiBvdmVyIGV4aXN0aW5nIElQdjQgaW5mcmFzdHJ1Y3R1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjU1LjU0MTI0ODczN1oiLCJTZXEiOjg5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNjAwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqSVBHUkUgQ29uZmlndXJhdGlvbjogRGVwZW5kZW5jaWVzIFx1MDAyNiBOZXh0IFN0ZXBzKipcblxuQWxyaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBgTkVUX0lQR1JFYCBoZXJlLiBJbW1lZGlhdGVseSwgaXQgY2xpY2tzIHRoYXQgYE5FVF9JUEdSRWAgZGVmaW5pdGVseSByZWxpZXMgb24gYE5FVF9JUEdSRV9ERU1VWGAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuIFRoZXJlZm9yZSwgYSBkZWZpbml0aXZlIGluY2x1c2lvbiBvZiBgTkVUX0lQR1JFX0RFTVVYYCBpcyByZXF1aXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgaXMgaGFuZGxlZC5cblxuTm93LCBsZXQncyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYElQVjZfR1JFYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEknbSBzdXJlIHRoZXJlIGFyZSBzb21lIHJlbGF0aW9uc2hpcHMsIGl0J3MgdGltZSB0byBjaGVjayB3aGF0J3MgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjU5LjYwNDg1Mjg0OVoiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRjb25maWcgSVBWNl9HUkVcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbiAyMTI6XFx0XFx0c2VsZWN0IElQVjZfVFVOTkVMXFxuIDIxMzpcXHRcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG4gMjE1OlxcdFxcdGhlbHBcXG4gMjE2OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMjE3OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAyMTg6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDIxOTpcXHRcXHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM4OjU5LjYwNDk0MDU5OVoiLCJTZXEiOjkxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU1NjkyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVkdWN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCBpdCdzIGJlY29taW5nIGNsZWFyZXIuIFNwZWNpZmljYWxseSwgSSd2ZSBjb25maXJtZWQgdGhhdCBgSVBWNl9HUkVgIGFsc28gcmVxdWlyZXMgYE5FVF9JUEdSRV9ERU1VWGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBkZW11bHRpcGxleGluZyBhc3BlY3QgaXMgY3J1Y2lhbC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSB0aGVzZTpcblxuKiAgIGBORVRfRk9VYFxuKiAgIGBORVRfRk9VX0lQX1RVTk5FTFNgXG4qICAgYElQVjZfRk9VYFxuKiAgIGBJUFY2X0ZPVV9UVU5ORUxgXG4qICAgYE5FVF9JUEdSRWBcbiogICBgTkVUX0lQR1JFX0RFTVVYYFxuKiAgIGBJUFY2X0dSRWBcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBhcmUgc25lYWtpbHkgaW52b2x2ZWQgaGVyZS5cblxuVGhlIHRlc3Qgc2NyaXB0IHVzZXMgYGlwIGZvdSBhZGQgcG9ydCA0Nzk3IGlwcHJvdG8gNDdgIHRvIHRlc3QgdGhlIG1vZHVsZSwgc28gSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgYGZvdWAgbW9kdWxlIGlzIGludm9sdmVkLCBvYnZpb3VzbHkuIFRoZSBzY3JpcHQgYWxzbyB1c2VzIGBpcCBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgLi4uIGVuY2FwIGZvdWAuIEhtbSwgdGhhdCB1c2VzIGBncmV0YXBgLiBBbmQgSSB3YXMgdGhpbmtpbmcgYGdyZXRhcGAgd2FzIHBhcnQgb2YgYE5FVF9JUEdSRWAuIFRoYXQgKmZlZWxzKiByaWdodCwgYnV0IGlzIHRoZXJlIGEgbnVhbmNlPyBIYW5nIG9uLCBpdCBzZWVtcyBgZ3JldGFwYCBtaWdodCBhY3R1YWxseSBiZSBwYXJ0IG9mIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIFRoYXQgY291bGQgY2hhbmdlIGV2ZXJ5dGhpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MDQuOTYwNjM0NjE4WiIsIlNlcSI6OTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA3OlxcdGNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxuIDIwODpcXHRcXHRib29sIFxcXCJJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXFxcIlxcbiAyMDk6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXFx1MDAyNlxcdTAwMjYgTkVUX0lQR1JFXFxuIDIxMDpcXHRcXHRoZWxwXFxuIDIxMTpcXHRcXHQgIE9uZSBhcHBsaWNhdGlvbiBvZiBHUkUvSVAgaXMgdG8gY29uc3RydWN0IGEgYnJvYWRjYXN0IFdBTiAoV2lkZSBBcmVhXFxuIDIxMjpcXHRcXHQgIE5ldHdvcmspLCB3aGljaCBsb29rcyBsaWtlIGEgbm9ybWFsIEV0aGVybmV0IExBTiAoTG9jYWwgQXJlYVxcbiAyMTM6XFx0XFx0ICBOZXR3b3JrKSwgYnV0IGNhbiBiZSBkaXN0cmlidXRlZCBhbGwgb3ZlciB0aGUgSW50ZXJuZXQuIElmIHlvdSB3YW50XFxuIDIxNDpcXHRcXHQgIHRvIGRvIHRoYXQsIHNheSBZIGhlcmUgYW5kIHRvIFxcXCJJUCBtdWx0aWNhc3Qgcm91dGluZ1xcXCIgYmVsb3cuXFxuIDIxNTpcXHRcXG4gMjE2OlxcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM5OjA0Ljk2MDcyMzczOFoiLCJTZXEiOjkzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg5ODc3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIEdSRSBCcm9hZGNhc3QgT3B0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBHUkUgYW5kIGJyb2FkY2FzdCB0cmFmZmljLiBSaWdodCwgYE5FVF9JUEdSRV9CUk9BRENBU1RgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBoZXJlLiBJdCdzIGVzc2VudGlhbCBmb3IgZW5hYmxpbmcgYnJvYWRjYXN0IEdSRSBvdmVyIElQLCBzcGVjaWZpY2FsbHkgZm9yIGBncmV0YXBgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0OyB3ZSBuZWVkIHRvIGluY2x1ZGUgaXQuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgSVB2NiBzaWRlIG9mIHRoaW5ncz8gV2UndmUgZ290IElQdjQgY292ZXJlZCwgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9uIHRoZSBJUHY2IGZyb250LiBJcyB0aGVyZSBhIHNpbWlsYXIgb3B0aW9uLCBhIGBJUFY2X0dSRV9CUk9BRENBU1RgIGVxdWl2YWxlbnQ/IEknZCBiZXR0ZXIgY2hlY2sgdGhlIGBJUFY2X0dSRWAgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHN1cmUuIE5lZWQgdG8gZW5zdXJlIGZ1bGwgY29tcGF0aWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM5OjA4LjY1MDYwMzQ2MloiLCJTZXEiOjk0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMjAyNjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9HUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MTAuNDcyNjM4MDUzWiIsIlNlcSI6OTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzYzNzMzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkNoZWNraW5nIGZvciBJUFY2X0dSRV9CUk9BRENBU1QqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvciBwcmVzZW5jZSBvZiBgSVBWNl9HUkVfQlJPQURDQVNUYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhhdCBzcGVjaWZpYyBpZGVudGlmaWVyIGFuZCBsb29rIGludG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBkb2N1bWVudGF0aW9uLCBvciBjb2RlIHRoYXQgd291bGQgZGVmaW5lIHRoaXMgc2V0dGluZy4gSXMgaXQgYSBkZWZpbmVkIGNvbnN0YW50IGluIG15IGN1cnJlbnQgZW52aXJvbm1lbnQ/IElzIGl0IHBhcnQgb2YgYSBzcGVjaWZpYyBtb2R1bGUgb3IgbGlicmFyeT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgSSBjYW4gcmVsaWFibHkgdmVyaWZ5IGlmIHRoaXMgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIG9yIHN1cHBvcnRlZCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBzdXBwb3J0IG9yIGxhY2sgb2Ygc3VwcG9ydCBoYXMuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byB0YWtlIHNwZWNpZmljIGFjdGlvbiBiYXNlZCBvbiB0aGUgcmVzdWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzk4NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjM5OjE0LjU0OTAxMzA1M1oiLCJTZXEiOjk2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDMxOTI3NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfR1JFX0JST0FEQ0FTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MTYuMzY5MzQwMTM3WiIsIlNlcSI6OTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTAzNjM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcy5cblxuKipBbmFseXppbmcgVHVubmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cblJpZ2h0LCB0aGF0J3MgYSBxdWljayBhbmQgZGVjaXNpdmUgXCJOb1wiIGFzIGFuIGluaXRpYWwgYXNzZXNzbWVudC4gQ2xlYXJseSwgdGhlIHByb2JsZW0gc3RhdGVtZW50IGlzIGxlYWRpbmcgbWUgc29tZXdoZXJlLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBhbmQgYXNzZXNzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodHMgYnJpbmcgdG8gbWluZCB0aGVzZSBvcHRpb25zIEkga25vdyBmcm9tIGV4cGVyaWVuY2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHR1bm5lbGluZzogYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYElQVjZfRk9VYCwgYElQVjZfRk9VX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYE5FVF9JUEdSRV9CUk9BRENBU1RgLCBhbmQgYElQVjZfR1JFYC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLiBXZSdsbCBjYWxsIHRoZSByZXN1bHQgb2YgdGhpcyBhc3Nlc3NtZW50IFwic2V0LXJlc3VsdHNcIiAtIEknbGwgbmVlZCB0byB3b3JrIHdpdGggdGhvc2UgbGF0ZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODE4MCwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6Mzk6MjEuNjE5NzA1ODY4WiIsIlNlcSI6OTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5NDAzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiSVBWNl9GT1VcIixcbiAgICBcIklQVjZfRk9VX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUEdSRV9CUk9BRENBU1RcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBVRFAgbXVsdGljYXN0IHBhY2tldHMgZW5jYXBzdWxhdGVkIGluIEZPVSB3ZXJlIG5vdCBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSBidXQgd2VyZSBpbnN0ZWFkIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayAoVURQIG11bHRpY2FzdCBkZWxpdmVyeSkuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiSVBWNl9GT1VcIixcbiAgICBcIklQVjZfRk9VX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUEdSRV9CUk9BRENBU1RcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBVRFAgbXVsdGljYXN0IHBhY2tldHMgZW5jYXBzdWxhdGVkIGluIEZPVSB3ZXJlIG5vdCBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKSBidXQgd2VyZSBpbnN0ZWFkIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayAoVURQIG11bHRpY2FzdCBkZWxpdmVyeSkuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[1] Phase: Succeeded StartedAt: 2026-07-08 10:39:33 +0000 UTC FinishedAt: 2026-07-08 10:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 10:39:33 +0000 UTC FinishedAt: 2026-07-08 10:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2] Phase: Running StartedAt: 2026-07-08 10:39:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-08 10:39:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 10:39:33 +0000 UTC FinishedAt: 2026-07-08 10:39:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 10:39:33 +0000 UTC FinishedAt: 2026-07-08 10:39:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzt98c/series-workflowzt98c-convert-artifact-1822590267/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 10:39:43 +0000 UTC FinishedAt: 2026-07-08 11:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 10:39:43 +0000 UTC FinishedAt: 2026-07-08 11:21:34 +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:*51ccc8e0-d55c-442d-9df6-e8eb3a71421e,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-workflowzt98c/series-workflowzt98c-convert-artifact-1822590267/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": "4c990f03-fdce-42d7-98d9-698e1bed80aa", "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-workflowzt98c/series-workflowzt98c-build-action-1014469497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 10:39:43 +0000 UTC FinishedAt: 2026-07-08 11:21:11 +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:*51ccc8e0-d55c-442d-9df6-e8eb3a71421e,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-workflowzt98c/series-workflowzt98c-convert-artifact-1822590267/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": "4c990f03-fdce-42d7-98d9-698e1bed80aa", "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-workflowzt98c/series-workflowzt98c-build-action-1014469497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 11:21:34 +0000 UTC FinishedAt: 2026-07-08 11:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 11:21:34 +0000 UTC FinishedAt: 2026-07-08 11:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 11:21:34 +0000 UTC FinishedAt: 2026-07-08 11:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 11:21:34 +0000 UTC FinishedAt: 2026-07-08 11:21:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzt98c/series-workflowzt98c-convert-artifact-2429903762/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 11:22:06 +0000 UTC FinishedAt: 2026-07-08 11:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 11:22:06 +0000 UTC FinishedAt: 2026-07-08 11:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4c990f03-fdce-42d7-98d9-698e1bed80aa,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-workflowzt98c/series-workflowzt98c-build-action-1014469497/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-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 11:24:47 +0000 UTC FinishedAt: 2026-07-08 11:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 11:24:47 +0000 UTC FinishedAt: 2026-07-08 11:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 11:24:47 +0000 UTC FinishedAt: 2026-07-08 12:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 11:24:47 +0000 UTC FinishedAt: 2026-07-08 12:19:44 +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:*51ccc8e0-d55c-442d-9df6-e8eb3a71421e,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-workflowzt98c/series-workflowzt98c-convert-artifact-2429903762/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": "1690a120-5034-4ebd-82cf-8b4434ddb140", "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-workflowzt98c/series-workflowzt98c-build-action-606986278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 11:24:47 +0000 UTC FinishedAt: 2026-07-08 12:19: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:*51ccc8e0-d55c-442d-9df6-e8eb3a71421e,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-workflowzt98c/series-workflowzt98c-convert-artifact-2429903762/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": "1690a120-5034-4ebd-82cf-8b4434ddb140", "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-workflowzt98c/series-workflowzt98c-build-action-606986278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 12:19:44 +0000 UTC FinishedAt: 2026-07-08 12:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 12:19:44 +0000 UTC FinishedAt: 2026-07-08 12:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-07-08 12:19:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzt98c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","IPV6_FOU","IPV6_FOU_TUNNEL","NET_IPGRE","NET_IPGRE_DEMUX","NET_IPGRE_BROADCAST","IPV6_GRE"],"series_id":"3b495335-fc34-4368-954b-95670cc744d9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-07-08 12:19:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*1690a120-5034-4ebd-82cf-8b4434ddb140,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-workflowzt98c/series-workflowzt98c-build-action-606986278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil