Name: series-workflowxzrlq Phase: Succeeded StartedAt: 2026-07-05 02:50:04 +0000 UTC FinishedAt: 2026-07-05 06:58:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[0] Phase: Succeeded StartedAt: 2026-07-05 02:50:04 +0000 UTC FinishedAt: 2026-07-05 03:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[0].run-triage Phase: Succeeded StartedAt: 2026-07-05 02:50:04 +0000 UTC FinishedAt: 2026-07-05 03:01:14 +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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "NET_IPGRE", "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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "NET_IPGRE", "IPV6_GRE" ], "series_id": "5f9533d4-7898-4db7-99cb-8cac65f0ed95" }, "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+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAgd2VyZSBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpLiBCeSByZXR1cm5pbmcgdGhlIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIGNvcnJlY3RseSBwYXNzZXMgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4MWE0ODAxOWI3YTJmZGU5YjJiYTEzZjBjMzk5ZjBiMThmMmFlY2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCA1IDAyOjU4OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmNcbmluZGV4IDU5MjQ4YTU5MzU4Y2E1Li5kM2RkY2JmYzg0NzcxYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC91ZHAuY1xuQEAgLTI0NzYsNiAmIzQzOzI0NzYsNyBAQCBzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGhhc2gyX2FueSA9IDA7XG4gXHRoYXNoMiA9IDA7XG5AQCAtMjUyMCw4ICYjNDM7MjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdGlmIChmaXJzdCkge1xuLVx0XHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldCA9IHVkcF9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1yZXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTk0OSw2ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiBcdGJvb2wgdXNlX2hhc2gyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRoYXNoMl9hbnkgPSAwO1xuIFx0aGFzaDIgPSAwO1xuQEAgLTk5OCw4ICYjNDM7OTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFx1MDAzZSAwKVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXQgPSB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0zOSw2ICYjNDM7MzksNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRmaWJfcnVsZV90ZXN0cy5zaCBcXFxuIFx0ZmliX3Rlc3RzLnNoIFxcXG4gXHRmaW5fYWNrX2xhdC5zaCBcXFxuJiM0MztcdGZvdV9tY2FzdF9lbmNhcC5zaCBcXFxuIFx0ZnFfYmFuZF9wa3RsaW1pdC5zaCBcXFxuIFx0Z3JlX2dzby5zaCBcXFxuIFx0Z3JlX2lwdjZfbGxhZGRyLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzI4NTEzZDU1ZGI0YTVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2hcbkBAIC0wLDAgJiM0MzsxLDE3NyBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBUZXN0IHRoYXQgVURQIGVuY2Fwc3VsYXRpb24gKEZPVSkgY29ycmVjdGx5IGhhbmRsZXMgcGFja2V0IHJlc3VibWl0XG4mIzQzOyMgd2hlbiBwYWNrZXRzIGFyZSBkZWxpdmVyZWQgdmlhIHRoZSBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5IHBhdGguXG4mIzQzOyNcbiYjNDM7IyBXaGVuIGEgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXQgYXJyaXZlcyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQLFxuJiM0MzsjIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcigpIC8gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKCkgbXVzdCByZXN1Ym1pdFxuJiM0MzsjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cbiYjNDM7IyBUaGlzIHRlc3QgdmVyaWZpZXMgYm90aCBJUHY0IGFuZCBJUHY2IHBhdGhzIGJ5IGNyZWF0aW5nIGEgRk9VL0dSRVRBUFxuJiM0MzsjIHR1bm5lbCB3aXRoIGEgbXVsdGljYXN0IHJlbW90ZSBhZGRyZXNzIGFuZCBzZW5kaW5nIHBpbmcgdGhyb3VnaCBpdC5cbiYjNDM7I1xuJiM0MzsjIFRoZSBlYXJseSBkZW11eCBvcHRpbWl6YXRpb24gY2FuIG1hc2sgdGhpcyBpc3N1ZSBieSByb3V0aW5nIHBhY2tldHMgdmlhXG4mIzQzOyMgdGhlIHVuaWNhc3QgcGF0aCAodWRwWzZdX3VuaWNhc3RfcmN2X3NrYiksIHNvIHdlIGRpc2FibGUgaXQgdG8gZm9yY2VcbiYjNDM7IyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cbiYjNDM7XG4mIzQzO3NvdXJjZSBsaWIuc2hcbiYjNDM7XG4mIzQzO05TRU5ERVI9XCYjMzQ7XCYjMzQ7XG4mIzQzO05SRUNWPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7Rk9VX1BPUlQ0PTQ3OTdcbiYjNDM7Rk9VX1BPUlQ2PTQ3OThcbiYjNDM7TUNBU1Q0PTIzOS4wLjAuMVxuJiM0MztNQ0FTVDY9ZmYwZTo6MVxuJiM0MztcbiYjNDM7VFVONF9TPTE5Mi4xNjguOTkuMVxuJiM0MztUVU40X1I9MTkyLjE2OC45OS4yXG4mIzQzO1RVTjZfUz0yMDAxOmRiODo5OTo6MVxuJiM0MztUVU42X1I9MjAwMTpkYjg6OTk6OjJcbiYjNDM7XG4mIzQzO2NsZWFudXAoKSB7XG4mIzQzO1x0Y2xlYW51cF9hbGxfbnNcbiYjNDM7fVxuJiM0MztcbiYjNDM7dHJhcCBjbGVhbnVwIEVYSVRcbiYjNDM7XG4mIzQzO3NldHVwX2NvbW1vbigpIHtcbiYjNDM7XHRzZXR1cF9ucyBOU0VOREVSIE5SRUNWXG4mIzQzO1xuJiM0MztcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXG4mIzQzO1x0IyBjb2xsaXNpb25zIHdpdGggZGV2aWNlcyBpbiB0aGUgcm9vdCBuYW1lc3BhY2UuXG4mIzQzO1x0aXAgbGluayBhZGQgdmV0aF9zIG5ldG5zIFwmIzM0OyROU0VOREVSXCYjMzQ7IHR5cGUgdmV0aCBcXFxuJiM0MztcdFx0cGVlciBuYW1lIHZldGhfciBuZXRucyBcJiMzNDskTlJFQ1ZcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBzZXQgdmV0aF9zIHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2V0IHZldGhfciB1cFxuJiM0MztcbiYjNDM7XHQjIFNhbWUgc3lzY3RsIGNvbnRyb2xzIGVhcmx5IGRlbXV4IGZvciBib3RoIElQdjQgYW5kIElQdjYuXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlJFQ1ZcJiMzNDsgc3lzY3RsIC13cSBuZXQuaXB2NC5pcF9lYXJseV9kZW11eD0wXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX2lwdjQoKSB7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgYWRkciBhZGQgMTAuMC4wLjEvMjQgZGV2IHZldGhfc1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBhZGRyIGFkZCAxMC4wLjAuMi8yNCBkZXYgdmV0aF9yXG4mIzQzO1xuJiM0MztcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JE1DQVNUNC8zMlwmIzM0OyBkZXYgdmV0aF9yIGF1dG9qb2luXG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yXG4mIzQzO1xuJiM0MztcdCMgU2VuZGVyOiBHUkVUQVAgd2l0aCBGT1UgZW5jYXAgKG5vIEZPVSBsaXN0ZW5lciBuZWVkZWQgb24gVFggc2lkZSlcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcbiYjNDM7XHRcdHJlbW90ZSBcJiMzNDskTUNBU1Q0XCYjMzQ7IGxvY2FsIDEwLjAuMC4xIFxcXG4mIzQzO1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBlbmNhcC1kcG9ydCBcJiMzNDskRk9VX1BPUlQ0XCYjMzQ7IFxcXG4mIzQzO1x0XHRrZXkgXCYjMzQ7JE1DQVNUNFwmIzM0O1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGxpbmsgc2V0IGVvdWRwNCB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU40X1MvMjRcJiMzNDsgZGV2IGVvdWRwNFxuJiM0MztcbiYjNDM7XHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgJiM0MzsgR1JFVEFQXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlJFQ1ZcJiMzNDsgaXAgZm91IGFkZCBwb3J0IFwmIzM0OyRGT1VfUE9SVDRcJiMzNDsgaXBwcm90byA0N1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcbiYjNDM7XHRcdHJlbW90ZSBcJiMzNDskTUNBU1Q0XCYjMzQ7IGxvY2FsIDEwLjAuMC4yIFxcXG4mIzQzO1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBlbmNhcC1kcG9ydCBcJiMzNDskRk9VX1BPUlQ0XCYjMzQ7IFxcXG4mIzQzO1x0XHRrZXkgXCYjMzQ7JE1DQVNUNFwmIzM0O1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIHNldCBlb3VkcDQgdXBcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JFRVTjRfUi8yNFwmIzM0OyBkZXYgZW91ZHA0XG4mIzQzO1xuJiM0MztcdCMgU3RhdGljIG5laWdoIG9uIHNlbmRlcjogQVJQIHJlcGxpZXMgY2Fubm90IHRyYXZlcnNlIHRoZVxuJiM0MztcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbiYjNDM7XHRsb2NhbCByZWN2X21hY1xuJiM0MztcdHJlY3ZfbWFjPSQoaXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2hvdyBlb3VkcDQgfCBhd2sgJiMzOTsvZXRoZXIve3ByaW50ICQyfSYjMzk7KVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IG5laWdoIGFkZCBcJiMzNDskVFVONF9SXCYjMzQ7IGxsYWRkciBcJiMzNDskcmVjdl9tYWNcJiMzNDsgZGV2IGVvdWRwNFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF9pcHY2KCkge1xuJiM0MztcdCMgU2tpcCBjbGVhbmx5IGlmIElQdjYgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgcnVubmluZyBrZXJuZWwuXG4mIzQzO1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdG1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXG4mIzQzO1xuJiM0MztcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JE1DQVNUNi8xMjhcJiMzNDsgZGV2IHZldGhfciBhdXRvam9pblxuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfc1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfclxuJiM0MztcbiYjNDM7XHQjIFNlbmRlcjogaXA2Z3JldGFwIHdpdGggRk9VIGVuY2FwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNlwmIzM0OyBsb2NhbCAyMDAxOmRiODo6MSBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNlwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IDQyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JFRVTjZfUy82NFwmIzM0OyBkZXYgZW91ZHA2IG5vZGFkXG4mIzQzO1xuJiM0MztcdCMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciAoSVB2NikgJiM0MzsgaXA2Z3JldGFwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlJFQ1ZcJiMzNDsgaXAgZm91IGFkZCBwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgaXBwcm90byA0NyAtNlxuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcbiYjNDM7XHRcdHJlbW90ZSBcJiMzNDskTUNBU1Q2XCYjMzQ7IGxvY2FsIDIwMDE6ZGI4OjoyIFxcXG4mIzQzO1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCYjMzQ7JEZPVV9QT1JUNlwmIzM0OyBlbmNhcC1kcG9ydCBcJiMzNDskRk9VX1BPUlQ2XCYjMzQ7IFxcXG4mIzQzO1x0XHRrZXkgNDJcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU42X1IvNjRcJiMzNDsgZGV2IGVvdWRwNiBub2RhZFxuJiM0MztcbiYjNDM7XHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXG4mIzQzO1x0IyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLlxuJiM0MztcdGxvY2FsIHJlY3ZfbWFjXG4mIzQzO1x0cmVjdl9tYWM9JChpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzaG93IGVvdWRwNiB8IGF3ayAmIzM5Oy9ldGhlci97cHJpbnQgJDJ9JiMzOTspXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbmVpZ2ggYWRkIFwmIzM0OyRUVU42X1JcJiMzNDsgbGxhZGRyIFwmIzM0OyRyZWN2X21hY1wmIzM0OyBkZXYgZW91ZHA2XG4mIzQzO31cbiYjNDM7XG4mIzQzO2dldF9yeF9wYWNrZXRzKCkge1xuJiM0MztcdGxvY2FsIGRldj1cJiMzNDskMVwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgLXMgbGluayBzaG93IFwmIzM0OyRkZXZcJiMzNDsgfCBhd2sgJiMzOTsvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0mIzM5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztydW5fcGluZ190ZXN0KCkge1xuJiM0MztcdGxvY2FsIGZhbWlseT1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIGRldj1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGRzdD1cJiMzNDskM1wmIzM0O1xuJiM0MztcdGxvY2FsIGNvdW50PTEwMFxuJiM0MztcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxuJiM0MztcbiYjNDM7XHQjIFdhcm11cDogbGV0IGFueSBpbml0aWFsIGJyb2FkY2FzdC9ORCB0cmFmZmljIHNldHRsZVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5TRU5ERVJcJiMzNDsgcGluZyBcJiMzNDskZmFtaWx5XCYjMzQ7IC1jIDEgLVcgMSBcJiMzNDskZHN0XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1xuJiM0MztcdHJ4X2JlZm9yZT0kKGdldF9yeF9wYWNrZXRzIFwmIzM0OyRkZXZcJiMzNDspXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlNFTkRFUlwmIzM0OyBwaW5nIFwmIzM0OyRmYW1pbHlcJiMzNDsgLWMgJGNvdW50IC1XIDEgXCYjMzQ7JGRzdFwmIzM0OyBcXFxuJiM0MztcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4mIzQzO1x0c2xlZXAgMVxuJiM0MztcdHJ4X2FmdGVyPSQoZ2V0X3J4X3BhY2tldHMgXCYjMzQ7JGRldlwmIzM0OylcbiYjNDM7XG4mIzQzO1x0cnhfZGVsdGE9JCgocnhfYWZ0ZXIgLSByeF9iZWZvcmUpKVxuJiM0MztcbiYjNDM7XHRpZiBbIFwmIzM0OyRyeF9kZWx0YVwmIzM0OyAtZ2UgXCYjMzQ7JGNvdW50XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7UEFTUzogcmVjZWl2ZWQgJHJ4X2RlbHRhLyRjb3VudCBwYWNrZXRzXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7JGtzZnRfcGFzc1wmIzM0O1xuJiM0MztcdGVsaWYgWyBcJiMzNDskcnhfZGVsdGFcJiMzNDsgLWd0IDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBvbmx5ICRyeF9kZWx0YS8kY291bnQgcGFja2V0cyByZWNlaXZlZFwmIzM0O1xuJiM0MztcdFx0cmV0dXJuIFwmIzM0OyRrc2Z0X2ZhaWxcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IDAvJGNvdW50IHBhY2tldHMgcmVjZWl2ZWRcJiMzNDtcbiYjNDM7XHRcdHJldHVybiBcJiMzNDska3NmdF9mYWlsXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmV0PTBcbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7VEVTVDogRk9VL0dSRVRBUCBJUHY0IG11bHRpY2FzdCBlbmNhcHN1bGF0aW9uIHJlc3VibWl0XCYjMzQ7XG4mIzQzO3NldHVwX2NvbW1vblxuJiM0MztzZXR1cF9pcHY0XG4mIzQzO3J1bl9waW5nX3Rlc3QgLTQgZW91ZHA0IFwmIzM0OyRUVU40X1JcJiMzNDsgfHwgcmV0PSQ/XG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1RFU1Q6IEZPVS9HUkVUQVAgSVB2NiBtdWx0aWNhc3QgZW5jYXBzdWxhdGlvbiByZXN1Ym1pdFwmIzM0O1xuJiM0MztpZiBzZXR1cF9pcHY2OyB0aGVuXG4mIzQzO1x0cnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgXCYjMzQ7JFRVTjZfUlwmIzM0OyB8fCByZXQ9JD9cbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogSVB2NiB1bmF2YWlsYWJsZVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDssCiAgICAmIzM0O19fdWRwNl9saWJfbWNhc3RfZGVsaXZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ODFhNDgwMTliN2EyZmRlOWIyYmExM2YwYzM5OWYwYjE4ZjJhZWNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgNSAwMjo1ODozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMjQ3Niw2ICYjNDM7MjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAlib29sIHVzZV9oYXNoMjsKJiM0MzsJaW50IHJldDsKIAogCWhhc2gyX2FueSA9IDA7CiAJaGFzaDIgPSAwOwpAQCAtMjUyMCw4ICYjNDM7MjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlpZiAoZmlyc3QpIHsKLQkJaWYgKHVkcF9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpICZndDsgMCkKLQkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQlyZXQgPSB1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCXJldHVybiAtcmV0OwogCX0gZWxzZSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTk0OSw2ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90OwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCWJvb2wgdXNlX2hhc2gyOwomIzQzOwlpbnQgcmV0OwogCiAJaGFzaDJfYW55ID0gMDsKIAloYXNoMiA9IDA7CkBAIC05OTgsOCAmIzQzOzk5OSw5IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlpZiAoZmlyc3QpIHsKLQkJaWYgKHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgJmd0OyAwKQotCQkJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJCXJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7CiYjNDM7CQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDcwOGQ5NjBhZTA3ZDViLi43ZTlhZTkzN2NmZmE3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMzksNiAmIzQzOzM5LDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJZmliX3J1bGVfdGVzdHMuc2ggXAogCWZpYl90ZXN0cy5zaCBcCiAJZmluX2Fja19sYXQuc2ggXAomIzQzOwlmb3VfbWNhc3RfZW5jYXAuc2ggXAogCWZxX2JhbmRfcGt0bGltaXQuc2ggXAogCWdyZV9nc28uc2ggXAogCWdyZV9pcHY2X2xsYWRkci5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzI4NTEzZDU1ZGI0YTUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoCkBAIC0wLDAgJiM0MzsxLDE3NyBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXQKJiM0MzsjIHdoZW4gcGFja2V0cyBhcmUgZGVsaXZlcmVkIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLgomIzQzOyMKJiM0MzsjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsCiYjNDM7IyBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoKSAvIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcigpIG11c3QgcmVzdWJtaXQKJiM0MzsjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC4KJiM0MzsjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQCiYjNDM7IyB0dW5uZWwgd2l0aCBhIG11bHRpY2FzdCByZW1vdGUgYWRkcmVzcyBhbmQgc2VuZGluZyBwaW5nIHRocm91Z2ggaXQuCiYjNDM7IwomIzQzOyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWEKJiM0MzsjIHRoZSB1bmljYXN0IHBhdGggKHVkcFs2XV91bmljYXN0X3Jjdl9za2IpLCBzbyB3ZSBkaXNhYmxlIGl0IHRvIGZvcmNlCiYjNDM7IyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi4KJiM0MzsKJiM0Mztzb3VyY2UgbGliLnNoCiYjNDM7CiYjNDM7TlNFTkRFUj0mIzM0OyYjMzQ7CiYjNDM7TlJFQ1Y9JiMzNDsmIzM0OwomIzQzOwomIzQzO0ZPVV9QT1JUND00Nzk3CiYjNDM7Rk9VX1BPUlQ2PTQ3OTgKJiM0MztNQ0FTVDQ9MjM5LjAuMC4xCiYjNDM7TUNBU1Q2PWZmMGU6OjEKJiM0MzsKJiM0MztUVU40X1M9MTkyLjE2OC45OS4xCiYjNDM7VFVONF9SPTE5Mi4xNjguOTkuMgomIzQzO1RVTjZfUz0yMDAxOmRiODo5OTo6MQomIzQzO1RVTjZfUj0yMDAxOmRiODo5OTo6MgomIzQzOwomIzQzO2NsZWFudXAoKSB7CiYjNDM7CWNsZWFudXBfYWxsX25zCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7c2V0dXBfY29tbW9uKCkgewomIzQzOwlzZXR1cF9ucyBOU0VOREVSIE5SRUNWCiYjNDM7CiYjNDM7CSMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lCiYjNDM7CSMgY29sbGlzaW9ucyB3aXRoIGRldmljZXMgaW4gdGhlIHJvb3QgbmFtZXNwYWNlLgomIzQzOwlpcCBsaW5rIGFkZCB2ZXRoX3MgbmV0bnMgJiMzNDskTlNFTkRFUiYjMzQ7IHR5cGUgdmV0aCBcCiYjNDM7CQlwZWVyIG5hbWUgdmV0aF9yIG5ldG5zICYjMzQ7JE5SRUNWJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGxpbmsgc2V0IHZldGhfcyB1cAomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgc2V0IHZldGhfciB1cAomIzQzOwomIzQzOwkjIFNhbWUgc3lzY3RsIGNvbnRyb2xzIGVhcmx5IGRlbXV4IGZvciBib3RoIElQdjQgYW5kIElQdjYuCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlJFQ1YmIzM0OyBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTAKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfaXB2NCgpIHsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB2ZXRoX3MKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBhZGRyIGFkZCAxMC4wLjAuMi8yNCBkZXYgdmV0aF9yCiYjNDM7CiYjNDM7CSMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXIKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBhZGRyIGFkZCAmIzM0OyRNQ0FTVDQvMzImIzM0OyBkZXYgdmV0aF9yIGF1dG9qb2luCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfcwomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yCiYjNDM7CiYjNDM7CSMgU2VuZGVyOiBHUkVUQVAgd2l0aCBGT1UgZW5jYXAgKG5vIEZPVSBsaXN0ZW5lciBuZWVkZWQgb24gVFggc2lkZSkKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGxpbmsgYWRkIGVvdWRwNCB0eXBlIGdyZXRhcCBcCiYjNDM7CQlyZW1vdGUgJiMzNDskTUNBU1Q0JiMzNDsgbG9jYWwgMTAuMC4wLjEgXAomIzQzOwkJZW5jYXAgZm91IGVuY2FwLXNwb3J0ICYjMzQ7JEZPVV9QT1JUNCYjMzQ7IGVuY2FwLWRwb3J0ICYjMzQ7JEZPVV9QT1JUNCYjMzQ7IFwKJiM0MzsJCWtleSAmIzM0OyRNQ0FTVDQmIzM0OwomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBzZXQgZW91ZHA0IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBhZGRyIGFkZCAmIzM0OyRUVU40X1MvMjQmIzM0OyBkZXYgZW91ZHA0CiYjNDM7CiYjNDM7CSMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciAmIzQzOyBHUkVUQVAKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUkVDViYjMzQ7IGlwIGZvdSBhZGQgcG9ydCAmIzM0OyRGT1VfUE9SVDQmIzM0OyBpcHByb3RvIDQ3CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDQmIzM0OyBsb2NhbCAxMC4wLjAuMiBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgXAomIzQzOwkJa2V5ICYjMzQ7JE1DQVNUNCYjMzQ7CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBzZXQgZW91ZHA0IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgJiMzNDskVFVONF9SLzI0JiMzNDsgZGV2IGVvdWRwNAomIzQzOwomIzQzOwkjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGUKJiM0MzsJIyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLgomIzQzOwlsb2NhbCByZWN2X21hYwomIzQzOwlyZWN2X21hYz0kKGlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBzaG93IGVvdWRwNCB8IGF3ayAmIzM5Oy9ldGhlci97cHJpbnQgJDJ9JiMzOTspCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBuZWlnaCBhZGQgJiMzNDskVFVONF9SJiMzNDsgbGxhZGRyICYjMzQ7JHJlY3ZfbWFjJiMzNDsgZGV2IGVvdWRwNAomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9pcHY2KCkgewomIzQzOwkjIFNraXAgY2xlYW5seSBpZiBJUHY2IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHJ1bm5pbmcga2VybmVsLgomIzQzOwlbIC1lIC9wcm9jL3N5cy9uZXQvaXB2NiBdIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwltb2Rwcm9iZSAtcSBmb3U2IHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZAomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkIDIwMDE6ZGI4OjoyLzY0IGRldiB2ZXRoX3Igbm9kYWQKJiM0MzsKJiM0MzsJIyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlcgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkICYjMzQ7JE1DQVNUNi8xMjgmIzM0OyBkZXYgdmV0aF9yIGF1dG9qb2luCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfcwomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IC02IHJvdXRlIGFkZCBmZjAwOjovOCBkZXYgdmV0aF9yCiYjNDM7CiYjNDM7CSMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXAKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcCiYjNDM7CQlyZW1vdGUgJiMzNDskTUNBU1Q2JiMzNDsgbG9jYWwgMjAwMTpkYjg6OjEgXAomIzQzOwkJZW5jYXAgZm91IGVuY2FwLXNwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IGVuY2FwLWRwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IFwKJiM0MzsJCWtleSA0MgomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBhZGRyIGFkZCAmIzM0OyRUVU42X1MvNjQmIzM0OyBkZXYgZW91ZHA2IG5vZGFkCiYjNDM7CiYjNDM7CSMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciAoSVB2NikgJiM0MzsgaXA2Z3JldGFwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlJFQ1YmIzM0OyBpcCBmb3UgYWRkIHBvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgaXBwcm90byA0NyAtNgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcCiYjNDM7CQlyZW1vdGUgJiMzNDskTUNBU1Q2JiMzNDsgbG9jYWwgMjAwMTpkYjg6OjIgXAomIzQzOwkJZW5jYXAgZm91IGVuY2FwLXNwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IGVuY2FwLWRwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IFwKJiM0MzsJCWtleSA0MgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgc2V0IGVvdWRwNiB1cAomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkICYjMzQ7JFRVTjZfUi82NCYjMzQ7IGRldiBlb3VkcDYgbm9kYWQKJiM0MzsKJiM0MzsJIyBTdGF0aWMgbmVpZ2ggb24gc2VuZGVyOiBuZWlnaGJvciBkaXNjb3ZlcnkgY2Fubm90IHRyYXZlcnNlIHRoZQomIzQzOwkjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuCiYjNDM7CWxvY2FsIHJlY3ZfbWFjCiYjNDM7CXJlY3ZfbWFjPSQoaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNob3cgZW91ZHA2IHwgYXdrICYjMzk7L2V0aGVyL3twcmludCAkMn0mIzM5OykKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IG5laWdoIGFkZCAmIzM0OyRUVU42X1ImIzM0OyBsbGFkZHIgJiMzNDskcmVjdl9tYWMmIzM0OyBkZXYgZW91ZHA2CiYjNDM7fQomIzQzOwomIzQzO2dldF9yeF9wYWNrZXRzKCkgewomIzQzOwlsb2NhbCBkZXY9JiMzNDskMSYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgLXMgbGluayBzaG93ICYjMzQ7JGRldiYjMzQ7IHwgYXdrICYjMzk7L1JYOi97Z2V0bGluZTsgcHJpbnQgJDJ9JiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7cnVuX3BpbmdfdGVzdCgpIHsKJiM0MzsJbG9jYWwgZmFtaWx5PSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIGRzdD0mIzM0OyQzJiMzNDsKJiM0MzsJbG9jYWwgY291bnQ9MTAwCiYjNDM7CWxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YQomIzQzOwomIzQzOwkjIFdhcm11cDogbGV0IGFueSBpbml0aWFsIGJyb2FkY2FzdC9ORCB0cmFmZmljIHNldHRsZQomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JE5TRU5ERVImIzM0OyBwaW5nICYjMzQ7JGZhbWlseSYjMzQ7IC1jIDEgLVcgMSAmIzM0OyRkc3QmIzM0OyBcCiYjNDM7CQkmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxCiYjNDM7CXNsZWVwIDEKJiM0MzsKJiM0MzsJcnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgJiMzNDskZGV2JiMzNDspCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlNFTkRFUiYjMzQ7IHBpbmcgJiMzNDskZmFtaWx5JiMzNDsgLWMgJGNvdW50IC1XIDEgJiMzNDskZHN0JiMzNDsgXAomIzQzOwkJJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MQomIzQzOwlzbGVlcCAxCiYjNDM7CXJ4X2FmdGVyPSQoZ2V0X3J4X3BhY2tldHMgJiMzNDskZGV2JiMzNDspCiYjNDM7CiYjNDM7CXJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSkKJiM0MzsKJiM0MzsJaWYgWyAmIzM0OyRyeF9kZWx0YSYjMzQ7IC1nZSAmIzM0OyRjb3VudCYjMzQ7IF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtQQVNTOiByZWNlaXZlZCAkcnhfZGVsdGEvJGNvdW50IHBhY2tldHMmIzM0OwomIzQzOwkJcmV0dXJuICYjMzQ7JGtzZnRfcGFzcyYjMzQ7CiYjNDM7CWVsaWYgWyAmIzM0OyRyeF9kZWx0YSYjMzQ7IC1ndCAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBvbmx5ICRyeF9kZWx0YS8kY291bnQgcGFja2V0cyByZWNlaXZlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gJiMzNDska3NmdF9mYWlsJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IDAvJGNvdW50IHBhY2tldHMgcmVjZWl2ZWQmIzM0OwomIzQzOwkJcmV0dXJuICYjMzQ7JGtzZnRfZmFpbCYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO3JldD0wCiYjNDM7CiYjNDM7ZWNobyAmIzM0O1RFU1Q6IEZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXBzdWxhdGlvbiByZXN1Ym1pdCYjMzQ7CiYjNDM7c2V0dXBfY29tbW9uCiYjNDM7c2V0dXBfaXB2NAomIzQzO3J1bl9waW5nX3Rlc3QgLTQgZW91ZHA0ICYjMzQ7JFRVTjRfUiYjMzQ7IHx8IHJldD0kPwomIzQzOwomIzQzO2VjaG8gJiMzNDtURVNUOiBGT1UvR1JFVEFQIElQdjYgbXVsdGljYXN0IGVuY2Fwc3VsYXRpb24gcmVzdWJtaXQmIzM0OwomIzQzO2lmIHNldHVwX2lwdjY7IHRoZW4KJiM0MzsJcnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgJiMzNDskVFVONl9SJiMzNDsgfHwgcmV0PSQ/CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7U0tJUDogSVB2NiB1bmF2YWlsYWJsZSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk1NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgVURQIE11bHRpY2FzdCBEZWxpdmVyeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5IHBhdGhzIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gSXQgc2VlbXMgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGB1ZHBfcXVldWVfcmN2X3NrYmAgYW5kIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYCBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBmdW5jdGlvbnMuCgpQcmV2aW91c2x5LCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIChvciBgdWRwdjZfcXVldWVfcmN2X3NrYmApIHJldHVybmVkIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSBjb2RlIGNvbnN1bWVkIHRoZSBza2IgKHNvY2tldCBidWZmZXIpLiBOb3csIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG51YW5jZWQgcmV0dXJuIHZhbHVlIGhhbmRsaW5nLiBJbiB0aGUgSVB2NCBjYXNlLCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybnMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgdGhlIGNvZGUgbm93IHJldHVybnMgdGhlIG5lZ2F0aXZlIG9mIHRoYXQgdmFsdWUuIFRoZSBJUHY2IGNhc2UgaXMgdGhlIG9wcG9zaXRlLCByZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZS4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGFsbG93IGZvciByZXN1Ym1pdHRpbmcgdGhlIHBhY2tldCwgcHJlc3VtYWJseSB0byBhbiBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChsaWtlIEdSRSkgd2hlbiBwYWNrZXRzIGFycml2ZSB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC4gVGhpcyByZXN1Ym1pc3Npb24gaXMgcHJvYmFibHkgZHVlIHRvIHRoZSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGNhbGwgbmVlZGluZyB0byByZXR1cm4gYW4gZXJyb3IsIGJ1dCBjb25zdW1pbmcgdGhlIHNrYiBpZiB0aGF0IGVycm9yIGlzIG5vdCB0byBiZSBoYW5kbGVkIGF0IHRoYXQgbGF5ZXIuCgpHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UsIGFuZCB0aGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5LCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBkaWcgaW50byBgdWRwX3F1ZXVlX3Jjdl9za2JgIGFuZCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmV0dXJuIGNvZGVzLCBhbmQgd2hhdCB0aGV5IHNpZ25pZnkuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbj8gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCwgdGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9scywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGV5IGFyZSBpbiB0aGUgaG90IHBhdGggZm9yIG11bHRpY2FzdCBVRFAgcGFja2V0cy4KCkFuZCB3YWl0LCB0aGUgdGVzdCBjYXNlIG1lbnRpb25zIEZPVSBhbmQgR1JFVEFQLCBpbmRpY2F0aW5nIHRoYXQgY2VydGFpbiBjb25maWd1cmF0aW9ucyB3aWxsIGJlIHJlcXVpcmVkIHRvIHJlcHJvZHVjZSBhbmQgZnV6eiB0aGlzIHByb3Blcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBoYXMgdGhlIHJpZ2h0IG9wdGlvbnMgZW5hYmxlZC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRfRk9VYCwgYENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNgLCBgQ09ORklHX0lQX0dSRWAsIGFuZCBgQ09ORklHX0lQVjZfR1JFYCBhcmUgYWxsIHNldC4gVGhpcyBpcyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSB0byBlbnN1cmUgSSBjYW4gcmVwcm9kdWNlIHRoZSB0ZXN0IGNhc2UgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVF9GT1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTY2PUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjY3OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnLTY4LUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTYyPUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo2MzpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNjQtQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZz02OT1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZzo3MDpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy03MS1DT05GSUdfSU5FVF9BSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTU5PUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjYwOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnLTYxLUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NjE9Q09ORklHX05FVF9JUFZUST1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NjI6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNjMtQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc9NjA9Q09ORklHX05FVF9JUFZUST1tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnOjYxOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy02Mi1DT05GSUdfSU5FVF9BSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTgwPUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjgxOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnLTgyLUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz01OD1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjU5OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctNjAtQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnPTU5PUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NjA6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVF9BSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz02MD1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NjE6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnLTYyLUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjU2OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctNTctQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz01Nj1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo1NzpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZy01OC1DT05GSUdfSU5FVF9BSD1tXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9Mjc9Zm91LXkgOj0gZm91X2NvcmUubyBmb3VfbmwubyBmb3VfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRfRk9VKSAmIzQzOz0gZm91Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICYjNDM7PSBncmUub1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMjgtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwMjk6I2lmZGVmIENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAzMC1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTM1PXN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkge1xuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDEtXHRcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfVlhMQU4pICogMiAmIzQzOyBcXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo0MjpcdFx0XHQgICAgICBJU19FTkFCTEVEKENPTkZJR19ORVRfRk9VKSAqIDIgJiM0MzsgXFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDMtXHRcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkgKiAyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9NzQ9Q09ORklHX05FVF9DTFNfTUFUQ0hBTEw9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo3NTpDT05GSUdfTkVUX0ZPVT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnOjc2OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy03Ny1DT05GSUdfTkVUX0lQR1JFPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTg2PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6ODc6Q09ORklHX05FVF9GT1U9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4ODpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctODktQ09ORklHX05FVF9JUEdSRT1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVRFAgTXVsdGljYXN0IERlbGl2ZXJ5IElzc3VlIHdpdGggRk9VIEVuY2Fwc3VsYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJvYmxlbSBpbiBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5LCBzcGVjaWZpY2FsbHkgd2hlbiBwYWNrZXRzIGFyZSBlbmNhcHN1bGF0ZWQgdXNpbmcgRk9VLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgRk9VLCBpbnRlcmVzdGluZyBjaG9pY2Ugb2YgZW5jYXBzdWxhdGlvbi4mIzM0OyBUaGUgdGVzdGluZyBpbnZvbHZlcyBib3RoIEZPVSBhbmQgR1JFVEFQLCB3aGljaCBpcyBhIGdvb2QgY29tYmluYXRpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTkVUX0ZPVWAgYW5kIGBORVRfRk9VX0lQX1RVTk5FTFNgLgoKV2FpdCBhIHNlY29uZC4uLiB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gVGhvc2UgZmlsZXMgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YC4gVGhhdCBzdWdnZXN0cyBhIGZ1bmRhbWVudGFsIGlzc3VlIHdpdGhpbiB0aGUgVURQIGNvcmUgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBGT1UgbW9kdWxlLiBJbnRlcmVzdGluZy4uLgoKU28sIHRoaXMgaXNzdWUgaXMgKnRyaWdnZXJlZCogYnkgRk9VIGVuY2Fwc3VsYXRpb24uIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhhdCBgdWRwX3F1ZXVlX3Jjdl9za2JgIGlzIHJldHVybmluZyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3aGljaCwgaW4gdGhlIEZPVSBjb250ZXh0LCBhcHBhcmVudGx5IHNpZ25pZmllcyB0aGF0IHRoZSBwYWNrZXQgbmVlZHMgcmVzdWJtaXNzaW9uLCBsaWtlbHkgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBsaWtlIEdSRSBlbmNhcHN1bGF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlsczogd2hhdCBpcyB0aGUgbG9naWMgd2l0aGluIGB1ZHBfcXVldWVfcmN2X3NrYmAgdGhhdCYjMzk7cyBjYXVzaW5nIHRoaXMgcmV0dXJuIHZhbHVlPyBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byBGT1UgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JldHVybi4qXHUwMDNlLiowJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmM9ODU0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX191ZHA0X2xpYl9lcnJfZW5jYXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY0L3VkcC5jLTkwNS0gKiBzb3J0IG9mIGVycm9yIGNvbmRpdGlvbi4gIElmIGVyciBcdTAwM2MgMCB0aGVuIHRoZSBzb2NrZXQgc2hvdWxkXG5uZXQvaXB2NC91ZHAuYzo5MDY6ICogYmUgY2xvc2VkIGFuZCB0aGUgZXJyb3IgcmV0dXJuZWQgdG8gdGhlIHVzZXIuICBJZiBlcnIgXHUwMDNlIDBcbm5ldC9pcHY0L3VkcC5jLTkwNy0gKiBpdCYjMzk7cyBqdXN0IHRoZSBpY21wIHR5cGUgXHUwMDNjXHUwMDNjIDggfCBpY21wIGNvZGUuXG4tLVxubmV0L2lwdjQvdWRwLmM9MjU2OT1zdGF0aWMgaW50IHVkcF91bmljYXN0X3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3VkcC5jLTI1NzgtXG5uZXQvaXB2NC91ZHAuYzoyNTc5Olx0LyogYSByZXR1cm4gdmFsdWUgXHUwMDNlIDAgbWVhbnMgdG8gcmVzdWJtaXQgdGhlIGlucHV0LCBidXRcbm5ldC9pcHY0L3VkcC5jLTI1ODAtXHQgKiBpdCB3YW50cyB0aGUgcmV0dXJuIHRvIGJlIC1wcm90b2NvbCwgb3IgMFxuLS1cbm5ldC9pcHY0L3VkcC5jPTMzNTI9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91ZHBfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjQvdWRwLmMtMzQ2Mi1cdFdBUk5fT05fT05DRShpdGVyLVx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xubmV0L2lwdjQvdWRwLmM6MzQ2MzpcdHJldHVybiBpdGVyLVx1MDAzZWVuZF9zayA/IGl0ZXItXHUwMDNlYmF0Y2hbMF0uc2sgOiBOVUxMO1xubmV0L2lwdjQvdWRwLmMtMzQ2NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdWRwX3F1ZXVlX3Jjdl9za2JgIFJlc3VibWlzc2lvbiBMb2dpYyoqCgpSaWdodCwgc28gYHVkcF9xdWV1ZV9yY3Zfc2tiYCBpcyByZXR1cm5pbmcgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgd2hpY2gsIGlmIG1lbW9yeSBzZXJ2ZXMsIGluZGljYXRlcyBhIG5lZWQgdG8gcmVzdWJtaXQgdGhlIHJlY2VpdmVkIHNvY2tldCBidWZmZXIgKGBza2JgKS4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0ICp3aHkqLiBBIHBvc2l0aXZlIHJldHVybiB1c3VhbGx5IHNpZ25hbHMgc29tZSBraW5kIG9mIHF1ZXVlaW5nIGlzc3VlLCBwb3RlbnRpYWwgcmVzb3VyY2UgY29udGVudGlvbiwgb3IgcGVyaGFwcyBhIHRlbXBvcmFyeSBpbmFiaWxpdHkgdG8gcHJvY2VzcyB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgVURQIGFuZCBpdHMgcG90ZW50aWFsIGZvciBoaWdoLXZvbHVtZSB0cmFmZmljLCB1bmRlcnN0YW5kaW5nIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpbiBkZXRhaWwgaXMgcGFyYW1vdW50LiBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIHRoZSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGltcGxlbWVudGF0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlc3VibWlzc2lvbiBjb25kaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIGJlaGF2aW9yLiBBcmUgd2UgdGFsa2luZyBhYm91dCBpbnRlcm5hbCBxdWV1ZSBvdmVyZmxvd3M/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZXJyb3Igc2NlbmFyaW9zIGJlaW5nIGhhbmRsZWQ/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWUmIzM5O3MgbWVhbmluZywgc3BlY2lmaWMgY2hlY2tzIGJlaW5nIHBlcmZvcm1lZCBvbiB0aGUgYHNrYmAsIGFuZCBhbnkgYXNzb2NpYXRlZCBsb2NraW5nIG9yIGNvbnRlbnRpb24gaXNzdWVzLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQ7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXN1Ym1pc3Npb24gbWVjaGFuaXNtIGlzIGVmZmljaWVudCwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGV4Y2Vzc2l2ZSBsYXRlbmN5IG9yIHBvdGVudGlhbCBmb3IgbGl2ZWxvY2tzLCBhbmQgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBncmFjZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB1ZHBfcXVldWVfcmN2X3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTIzNTA9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI0MjItXG5uZXQvaXB2NC91ZHAuYzoyNDIzOnN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdWRwLmMtMjQyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiBrZXJuZWwgbmV0d29ya2luZyBjb2RlOgoKKipEaXZpbmcgaW50byBgdWRwX3F1ZXVlX3Jjdl9za2JgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgdWRwX3F1ZXVlX3Jjdl9za2JgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgYSBjcml0aWNhbCBwYXJ0IG9mIGl0LCBmb3IgcmVjZWl2aW5nIFVEUCB0cmFmZmljLiBJIGtub3cgdGhlIGJhc2ljczogYSBTS0IgKFNvY2tldCBCdWZmZXIpIGNvbnRhaW5pbmcgdGhlIGluY29taW5nIFVEUCBkYXRhZ3JhbSBpcyBsaWtlbHkgYWxyZWFkeSBjb25zdHJ1Y3RlZCwgcHJvYmFibHkgYnkgdGhlIGhhcmR3YXJlIG9yIGEgbG93ZXItbGV2ZWwgZHJpdmVyLiBOb3csICp0aGlzKiBpcyB3aGVyZSB3ZSBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0IHdpdGhpbiB0aGUgVURQIGxheWVyIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aGVyZSB0aGlzIFNLQiBnZXRzIGVucXVldWVkLCBob3cgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzb2NrZXQgKGlmIGF0IGFsbCwgZGVwZW5kaW5nIG9uIHRoZSBjaXJjdW1zdGFuY2VzKSwgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgZm9yIGhhbmRsaW5nIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHJlc291cmNlIGxpbWl0YXRpb25zLiBJcyB0aGlzIGRpcmVjdC10by1zb2NrZXQsIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggYSBtb3JlIGdlbmVyaWMgUlggcGF0aD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjb25uZWN0ZWQgVURQIHNvY2tldHMsIG9yIHVuY29ubmVjdGVkIG9uZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGludm9sdmVkIOKAkyBpcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBxdWV1ZSBsZW5ndGhzIGFuZCBob3cgdGhhdCBhZmZlY3RzIG92ZXJhbGwgbGF0ZW5jeT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRyaWNhdGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFVEUCBzb2NrZXQgaXRzZWxmLCBhbmQgSSBuZWVkIHRvIGJlIHJlYWR5IHRvIHNwb3QgcG90ZW50aWFsIGlzc3VlcyBpbnZvbHZpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHF1ZXVpbmcgZGlzY2lwbGluZSBhbmQgd2hldGhlciBhbnkgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMgYXJlIHV0aWxpemVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDIzOlx0c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4yNDI0Olx0e1xuMjQyNTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5leHQsICpzZWdzO1xuMjQyNjpcdFx0aW50IHJldDtcbjI0Mjc6XHRcbjI0Mjg6XHRcdGlmIChsaWtlbHkoIXVkcF91bmV4cGVjdGVkX2dzbyhzaywgc2tiKSkpXG4yNDI5Olx0XHRcdHJldHVybiB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG4yNDMwOlx0XG4yNDMxOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1ZHBfc2tiX2NiKSBcdTAwM2UgU0tCX0dTT19DQl9PRkZTRVQpO1xuMjQzMjpcdFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcbjI0MzM6XHRcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgdHJ1ZSk7XG4yNDM0Olx0XHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuZXh0KSB7XG4yNDM1Olx0XHRcdF9fc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbjI0MzY6XHRcbjI0Mzc6XHRcdFx0dWRwX3Bvc3Rfc2VnbWVudF9maXhfY3N1bShza2IpO1xuMjQzODpcdFx0XHRyZXQgPSB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG4yNDM5Olx0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4yNDQwOlx0XHRcdFx0aXBfcHJvdG9jb2xfZGVsaXZlcl9yY3UoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgc2tiLCByZXQpO1xuMjQ0MTpcdFx0fVxuMjQ0MjpcdFx0cmV0dXJuIDA7XG4yNDQzOlx0fVxuMjQ0NDpcdFxuMjQ0NTpcdC8qIEZvciBUQ1Agc29ja2V0cywgc2tfcnhfZHN0IGlzIHByb3RlY3RlZCBieSBzb2NrZXQgbG9ja1xuMjQ0NjpcdCAqIEZvciBVRFAsIHdlIHVzZSB4Y2hnKCkgdG8gZ3VhcmQgYWdhaW5zdCBjb25jdXJyZW50IGNoYW5nZXMuXG4yNDQ3Olx0ICovXG4yNDQ4Olx0Ym9vbCB1ZHBfc2tfcnhfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbjI0NDk6XHR7XG4yNDUwOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpvbGQ7XG4yNDUxOlx0XG4yNDUyOlx0XHRpZiAoZHN0X2hvbGRfc2FmZShkc3QpKSB7XG4yNDUzOlx0XHRcdG9sZCA9IHVucmN1X3BvaW50ZXIoeGNoZyhcdTAwMjZzay1cdTAwM2Vza19yeF9kc3QsIFJDVV9JTklUSUFMSVpFUihkc3QpKSk7XG4yNDU0Olx0XHRcdGRzdF9yZWxlYXNlKG9sZCk7XG4yNDU1Olx0XHRcdHJldHVybiBvbGQgIT0gZHN0O1xuMjQ1NjpcdFx0fVxuMjQ1NzpcdFx0cmV0dXJuIGZhbHNlO1xuMjQ1ODpcdH1cbjI0NTk6XHRcbjI0NjA6XHQvKlxuMjQ2MTpcdCAqXHRNdWx0aWNhc3RzIGFuZCBicm9hZGNhc3RzIGdvIHRvIGVhY2ggbGlzdGVuZXIuXG4yNDYyOlx0ICpcbjI0NjM6XHQgKlx0Tm90ZTogY2FsbGVkIG9ubHkgZnJvbSB0aGUgQkggaGFuZGxlciBjb250ZXh0LlxuMjQ2NDpcdCAqL1xuMjQ2NTpcdHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjI0NjY6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdWRwaGRyICAqdWgsXG4yNDY3Olx0XHRcdFx0XHQgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIpXG4yNDY4Olx0e1xuMjQ2OTpcdFx0c3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUgPSBuZXQtXHUwMDNlaXB2NC51ZHBfdGFibGU7XG4yNDcwOlx0XHR1bnNpZ25lZCBpbnQgaGFzaDIsIGhhc2gyX2FueSwgb2Zmc2V0O1xuMjQ3MTpcdFx0dW5zaWduZWQgc2hvcnQgaG51bSA9IG50b2hzKHVoLVx1MDAzZWRlc3QpO1xuMjQ3MjpcdFx0c3RydWN0IHNvY2sgKnNrLCAqZmlyc3QgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCBGdW5jdGlvbioqCgpPa2F5LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJldHVybmluZyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgdGhhdCYjMzk7cyBzdXJmYWNpbmcgaXMgdGhhdCBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCBpcyBsaWtlbHkgdGhlIGtleSBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGhvbGQgdGhlIGFuc3dlci4gSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSBhbmQgdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSByZXR1cm4gcGF0aHMgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgcmV0dXJuIHZhbHVlIEkgYW0gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzUwOlx0c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjM1MTpcdHtcbjIzNTI6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4yMzUzOlx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbjIzNTQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjIzNTU6XHRcbjIzNTY6XHRcdC8qXG4yMzU3Olx0XHQgKlx0Q2hhcmdlIGl0IHRvIHRoZSBzb2NrZXQsIGRyb3BwaW5nIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLlxuMjM1ODpcdFx0ICovXG4yMzU5Olx0XHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbjIzNjA6XHRcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG4yMzYxOlx0XHRcdGdvdG8gZHJvcDtcbjIzNjI6XHRcdH1cbjIzNjM6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4yMzY0Olx0XG4yMzY1Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZ1ZHBfZW5jYXBfbmVlZGVkX2tleSkgXHUwMDI2XHUwMDI2XG4yMzY2Olx0XHQgICAgUkVBRF9PTkNFKHVwLVx1MDAzZWVuY2FwX3R5cGUpKSB7XG4yMzY3Olx0XHRcdGludCAoKmVuY2FwX3Jjdikoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjIzNjg6XHRcbjIzNjk6XHRcdFx0LypcbjIzNzA6XHRcdFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cbjIzNzE6XHRcdFx0ICogdGhlIHNvY2tldCYjMzk7cyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XG4yMzcyOlx0XHRcdCAqIGZhbGwgdGhyb3VnaCBhbmQgcGFzcyB0aGlzIHVwIHRoZSBVRFAgc29ja2V0LlxuMjM3MzpcdFx0XHQgKiB1cC1cdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XG4yMzc0Olx0XHRcdCAqID0wIGlmIHNrYiB3YXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCB0byB0aGUgZW5jYXBcbjIzNzU6XHRcdFx0ICogICAgaGFuZGxlciBvciB3YXMgZGlzY2FyZGVkIGJ5IGl0LlxuMjM3NjpcdFx0XHQgKiBcdTAwM2UwIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIFVEUC5cbjIzNzc6XHRcdFx0ICogXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXG4yMzc4Olx0XHRcdCAqL1xuMjM3OTpcdFxuMjM4MDpcdFx0XHQvKiBpZiB3ZSYjMzk7cmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xuMjM4MTpcdFx0XHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfcmN2KTtcbjIzODI6XHRcdFx0aWYgKGVuY2FwX3Jjdikge1xuMjM4MzpcdFx0XHRcdGludCByZXQ7XG4yMzg0Olx0XG4yMzg1Olx0XHRcdFx0LyogVmVyaWZ5IGNoZWNrc3VtIGJlZm9yZSBnaXZpbmcgdG8gZW5jYXAgKi9cbjIzODY6XHRcdFx0XHRpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuMjM4NzpcdFx0XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuMjM4ODpcdFxuMjM4OTpcdFx0XHRcdHJldCA9IGVuY2FwX3Jjdihzaywgc2tiKTtcbjIzOTA6XHRcdFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuMjM5MTpcdFx0XHRcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XG4yMzkyOlx0XHRcdFx0XHRyZXR1cm4gLXJldDtcbjIzOTM6XHRcdFx0XHR9XG4yMzk0Olx0XHRcdH1cbjIzOTU6XHRcbjIzOTY6XHRcdFx0LyogRkFMTFRIUk9VR0ggLS0gaXQmIzM5O3MgYSBVRFAgUGFja2V0ICovXG4yMzk3Olx0XHR9XG4yMzk4Olx0XG4yMzk5Olx0XHRwcmVmZXRjaChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgTXVsdGljYXN0IERlbGl2ZXJ5IFBhdGgqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHVwLSZndDtlbmNhcF9yY3YoKWAgaXMgdGhlIGtleS4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8sIEkga25vdyB0aGUgYHNrYmAgbmVlZHMgdG8gYmUgcmVzdWJtaXR0ZWQgd2l0aCBhIHByb3RvY29sIGAtTmAuICBSaWdodCwgYW5kIGB1ZHBfcXVldWVfcmN2X29uZV9za2JgIGdpdmVzIGJhY2sgdGhlIG5lZ2F0aXZlIG9mIHRoZSByZXR1cm4gdmFsdWUgKGAtcmV0YCkgd2hlbiBpdCYjMzk7cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KClNvLCBpZiBgZW5jYXBfcmN2YCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCB0aGVuIHJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIgKGAtcmV0YCkuIFRoYXQgbWVhbnMgYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbHNvIHJldHVybnMgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBbmQgdWx0aW1hdGVseSwgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgcmVjZWl2ZXMgdGhpcyBwb3NpdGl2ZSB2YWx1ZS4KCkJlZm9yZSB0aGlzIHBhdGNoLCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBoYWQgdGhpcyBsb2dpYzogaXQgd291bGQgY2FsbCBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhbmQgaWYgdGhhdCByZXR1cm5lZCBhIHBvc2l0aXZlIHZhbHVlLCB0aGUgYHNrYmAgd2FzIGNvbnN1bWVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIGEgcHJvYmxlbSEgSW5zdGVhZCBvZiByZXN1Ym1pdHRpbmcgaXQgYXMgd2UgaW50ZW5kZWQsIHdlIHdlcmUganVzdCB0aHJvd2luZyBpdCBhd2F5LgoKTm93LCB3aXRoIHRoaXMgcGF0Y2gsIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGNhbGxzIGB1ZHBfcXVldWVfcmN2X3NrYmAsIGFuZCwgY3J1Y2lhbGx5LCBpZiBgcmV0ICZndDsgMGAsIGl0ICpyZXR1cm5zKiBgLXJldGAuICBTbywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LCBzaWduYWxpbmcgdGhlIG5lZWQgZm9yIHJlc3VibWlzc2lvbi4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjazogYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgaXMgcmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUsIGFzIGV4cGVjdGVkLCB0byBpbmRpY2F0ZSByZXN1Ym1pc3Npb24uIE5vdywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdobyBjYWxscyBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTI0NDg9Ym9vbCB1ZHBfc2tfcnhfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDY0LSAqL1xubmV0L2lwdjQvdWRwLmM6MjQ2NTpzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC91ZHAuYy0yNDY2LVx0XHRcdFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcbi0tXG5uZXQvaXB2NC91ZHAuYz0yNTkxPWludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjY0OS1cdGlmIChydC1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcbm5ldC9pcHY0L3VkcC5jOjI2NTA6XHRcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xubmV0L2lwdjQvdWRwLmMtMjY1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUmV0dXJuIFZhbHVlIG9mIGB1ZHBfcmN2YCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBVRFAgcmVjZWl2ZSBwYXRoLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgdWRwX3JjdmAg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCwgb2YgY291cnNlLCBpc24mIzM5O3QganVzdCAqd2hhdCogaGFwcGVucywgYnV0IHRoZSAqcmVzdWx0KiBvZiB0aGUgZnVuY3Rpb24uIFdoYXQgZG9lcyBgdWRwX3JjdmAgKnRlbGwqIG1lPyBXaGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgZW5jb2RlZCBpbiBpdHMgcmV0dXJuIHZhbHVlPwoKSSYjMzk7bSB0aGlua2luZzogaXMgaXQgYSBzaW1wbGUgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgYW5kIGlmIHNvLCBob3cgZ3JhbnVsYXIgaXMgdGhlIGluZm9ybWF0aW9uPyBEb2VzIGl0IHJldHVybiBhIHBvaW50ZXIgdG8gYSBkYXRhZ3JhbSwgYW5kIGlmIHNvLCBob3cgaXMgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlZD8gRG9lcyBpdCBoYXZlIHNpZGUgZWZmZWN0cz8gSXMgdGhlcmUgYSBzdWJ0bGUgc3RhdGUgY2hhbmdlIHRoYXQgaW1wYWN0cyBzdWJzZXF1ZW50IGNhbGxzPyBBcmUgdGhlcmUgZGlmZmVyZW50IHJldHVybiBwYXRocyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IGNvbmRpdGlvbiBhbmQgd2hhdCBmYWN0b3JzIGFyZSBjb25zaWRlcmVkIHRvIGRldGVybWluZSBob3cgdGhlIGNhbGwgc2hvdWxkIGJlIGhhbmRsZWQuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6IFdoYXQgYXJlIHRoZSBwb3NzaWJsZSBzdGF0ZXMgZm9sbG93aW5nIHRoZSBmdW5jdGlvbuKAmXMgY2FsbD8gVGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBzdGF0ZXMgb24gdGhlIGtlcm5lbCBhbmQgdGhlIGFwcGxpY2F0aW9uPyBNeSBnb2FsIGhlcmUgaXMgYSBmdWxsIGFuZCBkZWVwIGFwcHJlY2lhdGlvbiBvZiB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTkxOlx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjI1OTI6XHR7XG4yNTkzOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTtcbjI1OTQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4yNTk1Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xuMjU5NjpcdFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcbjI1OTc6XHRcdF9fYmUzMiBzYWRkciwgZGFkZHI7XG4yNTk4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbjI1OTk6XHRcdGJvb2wgcmVmY291bnRlZDtcbjI2MDA6XHRcdGludCBkcm9wX3JlYXNvbjtcbjI2MDE6XHRcbjI2MDI6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4yNjAzOlx0XG4yNjA0Olx0XHQvKlxuMjYwNTpcdFx0ICogIFZhbGlkYXRlIHRoZSBwYWNrZXQuXG4yNjA2Olx0XHQgKi9cbjI2MDc6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG4yNjA4Olx0XHRcdGdvdG8gZHJvcDtcdFx0LyogTm8gc3BhY2UgZm9yIGhlYWRlci4gKi9cbjI2MDk6XHRcbjI2MTA6XHRcdHVoICAgPSB1ZHBfaGRyKHNrYik7XG4yNjExOlx0XHR1bGVuID0gbnRvaHModWgtXHUwMDNlbGVuKTtcbjI2MTI6XHRcdHNhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4yNjEzOlx0XHRkYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMjYxNDpcdFxuMjYxNTpcdFx0aWYgKHVsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4yNjE2Olx0XHRcdGdvdG8gc2hvcnRfcGFja2V0O1xuMjYxNzpcdFxuMjYxODpcdFx0aWYgKHVsZW4gXHUwMDNjIHNpemVvZigqdWgpKVxuMjYxOTpcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjA6XHRcbjI2MjE6XHRcdGlmICh1bGVuIFx1MDAzYyBza2ItXHUwMDNlbGVuKSB7XG4yNjIyOlx0XHRcdGlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCB1bGVuKSlcbjI2MjM6XHRcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjQ6XHRcbjI2MjU6XHRcdFx0dWggPSB1ZHBfaGRyKHNrYik7XG4yNjI2Olx0XHR9XG4yNjI3Olx0XG4yNjI4Olx0XHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXG4yNjI5Olx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjI2MzA6XHRcbjI2MzE6XHRcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cdTAwM2Vzb3VyY2UsIGRhZGRyLCB1aC1cdTAwM2VkZXN0LFxuMjYzMjpcdFx0XHRcdCAgICAgXHUwMDI2cmVmY291bnRlZCwgdWRwX2VoYXNoZm4pO1xuMjYzMzpcdFx0aWYgKElTX0VSUihzaykpXG4yNjM0Olx0XHRcdGdvdG8gbm9fc2s7XG4yNjM1Olx0XG4yNjM2Olx0XHRpZiAoc2spIHtcbjI2Mzc6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMjYzODpcdFx0XHRpbnQgcmV0O1xuMjYzOTpcdFxuMjY0MDpcdFx0XHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFVEUCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGB1ZHBfcmN2YCBmdW5jdGlvbi4gU29tZXRoaW5nIGp1c3QgdHJpZ2dlcmVkIGEgY3VyaW9zaXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiByZWFsbHkgd29ya3MuIEFoLCBoZXJlIGl0IGlzLCBsaW5lIDI2NTAuIEl0JiMzOTtzIGNhbGxpbmcgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAuIEludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gZGlnIGRlZXBlciBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNpdHVhdGlvbnMgdHJpZ2dlciB0aGlzIGNhbGwuIExldCBtZSByZXJlYWQgdGhlIGVudGlyZSBmdW5jdGlvbiBmbG93LiBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyBsZWFkIHRvIHRoaXMgbXVsdGljYXN0IGRlbGl2ZXJ5IHBhdGguIFdoYXQgYXJlIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZml0cyBpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIFVEUCBwYWNrZXQgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9jdXNpbmcgb24gaG93IGRpZmZlcmVudCBwYWNrZXQgY2hhcmFjdGVyaXN0aWNzIGluZmx1ZW5jZSBjb250cm9sIGZsb3cuIEkgd2FudCB0aGUgZnVsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQxOlx0XHRcdFx0dWRwX3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XG4yNjQyOlx0XG4yNjQzOlx0XHRcdHJldCA9IHVkcF91bmljYXN0X3Jjdl9za2Ioc2ssIHNrYiwgdWgpO1xuMjY0NDpcdFx0XHRpZiAocmVmY291bnRlZClcbjI2NDU6XHRcdFx0XHRzb2NrX3B1dChzayk7XG4yNjQ2Olx0XHRcdHJldHVybiByZXQ7XG4yNjQ3Olx0XHR9XG4yNjQ4Olx0XG4yNjQ5Olx0XHRpZiAocnQtXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpXG4yNjUwOlx0XHRcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xuMjY1MTpcdFxuMjY1MjpcdFx0c2sgPSBfX3VkcDRfbGliX2xvb2t1cF9za2Ioc2tiLCB1aC1cdTAwM2Vzb3VyY2UsIHVoLVx1MDAzZWRlc3QpO1xuMjY1MzpcdFx0aWYgKHNrKVxuMjY1NDpcdFx0XHRyZXR1cm4gdWRwX3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XG4yNjU1Olx0bm9fc2s6XG4yNjU2Olx0XHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSlcbjI2NTc6XHRcdFx0Z290byBkcm9wO1xuMjY1ODpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbjI2NTk6XHRcbjI2NjA6XHRcdC8qIE5vIHNvY2tldC4gRHJvcCBwYWNrZXQgc2lsZW50bHksIGlmIGNoZWNrc3VtIGlzIHdyb25nICovXG4yNjYxOlx0XHRpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuMjY2MjpcdFx0XHRnb3RvIGNzdW1fZXJyb3I7XG4yNjYzOlx0XG4yNjY0Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19TT0NLRVQ7XG4yNjY1Olx0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX05PUE9SVFMpO1xuMjY2NjpcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcbjI2Njc6XHRcbjI2Njg6XHRcdC8qXG4yNjY5Olx0XHQgKiBIbW0uICBXZSBnb3QgYW4gVURQIHBhY2tldCB0byBhIHBvcnQgdG8gd2hpY2ggd2VcbjI2NzA6XHRcdCAqIGRvbiYjMzk7dCB3YW5uYSBsaXN0ZW4uICBJZ25vcmUgaXQuXG4yNjcxOlx0XHQgKi9cbjI2NzI6XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG4yNjczOlx0XHRyZXR1cm4gMDtcbjI2NzQ6XHRcbjI2NzU6XHRzaG9ydF9wYWNrZXQ6XG4yNjc2Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xuMjY3NzpcdFx0bmV0X2RiZ19yYXRlbGltaXRlZChcJiMzNDtVRFA6IHNob3J0IHBhY2tldDogRnJvbSAlcEk0OiV1ICVkLyVkIHRvICVwSTQ6JXVcXG5cJiMzNDssXG4yNjc4Olx0XHRcdFx0ICAgIFx1MDAyNnNhZGRyLCBudG9ocyh1aC1cdTAwM2Vzb3VyY2UpLFxuMjY3OTpcdFx0XHRcdCAgICB1bGVuLCBza2ItXHUwMDNlbGVuLFxuMjY4MDpcdFx0XHRcdCAgICBcdTAwMjZkYWRkciwgbnRvaHModWgtXHUwMDNlZGVzdCkpO1xuMjY4MTpcdFx0Z290byBkcm9wO1xuMjY4MjpcdFxuMjY4MzpcdGNzdW1fZXJyb3I6XG4yNjg0Olx0XHQvKlxuMjY4NTpcdFx0ICogUkZDMTEyMjogT0suICBEaXNjYXJkcyB0aGUgYmFkIHBhY2tldCBzaWxlbnRseSAoYXMgZmFyIGFzXG4yNjg2Olx0XHQgKiB0aGUgbmV0d29yayBpcyBjb25jZXJuZWQsIGFueXdheSkgYXMgcGVyIDQuMS4zLjQgKE1VU1QpLlxuMjY4NzpcdFx0ICovXG4yNjg4Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VRFBfQ1NVTTtcbjI2ODk6XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7VURQOiBiYWQgY2hlY2tzdW0uIEZyb20gJXBJNDoldSB0byAlcEk0OiV1IHVsZW4gJWRcXG5cJiMzNDssXG4yNjkwOlx0XHRcdFx0ICAgIFx1MDAyNnNhZGRyLCBudG9ocyh1aC1cdTAwM2Vzb3VyY2UpLCBcdTAwMjZkYWRkciwgbnRvaHModWgtXHUwMDNlZGVzdCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqVURQIE11bHRpY2FzdCBEZWxpdmVyeSBEZWVwIERpdmUqKgoKT2theSwgc28gYHVkcF9yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGluY29taW5nIFVEUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgZG9lcyBgdWRwX3JjdmAgYWN0dWFsbHkgKnJldHVybio/IFRoZSBjb2RlIGluZGljYXRlcyBpdCYjMzk7cyB0aWVkIHRvIHdoYXQgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZG9lcy4gVGhhdCBzZWVtcyBsaWtlIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbm5lY3Rpb24gYmV0dGVyLgoKTm93LCBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGlzIHRoZSBvbmUgdGhhdCAqdXNlcyogdGhlIHJldHVybiB2YWx1ZSBmcm9tIGB1ZHBfcmN2YC4gVGhpcyBsb29rcyBsaWtlIHRoZSBuZXh0IHNpZ25pZmljYW50IHBvaW50IGluIHRoZSBjaGFpbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IG9yY2hlc3RyYXRlcyB0aGUgaGlnaGVyLWxldmVsIHByb2Nlc3NpbmcsIG9yIGF0IGxlYXN0IGhvdyB0aGUgcGFja2V0IGlzIHVzZWQuCgpSaWdodCwgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyBsb2NhdGVkIGluIGBuZXQvaXB2NC9pcF9pbnB1dC5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGRpc3NlY3QgdGhlIGxvZ2ljIHdpdGhpbiBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoYXQgcmV0dXJuIHZhbHVlIGFuZCBob3cgdGhlIGRlbGl2ZXJ5IHByb2Nlc3MgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9wcm90b2NvbF9kZWxpdmVyX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfaW5wdXQuYz0xODg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjE4OTp2b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxubmV0L2lwdjQvaXBfaW5wdXQuYy0xOTAte1xuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0yNDAtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjI0MTpcdGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI0Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIG9uIHRoZSBkb2NrZXQuLi4gQWgsIHJpZ2h0LCBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaW1lIHRvIGdldCBteSB0ZWV0aCBpbnRvIHRoaXMgb25lLiBJIGtub3cgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBJUCB0cmFmZmljIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgc3luY2hyb25pemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBob3cgaXQgaXMgaW1wYWN0aW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEga2V5IHJvbGUgaW4gZGVsaXZlcmluZyBwYWNrZXRzIHRvIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsZXJzIGFmdGVyIHRoZXkmIzM5O3ZlIGJlZW4gcmVjZWl2ZWQuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZW11bHRpcGxleGluZywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCYjMzk7cyBkb25lIHdpdGhpbiB0aGUgY29udGV4dCBvZiBSQ1UsIHBhcnRpY3VsYXJseSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBhbmQgbG9jayBjb250ZW50aW9uIOKAkyBvciwgcmF0aGVyLCB0aGUgYXZvaWRhbmNlIHRoZXJlb2YuIEkgYW50aWNpcGF0ZSB0aGF0IFJDVSBpcyB1c2VkIGhlcmUgdG8gb3B0aW1pemUgdGhlIHJlYWQgcGF0aHMsIGFsbG93aW5nIGZvciBoaWdoLXRocm91Z2hwdXQgcGFja2V0IGRlbGl2ZXJ5IHdpdGhvdXQgZXhjZXNzaXZlIGxvY2tpbmcgb3ZlcmhlYWQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBiYWxhbmNlIGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIGNvbnNpc3RlbmN5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4OTpcdHZvaWQgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG9jb2wpXG4gMTkwOlx0e1xuIDE5MTpcdFx0Y29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCAqaXBwcm90O1xuIDE5MjpcdFx0aW50IHJhdywgcmV0O1xuIDE5MzpcdFxuIDE5NDpcdHJlc3VibWl0OlxuIDE5NTpcdFx0cmF3ID0gcmF3X2xvY2FsX2RlbGl2ZXIoc2tiLCBwcm90b2NvbCk7XG4gMTk2Olx0XG4gMTk3Olx0XHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9wcm90b3NbcHJvdG9jb2xdKTtcbiAxOTg6XHRcdGlmIChpcHByb3QpIHtcbiAxOTk6XHRcdFx0aWYgKCFpcHByb3QtXHUwMDNlbm9fcG9saWN5KSB7XG4gMjAwOlx0XHRcdFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiAyMDE6XHRcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLFxuIDIwMjpcdFx0XHRcdFx0XHRcdCBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1kpO1xuIDIwMzpcdFx0XHRcdFx0cmV0dXJuO1xuIDIwNDpcdFx0XHRcdH1cbiAyMDU6XHRcdFx0XHRuZl9yZXNldF9jdChza2IpO1xuIDIwNjpcdFx0XHR9XG4gMjA3Olx0XHRcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXHUwMDNlaGFuZGxlciwgdGNwX3Y0X3JjdiwgdWRwX3JjdixcbiAyMDg6XHRcdFx0XHRcdCAgICAgIHNrYik7XG4gMjA5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAyMTA6XHRcdFx0XHRwcm90b2NvbCA9IC1yZXQ7XG4gMjExOlx0XHRcdFx0Z290byByZXN1Ym1pdDtcbiAyMTI6XHRcdFx0fVxuIDIxMzpcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xuIDIxNDpcdFx0fSBlbHNlIHtcbiAyMTU6XHRcdFx0aWYgKCFyYXcpIHtcbiAyMTY6XHRcdFx0XHRpZiAoeGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gMjE3Olx0XHRcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOVU5LTk9XTlBST1RPUyk7XG4gMjE4Olx0XHRcdFx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCxcbiAyMTk6XHRcdFx0XHRcdFx0ICBJQ01QX1BST1RfVU5SRUFDSCwgMCk7XG4gMjIwOlx0XHRcdFx0fVxuIDIyMTpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfTk9QUk9UTyk7XG4gMjIyOlx0XHRcdH0gZWxzZSB7XG4gMjIzOlx0XHRcdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcbiAyMjQ6XHRcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIDIyNTpcdFx0XHR9XG4gMjI2Olx0XHR9XG4gMjI3Olx0fVxuIDIyODpcdFxuIDIyOTpcdHN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gMjMwOlx0e1xuIDIzMTpcdFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbiAyMzI6XHRcdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcbiAyMzM6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSk7XG4gMjM0Olx0XHRcdHJldHVybiAwO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcbiAyMzg6XHRcdF9fc2tiX3B1bGwoc2tiLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgUmVzdWJtaXNzaW9uIExvZ2ljKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlciBpbiBteSBoZWFkLiBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGlzIHRoZSBrZXkg4oCTIGl0IGV4cGxpY2l0bHkgY2hlY2tzIGlmIGByZXQgJmx0OyAwYCBhbmQsIGlmIGl0IGlzLCBpdCByZXN1Ym1pdHMgdGhlIHBhY2tldCB3aXRoIGBwcm90b2NvbCA9IC1yZXRgLiBHb3QgaXQuIFRoYXQgbWVhbnMgdGhlIGB1ZHBfcmN2YCBmdW5jdGlvbiAqaGFzKiB0byByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSB0byBraWNrIG9mZiB0aGUgcmVzdWJtaXNzaW9uIHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyByZXNwb25zaWJsZSBmb3IgZGVsaXZlcmluZyBtdWx0aWNhc3QgVURQIHBhY2tldHMsIGFuZCBub3cgaXQgcmV0dXJucyBgLXJldGAgd2hlbiBgcmV0ICZndDsgMGAuIEhhbmcgb27igKYgYHVkcF9xdWV1ZV9yY3Zfc2tiYCAqcmV0dXJucyogYSBwb3NpdGl2ZSB2YWx1ZSB0byBzaWduYWwgcmVzdWJtaXNzaW9uISBTbywgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgdGFrZXMgdGhhdCBwb3NpdGl2ZSB2YWx1ZSBmcm9tIGB1ZHBfcXVldWVfcmN2X3NrYmAsIG5lZ2F0ZXMgaXQsIGFuZCByZXR1cm5zIHRoZSBuZWdhdGl2ZSByZXN1bHQuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyByZXN1bHRpbmcgbmVnYXRpdmUgdmFsdWUgdGhlbiBidWJibGVzIHVwIHRvIGB1ZHBfcmN2YC4gVGhpcyBlZmZlY3RpdmVseSBmbGFncyBgdWRwX3JjdmAgdG8gYWxzbyByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgdG8gdHJpZ2dlciB0aGUgcmVzdWJtaXNzaW9uIGZyb20gYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4gVGhlIHdob2xlIHN5c3RlbSBpcyB1c2luZyB0aGUgc2lnbiBvZiB0aGUgcmV0dXJuIGNvZGUgYXMgYSB0cmlnZ2VyLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgSVB2NC4gTm93LCBmb3IgSVB2NiwgSSBuZWVkIHRvIGNoZWNrIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGluIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGUgSVB2NiBwYXRoIGFsaWducyB3aXRoIHRoaXMgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9wcm90b2NvbF9kZWxpdmVyX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jPTM5OD1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICopKTtcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDItICovXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo0MDM6dm9pZCBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcixcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTQwNC1cdFx0XHQgICAgICBib29sIGhhdmVfZmluYWwpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTI0PXN0YXRpYyBpbnQgaXA2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzMtXHRza2JfY2xlYXJfZGVsaXZlcnlfdGltZShza2IpO1xubmV0L2lwdjYvaXA2X2lucHV0LmM6NTM0Olx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCAwLCBmYWxzZSk7XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgOgoKKipBbmFseXppbmcgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgZ2V0dGluZyBzaXR1YXRlZC4gJiMzNDtMZXQmIzM5O3MgcmVhZCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4mIzM0OyBKdXN0IHN0YXRpbmcgdGhlIG9idmlvdXMsIGdldHRpbmcgbXkgbWVudGFsIGdlYXJzIHR1cm5pbmcuIEkgaW1tZWRpYXRlbHkga25vdyB0aGUgY29udGV4dCBpcyBJUHY2IHByb3RvY29sIGRlbGl2ZXJ5LCBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBzb3J0IG9mIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgbWVjaGFuaXNtIGJlaW5nIGVtcGxveWVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24gYW5kIGhhbmRsaW5nIG9mIGRhdGEgc3RydWN0dXJlcywgbGlrZWx5IHJlbGF0ZWQgdG8gcm91dGluZyBvciBwYWNrZXQgcHJvY2Vzc2luZywgd2l0aGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlICYjMzQ7UkNVJiMzNDsgcGFydCBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBzdHJvbmcgZW1waGFzaXMgb24gbWluaW1pemluZyByZWFkLXNpZGUgbG9ja2luZywgYW5kIHRoYXQgd3JpdGVycyBoYXZlIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBjb29yZGluYXRlIGNoYW5nZXMgc28gYXMgbm90IHRvIGRpc3J1cHQgY29uY3VycmVudCByZWFkZXJzLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggZnVuY3Rpb24/IFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGRlbGl2ZXJlZD8gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgd2lsbCBiZSBoYW5kbGluZyB0aGUgZGlzcGF0Y2ggb2YgaW5jb21pbmcgSVB2NiBwYWNrZXRzIHRvIHRoZWlyIGFwcHJvcHJpYXRlIHVwcGVyLWxheWVyIHByb3RvY29scy4gVGltZSB0byByZWFkIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMzpcdHZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXG4gNDA0Olx0XHRcdFx0ICAgICAgYm9vbCBoYXZlX2ZpbmFsKVxuIDQwNTpcdHtcbiA0MDY6XHRcdGludCBleHRoZHJfY250ID0gSVA2Q0Ioc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSVA2U0tCX0hPUEJZSE9QID8gMSA6IDA7XG4gNDA3Olx0XHRjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmlwcHJvdDtcbiA0MDg6XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4gNDA5Olx0XHR1bnNpZ25lZCBpbnQgbmhvZmY7XG4gNDEwOlx0XHRTS0JfRFIocmVhc29uKTtcbiA0MTE6XHRcdGJvb2wgcmF3O1xuIDQxMjpcdFxuIDQxMzpcdFx0LypcbiA0MTQ6XHRcdCAqXHRQYXJzZSBleHRlbnNpb24gaGVhZGVyc1xuIDQxNTpcdFx0ICovXG4gNDE2Olx0XG4gNDE3Olx0cmVzdWJtaXQ6XG4gNDE4Olx0XHRpZGV2ID0gaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSk7XG4gNDE5Olx0XHRuaG9mZiA9IElQNkNCKHNrYiktXHUwMDNlbmhvZmY7XG4gNDIwOlx0XHRpZiAoIWhhdmVfZmluYWwpIHtcbiA0MjE6XHRcdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKSlcbiA0MjI6XHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4gNDIzOlx0XHRcdG5leHRoZHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKVtuaG9mZl07XG4gNDI0Olx0XHR9XG4gNDI1Olx0XG4gNDI2Olx0cmVzdWJtaXRfZmluYWw6XG4gNDI3Olx0XHRyYXcgPSByYXc2X2xvY2FsX2RlbGl2ZXIoc2tiLCBuZXh0aGRyKTtcbiA0Mjg6XHRcdGlwcHJvdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbbmV4dGhkcl0pO1xuIDQyOTpcdFx0aWYgKGlwcHJvdCkge1xuIDQzMDpcdFx0XHRpbnQgcmV0O1xuIDQzMTpcdFxuIDQzMjpcdFx0XHRpZiAoaGF2ZV9maW5hbCkge1xuIDQzMzpcdFx0XHRcdGlmICghKGlwcHJvdC1cdTAwM2VmbGFncyBcdTAwMjYgSU5FVDZfUFJPVE9fRklOQUwpKSB7XG4gNDM0Olx0XHRcdFx0XHQvKiBPbmNlIHdlJiMzOTt2ZSBzZWVuIGEgZmluYWwgcHJvdG9jb2wgZG9uJiMzOTt0XG4gNDM1Olx0XHRcdFx0XHQgKiBhbGxvdyBlbmNhcHN1bGF0aW9uIG9uIGFueSBub24tZmluYWxcbiA0MzY6XHRcdFx0XHRcdCAqIG9uZXMuIFRoaXMgYWxsb3dzIGZvbyBpbiBVRFAgZW5jYXBzdWxhdGlvblxuIDQzNzpcdFx0XHRcdFx0ICogdG8gd29yay5cbiA0Mzg6XHRcdFx0XHRcdCAqL1xuIDQzOTpcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ0MDpcdFx0XHRcdH1cbiA0NDE6XHRcdFx0fSBlbHNlIGlmIChpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XG4gNDQyOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjtcbiA0NDM6XHRcdFx0XHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcbiA0NDQ6XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDQ0NTpcdFxuIDQ0NjpcdFx0XHRcdC8qIE9ubHkgZG8gdGhpcyBvbmNlIGZvciBmaXJzdCBmaW5hbCBwcm90b2NvbCAqL1xuIDQ0NzpcdFx0XHRcdGhhdmVfZmluYWwgPSB0cnVlO1xuIDQ0ODpcdFxuIDQ0OTpcdFxuIDQ1MDpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxuIDQ1MTpcdFx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuIDQ1MjpcdFx0XHRcdGhkciA9IGlwdjZfaGRyKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBmdW5jdGlvbiBjYWxsOyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzcGVjaWZpYyByb2xlLiBHaXZlbiB0aGUgJiMzNDtyY3UmIzM0OyBzdWZmaXgsIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgb3BlcmF0aW5nIHVuZGVyIGEgUmVhZC1Db3B5LVVwZGF0ZSBwYXJhZGlnbS4gVGhlcmVmb3JlLCBpdCBpcyBpbXBvcnRhbnQgZm9yIG1lIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSVB2NiBwcm90b2NvbCYjMzk7cyByZWNlaXZlIHBhdGgsIGFuZCBtb3JlIHBhcnRpY3VsYXJseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJDVSBtZWNoYW5pc20gdG8gZW5zdXJlIHNhZmUgY29uY3VycmVudCBhY2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiByZWNlaXZpbmcgYW5kIHByb2Nlc3NpbmcgSVB2NiBwYWNrZXRzLiBJIGV4cGVjdCB0byBzZWUgY2FyZWZ1bCBoYW5kbGluZyBvZiBwb2ludGVycyBhbmQgbGlrZWx5IHNvbWUgdXNlIG9mIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIHRvIHByb3RlY3QgY3JpdGljYWwgc2VjdGlvbnMsIG9yIHBvc3NpYmx5IHRoZSB1c2FnZSBvZiBzcGVjaWZpYyBSQ1UgcHJpbWl0aXZlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgZGVjaWRlcyB3aGljaCBwcm90b2NvbCBoYW5kbGVyIHRvIGludm9rZSwgYW5kIGhvdyBpdCBzYWZlbHkgdHJhbnNmZXJzIGRhdGEgdG8gdGhhdCBoYW5kbGVyLiBUaGUgbnVhbmNlcyBvZiBpdHMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbG9jayBjb250ZW50aW9uIGlzc3VlcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgaW4gYSBoaWdoLXRocm91Z2hwdXQgSVB2NiBlbnZpcm9ubWVudC4gS25vd2luZyB3aGVyZSBwYWNrZXRzIGFyZSBzYWZlbHkgcHJvY2Vzc2VkIHVzaW5nIHRoaXMgcGF0dGVybiB3aWxsIGJlIHVzZWZ1bCBmb3Igc2VjdXJpdHksIGVzcGVjaWFsbHkuIEkgd29uZGVyIGlmIGl0IHN1cHBvcnRzIGFueSBleHRlbnNpb25zIG9yIHNwZWNpYWwgZmVhdHVyZXMgcmVsYXRlZCB0byBSQ1UmIzM5O3MgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcz8gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MzpcdFxuIDQ1NDpcdFx0XHRcdC8qIHNrYi1cdTAwM2VkZXYgcGFzc2VkIG1heSBiZSBtYXN0ZXIgZGV2IGZvciB2cmZzLiAqL1xuIDQ1NTpcdFx0XHRcdGlmIChzZGlmKSB7XG4gNDU2Olx0XHRcdFx0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHNkaWYpO1xuIDQ1NzpcdFx0XHRcdFx0aWYgKCFkZXYpXG4gNDU4Olx0XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0NTk6XHRcdFx0XHR9IGVsc2Uge1xuIDQ2MDpcdFx0XHRcdFx0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbiA0NjE6XHRcdFx0XHR9XG4gNDYyOlx0XG4gNDYzOlx0XHRcdFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2aGRyLVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbiA0NjQ6XHRcdFx0XHQgICAgIWlwdjZfY2hrX21jYXN0X2FkZHIoZGV2LCBcdTAwMjZoZHItXHUwMDNlZGFkZHIsXG4gNDY1Olx0XHRcdFx0XHRcdFx0IFx1MDAyNmhkci1cdTAwM2VzYWRkcikgXHUwMDI2XHUwMDI2XG4gNDY2Olx0XHRcdFx0ICAgICFpcHY2X2lzX21sZChza2IsIG5leHRoZHIsIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSkpIHtcbiA0Njc6XHRcdFx0XHRcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkFERFJFUlJPUlMpO1xuIDQ2ODpcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ2OTpcdFx0XHRcdH1cbiA0NzA6XHRcdFx0fVxuIDQ3MTpcdFx0XHRpZiAoIShpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX05PUE9MSUNZKSkge1xuIDQ3MjpcdFx0XHRcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gNDczOlx0XHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgWEZSTV9QT0xJQ1kpO1xuIDQ3NDpcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ3NTpcdFx0XHRcdH1cbiA0NzY6XHRcdFx0XHRuZl9yZXNldF9jdChza2IpO1xuIDQ3NzpcdFx0XHR9XG4gNDc4Olx0XG4gNDc5Olx0XHRcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXHUwMDNlaGFuZGxlciwgdGNwX3Y2X3JjdiwgdWRwdjZfcmN2LFxuIDQ4MDpcdFx0XHRcdFx0ICAgICAgc2tiKTtcbiA0ODE6XHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuIDQ4MjpcdFx0XHRcdGlmIChpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XG4gNDgzOlx0XHRcdFx0XHQvKiBOb3QgYW4gZXh0ZW5zaW9uIGhlYWRlciwgbW9zdCBsaWtlbHkgVURQXG4gNDg0Olx0XHRcdFx0XHQgKiBlbmNhcHN1bGF0aW9uLiBVc2UgcmV0dXJuIHZhbHVlIGFzIG5leHRoZHJcbiA0ODU6XHRcdFx0XHRcdCAqIHByb3RvY29sIG5vdCBuaG9mZiAod2hpY2ggcHJlc3VtYWJseSBpc1xuIDQ4NjpcdFx0XHRcdFx0ICogbm90IHNldCBieSBoYW5kbGVyKS5cbiA0ODc6XHRcdFx0XHRcdCAqL1xuIDQ4ODpcdFx0XHRcdFx0bmV4dGhkciA9IHJldDtcbiA0ODk6XHRcdFx0XHRcdGdvdG8gcmVzdWJtaXRfZmluYWw7XG4gNDkwOlx0XHRcdFx0fSBlbHNlIHtcbiA0OTE6XHRcdFx0XHRcdGlmICh1bmxpa2VseShleHRoZHJfY250JiM0MzsmIzQzOyBcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSkge1xuIDQ5MjpcdFx0XHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBWNl9UT09fTUFOWV9FWFRIRFJTKTtcbiA0OTM6XHRcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ5NDpcdFx0XHRcdFx0fVxuIDQ5NTpcdFx0XHRcdFx0Z290byByZXN1Ym1pdDtcbiA0OTY6XHRcdFx0XHR9XG4gNDk3Olx0XHRcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcbiA0OTg6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcbiA0OTk6XHRcdFx0fVxuIDUwMDpcdFx0fSBlbHNlIHtcbiA1MDE6XHRcdFx0aWYgKCFyYXcpIHtcbiA1MDI6XHRcdFx0XHRpZiAoeGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBNdWx0aWNhc3QgUGFja2V0IFJlc3VibWlzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQdjYgY29kZSBhbmQgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy4gSSBzZWUgdGhhdCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyB0aGUga2V5IGZ1bmN0aW9uOyBpdCBjaGVja3MgaWYgdGhlIHJldHVybiB2YWx1ZSwgYHJldGAsIGZyb20gYSBwcmV2aW91cyBwcm9jZXNzaW5nIHN0ZXAgaXMgZ3JlYXRlciB0aGFuIHplcm8uIElmIGl0IGlzLCBpdCByZXN1Ym1pdHMgdGhlIHBhY2tldCwgdXNpbmcgYHJldGAgYXMgdGhlIG5leHQgaGVhZGVyIHZhbHVlLiBUaGF0JiMzOTtzIHRoZSB0cmlnZ2VyLiBTbywgdG8gbWFrZSB0aGlzIHdvcmssIGB1ZHB2Nl9yY3ZgIG5lZWRzIHRvIHJldHVybiBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpbmRpY2F0aW5nIHRoYXQgcmVzdWJtaXNzaW9uIGlzIG5lY2Vzc2FyeS4KCk5vdyBJJiMzOTttIGZvY3VzaW5nIG9uIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIHdpdGhpbiBgbmV0L2lwdjYvdWRwLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0IGNhbGxzIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYCwgYW5kIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCByZXR1cm5zIHRoYXQgdmFsdWUgdG8gdGhlIGNhbGxlci4gTG9va2luZyBhdCBob3cgYHVkcHY2X3JjdmAgaXMgaW52b2tlZCwgaXQgbWFrZXMgc2Vuc2U7IGl0IHdpbGwgcmV0dXJuIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCB0aGUgb3V0ZXIgbGF5ZXIgd2lsbCB0cmlnZ2VyIHRoZSByZS1zdWJtaXNzaW9uIHZpYSBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4KClRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZml4aW5nIGEgYnVnLiBFbmNhcHN1bGF0ZWQgbXVsdGljYXN0IHBhY2tldHMgd2VyZSBnZXR0aW5nIGRyb3BwZWQsIGJ1dCBub3cgdGhleSYjMzk7bGwgYmUgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4LiBUaGUgdGVzdCBzZXR1cCB1c2VzIEZPVSBhbmQgR1JFVEFQLCBhcyBleHBlY3RlZC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gdGVzdCB0aGlzOiBgTkVUX0ZPVWAsIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBtaWdodCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlbWVudHMgZm9yIGBncmV0YXBgIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgTkVUX0lQR1JFX0JST0FEQ0FTVGAsIGJ1dCBmb3Igc3VyZSBJIG5lZWQgYElQVjZfR1JFYC4gTGV0IG1lIGdsYW5jZSBhdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2AgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfSVBHUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc9ODg9Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjg5OkNPTkZJR19ORVRfSVBHUkU9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo5MDpDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctOTEtQ09ORklHX05FVF9JUElQPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgSVB2NiBHUkUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIElQdjYgR1JFIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgYENPTkZJR19JUFY2X0dSRWAgYWN0dWFsbHkgcHJlc2VudCBhbmQgYXZhaWxhYmxlIHdpdGhpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQ/JiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3RvcmVkLiBUaGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlc2Ugc29ydHMgb2YgY2hlY2tzIGlzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbiBpcyBleHBsaWNpdGx5IHN0YXRlZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfR1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTQwPUNPTkZJR19JUFY2PXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDE6Q09ORklHX0lQVjZfR1JFPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDItQ09ORklHX0lQVjZfSUxBPW1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIENPTkZJR19ORVRfRk9VIGluIHRoZSBSaWdodCBQbGFjZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIFRpbWUgdG8gbWFrZSBzdXJlIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHdoZXJlIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRfRk9VYCBpcyBwcmVzZW50LCBidXQgbW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCByZXNpZGVzIHdpdGhpbiB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGl0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBmb3IgbmV0d29yayBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIHRoZSBwYXRoIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBkaXZlIGludG8gYW55IGFjdHVhbCB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHJlbGF0ZWQgdG8gaXQuICBTbywgbGV0IG1lIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24gYW5kIGhhdmUgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX0ZPVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjg3OkNPTkZJR19ORVRfRk9VPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6ODg6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTg5LUNPTkZJR19ORVRfSVBHUkU9bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRk9VIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGFyZSBgTkVUX0ZPVWAsIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIEdvdCBpdC4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gVGhvc2UgYXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhcyB0aGF0JiMzOTtzIGEga2V5IHBhcnQgb2YgVURQIHByb2Nlc3NpbmcsIGJ1dCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgaXQgaXNuJiMzOTt0IHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gQW5kIHNpbmNlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGlzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZm9yIG11bHRpY2FzdCBhbmQgYnJvYWRjYXN0IFVEUCBwYWNrZXRzLCB0aGF0JiMzOTtzIHdoYXQgSSB3aWxsIHVzZS4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgRk9VLWVuY2Fwc3VsYXRlZCBtdWx0aWNhc3QgcGFja2V0cyB3ZXJlIGluY29ycmVjdGx5IGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXR1cm5pbmcgYSByZXN1Ym1pdCByZXF1ZXN0LCBwb3NpdGl2ZSBmb3IgSVB2NiBhbmQgbmVnYXRpdmUgZm9yIElQdjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgd2UgZnV6eiB0aGlzIGFyZWEgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlc2UgbXVsdGljYXN0IHBhY2tldHMgYXJlIHJlc3VibWl0dGVkLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB3aGlsZSBJIGhhdmUgdGhlIGVzc2VudGlhbHMsIGl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IG5vIG90aGVyLCBsZXNzIG9idmlvdXMgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIGBORVRfSVBHUkVfREVNVVhgIGlzIHVzdWFsbHkgYXV0b21hdGljYWxseSBzZWxlY3RlZCB3aXRoIGBORVRfSVBHUkVgIG9yIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMjE9Y29uZmlnIE5FVF9GT1Vcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cbm5ldC9pcHY0L0tjb25maWc6MzMwOmNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcbm5ldC9pcHY0L0tjb25maWctMzMxLVx0Ym9vbCBcJiMzNDtJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE3OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGludGVybmFscywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsOgoKKipEZWx2aW5nIGludG8gSVB2NCBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4gYW5kIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIElQdjQgdHVubmVsIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBwbGFjZSB0byBzdGFydCBzZWVtcyB0byBiZSBgbmV0L2lwdjQvS2NvbmZpZ2AsIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4gVGhpcyBzdWdnZXN0cyBJJiMzOTttIGFmdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUC1pbi1JUCB0dW5uZWxzLCBsaWtlbHkgdGhlIGBmb3VgIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGNvbmZpZyBvcHRpb24gYW5kIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyB0byBzZWUgaG93IHRoZSBvcHRpb24gZW5hYmxlcyBvciBkaXNhYmxlcyBjZXJ0YWluIGNvZGUgcGF0aHMsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgKG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGZlYXR1cmVzKSwgYW5kIHdoYXQga2luZCBvZiBpbXBhY3QgaXRzIGFjdGl2YXRpb24gaGFzIG9uIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuYWJsaW5nIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgSVB2NCB0dW5uZWxzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBjcnVjaWFsLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW5zaWdodCBpbnRvIGhvdyBgTkVUX0ZPVV9JUF9UVU5ORUxTYCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGVzZSB0dW5uZWwgbWVjaGFuaXNtcywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUCB0dW5uZWxpbmcgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjE6XHRjb25maWcgTkVUX0ZPVVxuIDMyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IEZvbyAoSVAgcHJvdG9jb2xzKSBvdmVyIFVEUFwmIzM0O1xuIDMyMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMzI0Olx0XHRoZWxwXG4gMzI1Olx0XHQgIEZvbyBvdmVyIFVEUCBhbGxvd3MgYW55IElQIHByb3RvY29sIHRvIGJlIGRpcmVjdGx5IGVuY2Fwc3VsYXRlZFxuIDMyNjpcdFx0ICBvdmVyIFVEUCBpbmNsdWRlIHR1bm5lbHMgKElQSVAsIEdSRSwgU0lUKS4gQnkgZW5jYXBzdWxhdGluZyBpbiBVRFBcbiAzMjc6XHRcdCAgbmV0d29yayBtZWNoYW5pc21zIGFuZCBvcHRpbWl6YXRpb25zIGZvciBVRFAgKHN1Y2ggYXMgRUNNUFxuIDMyODpcdFx0ICBhbmQgUlNTKSBjYW4gYmUgbGV2ZXJhZ2VkIHRvIHByb3ZpZGUgYmV0dGVyIHNlcnZpY2UuXG4gMzI5Olx0XG4gMzMwOlx0Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xuIDMzMTpcdFx0Ym9vbCBcJiMzNDtJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1wmIzM0O1xuIDMzMjpcdFx0ZGVwZW5kcyBvbiBORVRfSVBJUCB8fCBORVRfSVBHUkUgfHwgSVBWNl9TSVRcbiAzMzM6XHRcdHNlbGVjdCBORVRfRk9VXG4gMzM0Olx0XHRoZWxwXG4gMzM1Olx0XHQgIEFsbG93IGNvbmZpZ3VyYXRpb24gb2YgRk9VIG9yIEdVRSBlbmNhcHN1bGF0aW9uIGZvciBJUCB0dW5uZWxzLlxuIDMzNjpcdFx0ICBXaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgSVAgdHVubmVscyBjYW4gYmUgY29uZmlndXJlZCB0byB1c2VcbiAzMzc6XHRcdCAgRk9VIG9yIEdVRSBlbmNhcHN1bGF0aW9uLlxuIDMzODpcdFxuIDMzOTpcdGNvbmZpZyBJTkVUX0FIXG4gMzQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gYE5FVF9GT1VfSVBfVFVOTkVMU2AgKnJlcXVpcmVzKiBlaXRoZXIgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIG9yIGBJUFY2X1NJVGAgdG8gYmUgZW5hYmxlZC4gTWFrZXMgc2Vuc2UsIGl0IG5lZWRzIHNvbWUgdW5kZXJseWluZyBJUCB0dW5uZWwgbWVjaGFuaXNtLiBBbmQsIGlmIEkgZW5hYmxlIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBpdCBhdXRvbWF0aWNhbGx5ICpzZWxlY3RzKiBgTkVUX0ZPVWAuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQ7IEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgbWFudWFsbHkgZW5hYmxpbmcgYE5FVF9GT1VgIHNlcGFyYXRlbHkgaWYgSSYjMzk7bSB1c2luZyB0aG9zZSB0dW5uZWxzLgoKVGhlcmVmb3JlLCB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byBnZXR0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZSB0byBqdXN0IGVuYWJsZSBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYE5FVF9JUEdSRWAsIGFuZCBgSVBWNl9HUkVgLiBUaGF0IHNob3VsZCBzYXRpc2Z5IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zLgoKTm93LCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYE5FVF9JUEdSRWAgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGZ1cnRoZXIgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0lQR1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE3OS1cbm5ldC9pcHY0L0tjb25maWc6MTgwOmNvbmZpZyBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWctMTgxLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSBkZW11bHRpcGxleGVyXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIwNi1cbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYE5FVF9JUEdSRWAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFzIGlmIGl0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBleHBlcnQgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYG5ldC9pcHY0L0tjb25maWdgLiBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgTkVUX0lQR1JFYCBvcHRpb24sIG5hdHVyYWxseS4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgY29uZmlnIHdpbGwgZGVmaW5lIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGdlbmVyaWMgcm91dGluZyBlbmNhcHN1bGF0aW9uIChHUkUpIHN1cHBvcnQgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBHaXZlbiBteSBmYW1pbGlhcml0eSwgSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYmxvY2ssIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSB0aG9yb3VnaCByZXZpZXcgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGdvdGNoYXMgb3IgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXMqKjogV2hhdCBvdGhlciBmZWF0dXJlcyAqbXVzdCogYmUgZW5hYmxlZCBvciBhcmUgbG9naWNhbGx5IHJlbGF0ZWQgZm9yIGBORVRfSVBHUkVgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBpbmRpcmVjdCBkZXBlbmRlbmNpZXMsIHdoZXJlIGVuYWJsaW5nIEdSRSB1bmxvY2tzIGFub3RoZXIgY2FwYWJpbGl0eT8KKiAgICoqRGVmYXVsdCBCZWhhdmlvcioqOiBXaGF0JiMzOTtzIHRoZSBkZWZhdWx0IHN0YXRlIG9mIGBORVRfSVBHUkVgPyBJcyBpdCB0eXBpY2FsbHkgY29tcGlsZWQgaW4gYXMgYSBtb2R1bGUsIG9yIGlzIGl0IGRpcmVjdGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgYnkgZGVmYXVsdD8gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBwcm92aWRlcyBhIHN0cm9uZyBoaW50IGFib3V0IGhvdyBjcml0aWNhbCB0aGUgbWFpbnRhaW5lcnMgY29uc2lkZXIgdGhpcyBmdW5jdGlvbmFsaXR5LgoqICAgKipIZWxwIFRleHQqKjogVGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcHRpb24gd2lsbCBiZSBpbnZhbHVhYmxlLiBJdCBzaG91bGQgc3VjY2luY3RseSBleHBsYWluIHRoZSBwdXJwb3NlIG9mIEdSRSwgaXRzIHVzZXMgKHR1bm5lbGluZywgZXRjLiksIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBnZXQgYSBmZWVsIGZvciBiZXN0IHByYWN0aWNlcyBvciBhbnkgY2F1dGlvbnMuCiogICAqKlRyaWdnZXJzKio6IEkgd291bGQgZXhwZWN0IHRvIHNlZSB0cmlnZ2VycyBoZXJlIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHksIGJhc2VkIG9uIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgd2lsbCBlbmFibGluZyBHUkUgdHJpZ2dlciBhIGNvbmZpZ3VyYXRpb24gZm9yIElQc2VjLCBhcyB0aGVzZSBvZnRlbiBnbyBoYW5kLWluLWhhbmQ/IENvbnZlcnNlbHksIHdpbGwgdGhlcmUgYmUgZGlzYWJsaW5nIHRyaWdnZXJzIGlmIGNlcnRhaW4gZmVhdHVyZXMgYXJlIGluY29tcGF0aWJsZT8KKiAgICoqQ29udGV4dCoqOiBBcmUgdGhlcmUgYW55IG1lbnRpb25zIG9mIHNwZWNpZmljIEdSRSBmZWF0dXJlcywgbGlrZSBHUkUgb3ZlciBJUCwgb3IgR1JFIG92ZXIgSVB2Nj8gSWYgdGhpcyBpcyBhbiBvcHRpb24gdGhhdCBleHRlbmRzIHRvIG90aGVyIHRlY2hub2xvZ2llcywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIHdhbnQgdG8gZmluZC4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG9vLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gSSBleHBlY3QgdG8gZmluZCBgTkVUX0lQR1JFYCBpbiBhIGxvZ2ljYWwgcGxhY2UsIHByb2JhYmx5IG5lYXIgb3RoZXIgdHVubmVsaW5nIG9yIGVuY2Fwc3VsYXRpb24gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3Mgb2Z0ZW4gaGVscGZ1bCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgZGlmZmVyZW50IG9wdGlvbnMgYXJlIGludGVydHdpbmVkLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyBmb3IgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIGNvbmZpZ3VyYXRpb24ga25vYiBjb250cm9scywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY0IG5ldHdvcmtpbmcgd2l0aGluIHRoZSBrZXJuZWwuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSBxdWljayByZXZpZXcsIGJ1dCBhcyBhbHdheXMsIHRob3JvdWdobmVzcyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkyOlx0Y29uZmlnIE5FVF9JUEdSRVxuIDE5MzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbiAxOTQ6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXG4gMTk1Olx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDE5NjpcdFx0aGVscFxuIDE5NzpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE5ODpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMTk5Olx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgcGFydGljdWxhciB0dW5uZWxpbmcgZHJpdmVyIGltcGxlbWVudHNcbiAyMDA6XHRcdCAgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgYW5kIGF0IHRoaXMgdGltZSBhbGxvd3NcbiAyMDE6XHRcdCAgZW5jYXBzdWxhdGluZyBvZiBJUHY0IG9yIElQdjYgb3ZlciBleGlzdGluZyBJUHY0IGluZnJhc3RydWN0dXJlLlxuIDIwMjpcdFx0ICBUaGlzIGRyaXZlciBpcyB1c2VmdWwgaWYgdGhlIG90aGVyIGVuZHBvaW50IGlzIGEgQ2lzY28gcm91dGVyOiBDaXNjb1xuIDIwMzpcdFx0ICBsaWtlcyBHUkUgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgb3RoZXIgTGludXggdHVubmVsaW5nIGRyaXZlciAoXCYjMzQ7SVBcbiAyMDQ6XHRcdCAgdHVubmVsaW5nXCYjMzQ7IGFib3ZlKS4gSW4gYWRkaXRpb24sIEdSRSBhbGxvd3MgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uXG4gMjA1Olx0XHQgIHRocm91Z2ggdGhlIHR1bm5lbC5cbiAyMDY6XHRcbiAyMDc6XHRjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuIDIwODpcdFx0Ym9vbCBcJiMzNDtJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXCYjMzQ7XG4gMjA5Olx0XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcdTAwMjZcdTAwMjYgTkVUX0lQR1JFXG4gMjEwOlx0XHRoZWxwXG4gMjExOlx0XHQgIE9uZSBhcHBsaWNhdGlvbiBvZiBHUkUvSVAgaXMgdG8gY29uc3RydWN0IGEgYnJvYWRjYXN0IFdBTiAoV2lkZSBBcmVhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBOZWNlc3NpdHkgb2YgYE5FVF9JUEdSRV9CUk9BRENBU1RgIHdpdGggYGdyZXRhcGAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtdWx0aWNhc3QgcmVkaXN0cmlidXRpb24gdGhyb3VnaCBhIHR1bm5lbCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZywgJiMzNDtBaGEhIGBORVRfSVBHUkVfQlJPQURDQVNUYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkgaGVyZS4mIzM0OyBUaGF0JiMzOTtzIHR5cGljYWxseSB0aGUgZmxhZyB5b3UgcmVhY2ggZm9yLiBCdXQgdGhlbiwgYSByZWQgZmxhZyBwb3BzIHVwLiBUaGlzIHRlc3TigKYgaXQmIzM5O3MgdXNpbmcgYGdyZXRhcGAuIGBncmV0YXBgIGlzIGEgbGF5ZXIgMiB0dW5uZWwsIHJpZ2h0PyBBbmQgbm93IEkmIzM5O20gdGhpbmtpbmcsICpkb2VzKiBpdCAqYWN0dWFsbHkqIG5lZWQgYE5FVF9JUEdSRV9CUk9BRENBU1RgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGRldGVybWluZSBpZiB0aGUgYXNzdW1wdGlvbnMgSSYjMzk7bSBtYWtpbmcgYXJlIGNvcnJlY3QuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBncmV0YXBgIGl0c2VsZiwgYmVjYXVzZSB3aGV0aGVyIGl0JiMzOTtzIG5lZWRlZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBvZiB0aGF0IHR1bm5lbCB0eXBlLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmUtZXZhbHVhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyZXRhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz0xNjg5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxNjkwOlx0LmtpbmRcdFx0PSBcJiMzNDtncmV0YXBcJiMzNDssXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjkxLVx0Lm1heHR5cGVcdD0gSUZMQV9HUkVfTUFYLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE3MDQ9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGVyc3Bhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE3MTgtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzE5OnN0cnVjdCBuZXRfZGV2aWNlICpncmV0YXBfZmJfZGV2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzIwLVx0XHRcdFx0XHR1OCBuYW1lX2Fzc2lnbl90eXBlKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE3NjMtfVxubmV0L2lwdjQvaXBfZ3JlLmM6MTc2NDpFWFBPUlRfU1lNQk9MX0dQTChncmV0YXBfZmJfZGV2X2NyZWF0ZSk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNzY1LVxubmV0L2lwdjQvaXBfZ3JlLmM9MTc2Nj1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfdGFwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY0L2lwX2dyZS5jLTE3Njcte1xubmV0L2lwdjQvaXBfZ3JlLmM6MTc2ODpcdHJldHVybiBpcF90dW5uZWxfaW5pdF9uZXQobmV0LCBncmVfdGFwX25ldF9pZCwgXHUwMDI2aXBncmVfdGFwX29wcywgXCYjMzQ7Z3JldGFwMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNzY5LX1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xODcxPU1PRFVMRV9BTElBU19SVE5MX0xJTksoXCYjMzQ7Z3JlXCYjMzQ7KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE4NzI6TU9EVUxFX0FMSUFTX1JUTkxfTElOSyhcJiMzNDtncmV0YXBcJiMzNDspO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTg3My1NT0RVTEVfQUxJQVNfUlROTF9MSU5LKFwmIzM0O2Vyc3BhblwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYz0xODc0PU1PRFVMRV9BTElBU19ORVRERVYoXCYjMzQ7Z3JlMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYzoxODc1Ok1PRFVMRV9BTElBU19ORVRERVYoXCYjMzQ7Z3JldGFwMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xODc2LU1PRFVMRV9BTElBU19ORVRERVYoXCYjMzQ7ZXJzcGFuMFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUEdSRSBCcm9hZGNhc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGdyZXRhcGAsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGBpcF9ncmUuY2AgbW9kdWxlLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaGFuZGxlZC4gSXQmIzM5O3MgYSBrZXkgc2V0dGluZywgYW5kIEkgbmVlZCBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBkaWN0YXRlIHRoZSBiZWhhdmlvciBvZiBHUkUgYnJvYWRjYXN0IGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy00NDUtXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy00NDctXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIpKSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9OTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBpcGdyZV9oZWFkZXJfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTkzNS1cbm5ldC9pcHY0L2lwX2dyZS5jOjkzNjojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTkzNy1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTk4Mi1cdC5uZG9fdW5pbml0XHRcdD0gaXBfdHVubmVsX3VuaW5pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjk4MzojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTk4NC1cdC5uZG9fb3Blblx0XHQ9IGlwZ3JlX29wZW4sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTAzNj1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1MC1cdGlmIChpcGgtXHUwMDNlZGFkZHIgXHUwMDI2XHUwMDI2ICF0dW5uZWwtXHUwMDNlY29sbGVjdF9tZCkge1xubmV0L2lwdjQvaXBfZ3JlLmM6MTA1MTojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTItXHRcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcGgtXHUwMDNlZGFkZHIpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqR1JFIE11bHRpY2FzdCBhbmQgTGF5ZXIgMiBDb25mdXNpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuIEkgYmVsaWV2ZSBpdCYjMzk7cyBlc3NlbnRpYWwgZm9yIG11bHRpY2FzdCBHUkUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBNeSBndXQgc2F5cyB5ZXMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBncmV0YXBgIG5vdywgYW5kIHRoYXQmIzM5O3MgYSAqbGF5ZXIgMiogY29uc3RydWN0LCBpc24mIzM5O3QgaXQ/IElmIGl0JiMzOTtzIGFjdGluZyBhcyBhIGJyaWRnZSwgZG9lcyBpdCBldmVuIHVzZSB0aGUgc3RhbmRhcmQgYGlwZ3JlX29wZW5gIGZ1bmN0aW9uIHRoYXQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGZyb20gSVAtaW4tR1JFIHR1bm5lbGluZz8gVGhpcyBzdWdnZXN0cyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsYXllciAyIHNldHVwIGFuZCB0aGUgbW9yZSBjb21tb24gSVAgR1JFLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBmaW5kIHRoZSBrZXkgaW4gYGlwZ3JlX3RhcF9zZXR1cGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRhcCBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgY29kZSBhbmQgY29uZmlybSBob3cgbGF5ZXIgMiBHUkUgaW50ZXJmYWNlcyBhcmUgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBwYXRod2F5IHRvIHJlc29sdmUgdGhpcyB1bmNlcnRhaW50eSBhbmQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBncmVfdGFwX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODItXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzgzOnN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4NC17XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTY4OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE2OTMtXHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsKSxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2OTQ6XHQuc2V0dXBcdFx0PSBpcGdyZV90YXBfc2V0dXAsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk1LVx0LnZhbGlkYXRlXHQ9IGlwZ3JlX3RhcF92YWxpZGF0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgaXBncmVfdGFwX3NldHVwYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgaXBncmVfdGFwX3NldHVwYCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtyZSBjb25maWd1cmluZyBlaXRoZXIgYW4gSVAtR1JFIHR1bm5lbCBvciBwZXJoYXBzIHRoZSB2aXJ0dWFsIFRBUCBpbnRlcmZhY2UgdGhhdCBzaXRzIG9uIHRvcCBvZiBpdC4gUHJvYmFibHkgYm90aCwgaWYgdGhlIG5hbWUgaXMgYXMgaXQgc291bmRzLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgYmluZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgdHVubmVsIGFuZCB0YXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIHNldHVwLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyZmFjZSBmbGFncywgdGhlIG5ldGxpbmsgaW50ZXJhY3Rpb25zLCBhbmQgaG93IHRoZSBHUkUgaGVhZGVyIGlzIGNvbnN0cnVjdGVkLCBhbmQgaG93IGl0IGlzIGNvbm5lY3RlZCB0byBhIFRBUCBkZXZpY2UuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBldmVuIHdvcnNlLCBidWdzLiBJIGhvcGUgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYmVjYXVzZSBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCB0aGUgb3JpZ2luYWwgYXV0aG9yJiMzOTtzIGludGVudGlvbnMgd2VyZSBpbiB0aGUgc2V0IHVwIG9mIHRoZSBkZXZpY2UuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHR1bm5lbCBhbmQgdGFwIGFyZSBzZWN1cmVseSBpbnRlZ3JhdGVkLCBwYXlpbmcgYXR0ZW50aW9uIHRvIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzgzOlx0c3RhdGljIHZvaWQgaXBncmVfdGFwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xMzg0Olx0e1xuMTM4NTpcdFx0ZXRoZXJfc2V0dXAoZGV2KTtcbjEzODY6XHRcdGRldi1cdTAwM2VtYXhfbXR1ID0gMDtcbjEzODc6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHQ9IFx1MDAyNmdyZV90YXBfbmV0ZGV2X29wcztcbjEzODg6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9UWF9TS0JfU0hBUklORztcbjEzODk6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzXHR8PSBJRkZfTElWRV9BRERSX0NIQU5HRTtcbjEzOTA6XHRcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGdyZV90YXBfbmV0X2lkKTtcbjEzOTE6XHR9XG4xMzkyOlx0XG4xMzkzOlx0c3RhdGljIGludFxuMTM5NDpcdGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxuMTM5NTpcdHtcbjEzOTY6XHRcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbjEzOTc6XHRcbjEzOTg6XHRcdGlmIChpcGdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFx1MDAyNmlwZW5jYXApKSB7XG4xMzk5Olx0XHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTQwMDpcdFx0XHRpbnQgZXJyID0gaXBfdHVubmVsX2VuY2FwX3NldHVwKHQsIFx1MDAyNmlwZW5jYXApO1xuMTQwMTpcdFxuMTQwMjpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXJzOgoKKipBbmFseXppbmcgZ3JlX3RhcF9uZXRkZXZfb3BzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBncmVfdGFwX25ldGRldl9vcHNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG9wZXJhdGlvbmFsIGRldGFpbHMgb2YgdGhlIEdSRSB0YXAgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBwb2ludGVycyBkZWZpbmVkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZT8gSSBuZWVkIHRvIHJldmlldyB0aGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV0d29yayBkcml2ZXIgaGFuZGxlcyB0aGUgR1JFIHR1bm5lbCBlbmRwb2ludHMgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIEdSRSBoZWFkZXIgaXMgcHJvY2Vzc2VkLCBlbmNhcHN1bGF0ZWQgYW5kIGRlY2Fwc3VsYXRlZCBhbmQgaG93IHRoZSB0dW5uZWxpbmcgbWVjaGFuaXNtIGlzIGludGVncmF0ZWQgYXQgdGhlIG5ldHdvcmsgZGV2aWNlIGxldmVsLiBUaGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciB0aGUgY29ycmVjdCBmb3J3YXJkaW5nIG9mIHBhY2tldHMgdGhyb3VnaCB0aGUgR1JFIHR1bm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHRhcCBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gVGltZSB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgcGFja2V0IGZsb3cuLi4gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyZV90YXBfbmV0ZGV2X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jPTEzMjk9c3RhdGljIGludCBncmVfdGFwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzM3LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTMzODpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzktXHQubmRvX2luaXRcdFx0PSBncmVfdGFwX2luaXQsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM4Mz1zdGF0aWMgdm9pZCBpcGdyZV90YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzg2LVx0ZGV2LVx1MDAzZW1heF9tdHUgPSAwO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM4NzpcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHQ9IFx1MDAyNmdyZV90YXBfbmV0ZGV2X29wcztcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODgtXHRkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfVFhfU0tCX1NIQVJJTkc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgZ3JlX3RhcF9uZXRkZXZfb3BzYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFuYWx5emUgYGdyZV90YXBfbmV0ZGV2X29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBjaGFpbiBvZiBhc3NvY2lhdGlvbnMgaW4gbXkgbWluZC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgZm9yIEdSRSB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgdGhlICYjMzQ7dGFwJiMzNDsgaW50ZXJmYWNlIHZhcmlhbnQuIFRoaXMgc3VnZ2VzdHMgYSB1c2VyLXNwYWNlIGFjY2Vzc2libGUgaW50ZXJmYWNlLCBsaWtlbHkgYnJpZGdpbmcgR1JFIHRyYWZmaWMgdG8gYSBtb3JlIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IGNvbnN0cnVjdGluZyBhIGxpc3Qgb2YgdGhlIGtleSBvcGVyYXRpb25zIEkgZXhwZWN0IHRvIGZpbmQgd2l0aGluIHRoaXMgc3RydWN0dXJlOgoKKiAgICoqYG5kb19pbml0YCoqOiBIb3cgaXMgdGhpcyBpbnRlcmZhY2UgaW5pdGlhbGl6ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQ/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGFwcGxpZWQ/IEFyZSB0aGVyZSBhbnkga2VybmVsIG1vZHVsZSBkZXBlbmRlbmNpZXM/IEkgd291bGQgZXhwZWN0IHRvIHNlZSBzZXR1cCBvZiB0aGUgZGV2aWNlJiMzOTtzIHByaXZhdGUgZGF0YSwgYW5kIGFueSBuZXRsaW5rIGF0dHJpYnV0ZXMuCiogICAqKmBuZG9fb3BlbmAgYW5kIGBuZG9fc3RvcGAqKjogRXNzZW50aWFsIGZvciBicmluZ2luZyB0aGUgaW50ZXJmYWNlIHVwIGFuZCBkb3duLiBXaGF0JiMzOTtzIHRoZSBzdGF0ZSBtYW5hZ2VtZW50IGhlcmU/IEFyZSB0aGVyZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQgdG8gcHJvdGVjdCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIHdoZW4gdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcywgZS5nLiBzZXR0aW5nIHVwIGJyaWRnZSBkZXZpY2VzLgoqICAgKipgbmRvX3N0YXJ0X3htaXRgKio6IFRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBob3cgYXJlIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhyb3VnaCB0aGlzIEdSRSB0dW5uZWw/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb24gKGxpa2VseSBvcHRpb25hbCksIGFuZCByb3V0ZSBsb29rdXAvZm9yd2FyZGluZy4gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBNVFUgaGFuZGxpbmcsIG9yIGZyYWdtZW50YXRpb24/IERvZXMgdGhpcyB1dGlsaXplIHRoZSBnZW5lcmljIEdSRSBlbmNhcHN1bGF0aW9uIGNvZGUgb3IgZG9lcyB0aGlzIHBlcmZvcm0gaXQmIzM5O3Mgb3duIGVuY2Fwc3VsYXRpb24/IFdoYXQgbG9ja2luZyBpcyB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5PwoqICAgKipgbmRvX2RvX2lvY3RsYCoqOiBUaGlzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIHRhcCBpbnRlcmZhY2UuIFdoYXQgaW9jdGwgY29tbWFuZHMgYXJlIHN1cHBvcnRlZD8gU2V0dGluZyB0aGUgdHVubmVsIGVuZHBvaW50cywga2V5LCBpbnRlcmZhY2UgdHlwZSwgYnJpZGdlIHBvcnRzLCBldGMuIEkgZXhwZWN0IGEgY2FyZWZ1bCBoYW5kbGluZyBvZiB1c2VyLXNwYWNlIGRhdGEsIHdpdGggdmFsaWRhdGlvbiBhbmQgcG90ZW50aWFsbHkgZXJyb3IgaGFuZGxpbmcuCiogICAqKmBuZG9fZ2V0X3N0YXRzNjRgKio6IE9mIGNvdXJzZSwgd2UgbmVlZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLiBXaGF0IGNvdW50ZXJzIGFyZSBiZWluZyB0cmFja2VkPyBQYWNrZXRzIGluL291dCwgYnl0ZXMgaW4vb3V0LCBlcnJvcnMsIGRyb3BzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgR1JFLXNwZWNpZmljIGNvdW50ZXJzLCBsaWtlIHR1bm5lbCBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gZXJyb3JzLgoqICAgKipgbmRvX2NoYW5nZV9tdHVgKio6IEEgY3JpdGljYWwgb25lLiBNVFUgaGFuZGxpbmcgY2FuIGJlIHRyaWNreSB3aXRoIHR1bm5lbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGlzIGludGVyZmFjZSBhZGp1c3RzIHRoZSBNVFUgb2YgdGhlIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UsIGFuZCB3aGV0aGVyIGZyYWdtZW50YXRpb24gaXMgZW5hYmxlZCwgdG8gaGFuZGxlIHRoZSBhZGRpdGlvbmFsIG92ZXJoZWFkIG9mIHRoZSBHUkUgZW5jYXBzdWxhdGlvbi4gQXJlIHRoZXJlIGFueSBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIHJldHVybmVkIGhlcmU/CiogICAqKmBuZG9fdmFsaWRhdGVfYWRkcmAqKjogRXNzZW50aWFsIGZvciBwcmV2ZW50aW5nIGNvbmZpZ3VyYXRpb24gZXJyb3JzIG9yIGF0dGFja3MgdGhyb3VnaCBpbnZhbGlkIGFkZHJlc3Nlcy4gV2hhdCB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXM/CiogICAqKmBuZG9fc2V0X21hY19hZGRyZXNzYCoqOiBUaGlzIHNob3VsZCBiZSBmYWlybHkgc3RhbmRhcmQsIGJ1dCBJIHdpbGwgd2FudCB0byBzZWUgaWYgdGhpcyBkb2VzIGFueXRoaW5nIHRvIGVuc3VyZSB0aGF0IE1BQyBhZGRyZXNzZXMgYXJlIGFwcHJvcHJpYXRlbHkgcHJvcGFnYXRlZCwgb3IgaGFuZGxlZC4KKiAgICoqYG5kb19uZWlnaF9zZXR1cGAqKjogSG93IGFyZSBuZWlnaGJvcnMgaGFuZGxlZD8gQXJlIEFSUCByZXF1ZXN0cyBpbnRlcmNlcHRlZCBhbmQgbW9kaWZpZWQ/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrJiMzOTtzIG5laWdoYm9yIGRpc2NvdmVyeSBtZWNoYW5pc21zPwoqICAgKipgbmRvX3ZsYW5fcnhfYWRkX3ZpZGAgYW5kIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAqKjogQW55IFZMQU4gc3VwcG9ydD8gVGhpcyBpcyBjcnVjaWFsIGlmIHdlIGV4cGVjdCB0aGlzIEdSRSB0YXAgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGEgbGFyZ2VyIHZpcnR1YWxpemVkIG5ldHdvcmsuCiogICAqKmBuZG9fdHhfdGltZW91dGAqKjogSG93IGRvZXMgdGhlIGRyaXZlciBoYW5kbGUgdHJhbnNtaXNzaW9uIHRpbWVvdXRzPyBBcmUgdGhlcmUgYW55IHJlY292ZXJ5IG1lY2hhbmlzbXM/CgpNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiwgYW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGFuZCBtYW5hZ2VkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgd2VsbCB0aGlzIGltcGxlbWVudGF0aW9uIGhvbGRzIHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzM4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4xMzM5Olx0XHQubmRvX2luaXRcdFx0PSBncmVfdGFwX2luaXQsXG4xMzQwOlx0XHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG4xMzQxOlx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBncmVfdGFwX3htaXQsXG4xMzQyOlx0XHQubmRvX3NldF9tYWNfYWRkcmVzcyBcdD0gZXRoX21hY19hZGRyLFxuMTM0MzpcdFx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuMTM0NDpcdFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gaXBfdHVubmVsX2NoYW5nZV9tdHUsXG4xMzQ1Olx0XHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG4xMzQ2Olx0XHQubmRvX2dldF9pZmxpbmtcdFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcbjEzNDc6XHRcdC5uZG9fZmlsbF9tZXRhZGF0YV9kc3RcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxuMTM0ODpcdH07XG4xMzQ5Olx0XG4xMzUwOlx0c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjEzNTE6XHR7XG4xMzUyOlx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTM1MzpcdFxuMTM1NDpcdFx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApXG4xMzU1Olx0XHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDQ7IC8qIDQtYnl0ZSBHUkUgaGRyLiAqL1xuMTM1NjpcdFx0ZWxzZVxuMTM1NzpcdFx0XHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSA4OyAvKiA4LWJ5dGUgR1JFIGhkci4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgR1JFIE11bHRpY2FzdCBQYWNrZXQgUmVjZXB0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IEdSRSBtdWx0aWNhc3QgcGFja2V0cyBhcmUgaGFuZGxlZCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYGdyZV90YXBfbmV0ZGV2X29wc2Agc3RydWN0dXJlIGRvZXNuJiMzOTt0IGluY2x1ZGUgdGhlIGBuZG9fb3BlbmAgb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGEgYml0IG9kZCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHNob3dzdG9wcGVyLiBNeSByZWFsIGNvbmNlcm4gaXMgdGhpcyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYGdyZV9yY3ZgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGNvbmRpdGlvbmFsIHN0YXRlbWVudCBpbiBgZ3JlX3JjdmAsIGFuZCBpdCBtYWtlcyBtZSB0aGluayB0aGF0IHdpdGhvdXQgdGhhdCBjb25maWd1cmF0aW9uLCBtdWx0aWNhc3QgR1JFIHBhY2tldHMgbWlnaHQgYmUgc2lsZW50bHkgZHJvcHBlZC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4gYGdyZV9yY3ZgIGlzIGZvciBMYXllciAzIEdSRSwgYW5kIEkgYW0gbm90IGNlcnRhaW4gaWYgYGdyZXRhcGAgdXNlcyBgZ3JlX3JjdmAuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIGRhdGEgZmxvdyBiZXR3ZWVuIGBncmV0YXBgIGFuZCBgZ3JlX3JjdmAgdG8gY29uZmlybSB3aGV0aGVyIGBncmV0YXBgIHdpbGwgcHJvcGVybHkgcmVjZWl2ZSB0aGUgcGFja2V0cy4gSSBtdXN0IGNoZWNrIGBncmVfcmN2YCBhbmQgc2VlIGhvdyBgZ3JldGFwYCB1c2VzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRzdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NDE6XHR7XG4gNDQyOlx0XHRzdHJ1Y3QgdG5sX3B0a19pbmZvIHRwaTtcbiA0NDM6XHRcdGJvb2wgY3N1bV9lcnIgPSBmYWxzZTtcbiA0NDQ6XHRcdGludCBoZHJfbGVuO1xuIDQ0NTpcdFxuIDQ0NjpcdCNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxuIDQ0NzpcdFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xuIDQ0ODpcdFx0XHQvKiBMb29wZWQgYmFjayBwYWNrZXQsIGRyb3AgaXQhICovXG4gNDQ5Olx0XHRcdGlmIChydF9pc19vdXRwdXRfcm91dGUoc2tiX3J0YWJsZShza2IpKSlcbiA0NTA6XHRcdFx0XHRnb3RvIGRyb3A7XG4gNDUxOlx0XHR9XG4gNDUyOlx0I2VuZGlmXG4gNDUzOlx0XG4gNDU0Olx0XHRoZHJfbGVuID0gZ3JlX3BhcnNlX2hlYWRlcihza2IsIFx1MDAyNnRwaSwgXHUwMDI2Y3N1bV9lcnIsIGh0b25zKEVUSF9QX0lQKSwgMCk7XG4gNDU1Olx0XHRpZiAoaGRyX2xlbiBcdTAwM2MgMClcbiA0NTY6XHRcdFx0Z290byBkcm9wO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0aWYgKHVubGlrZWx5KHRwaS5wcm90byA9PSBodG9ucyhFVEhfUF9FUlNQQU4pIHx8XG4gNDU5Olx0XHRcdCAgICAgdHBpLnByb3RvID09IGh0b25zKEVUSF9QX0VSU1BBTjIpKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAgVXNhZ2UqKgoKUmlnaHQsIHNvIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuLi5teSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIHNvbGVseSBhYm91dCBwcmV2ZW50aW5nIGxvb3BlZC1iYWNrIG11bHRpY2FzdCBwYWNrZXRzIGluIElQIEdSRSB0dW5uZWxzLiBTdGFuZGFyZCBzdHVmZiwgcmVhbGx5LiBCdXQsIGhvbGQgb24gYSBtaW51dGUuIFRoYXQgc2VlbXMgYSBiaXQgdG9vIHNpbXBsaXN0aWMuIExldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gVGltZSB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCYjMzk7cyAqYWxsKiBpdCYjMzk7cyBkb2luZy4gTGV0JiMzOTtzIGp1bXAgaW50byBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbW9kdWxlIHdpbGwgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGFuZCBob3BlZnVsbHkgd2lsbCBwcm92aWRlIGluc2lnaHQgYXMgdG8gaXRzIHVzYWdlIGFuZCB3aGV0aGVyIGl0JiMzOTtzIG1vcmUgd2lkZXNwcmVhZCB0aGFuIGp1c3QgbG9vcGJhY2sgcHJldmVudGlvbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHRoYW4gc29ycnkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9NDQwPXN0YXRpYyBpbnQgZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cbm5ldC9pcHY0L2lwX2dyZS5jOjQ0NjojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0Ny1cdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcikpIHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTM1LVxubmV0L2lwdjQvaXBfZ3JlLmM6OTM2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtOTM3LXN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTgyLVx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmM6OTgzOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtOTg0LVx0Lm5kb19vcGVuXHRcdD0gaXBncmVfb3Blbixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDM2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDUwLVx0aWYgKGlwaC1cdTAwM2VkYWRkciBcdTAwMjZcdTAwMjYgIXR1bm5lbC1cdTAwM2Vjb2xsZWN0X21kKSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDUxOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Mi1cdFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpcGdyZV90dW5uZWxfaW5pdGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBpcGdyZV90dW5uZWxfaW5pdGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgY3J1eCBvZiB0aGUgR1JFIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaXRzIHJlc3BvbnNpYmlsaXRpZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSByZXNvdXJjZXMgaXQgYWxsb2NhdGVzLiBJcyBpdCBkZWFsaW5nIHdpdGggbmV0d29yayBuYW1lc3BhY2VzLCBmaWxlIGRlc2NyaXB0b3JzLCBvciBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBHUkUgcHJvdG9jb2w/CgpJIHdhbnQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uLCBvciBpZiBpdCBoYW5kbGVzIGFueSBzcGVjaWFsIGNhc2VzIG9yIHBvdGVudGlhbCBlZGdlIHNjZW5hcmlvcy4gRG9lcyBpdCBwZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIHVzZXIgaW5wdXQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIGl0cyBsb2NraW5nIG9yIHJlc291cmNlIG1hbmFnZW1lbnQ/IEkgc2hvdWxkIHByb2JhYmx5IGNvbnNpZGVyIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBBIGdvb2QgaW5pdGlhbGl6YXRpb24gcm91dGluZSBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSByZXNvdXJjZXMgYXJlIHVuYXZhaWxhYmxlIG9yIGludmFsaWQgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgYXJlIGhhbmRsZWQ6IHRoZSBpbnRlcmZhY2Ugc2V0dXAsIHRoZSByb3V0aW5nIGFzcGVjdHMsIGFueSB0dW5uZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIElzIGl0IGEgbW9kdWxhciBkZXNpZ24gdGhhdCB3aWxsIGxlbmQgaXRzZWxmIHdlbGwgdG8gZnV0dXJlIGV4dGVuc2lvbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzNjpcdHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjEwMzc6XHR7XG4xMDM4Olx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTAzOTpcdFx0c3RydWN0IGlwaGRyICppcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuMTA0MDpcdFxuMTA0MTpcdFx0X19ncmVfdHVubmVsX2luaXQoZGV2KTtcbjEwNDI6XHRcbjEwNDM6XHRcdF9fZGV2X2FkZHJfc2V0KGRldiwgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCA0KTtcbjEwNDQ6XHRcdG1lbWNweShkZXYtXHUwMDNlYnJvYWRjYXN0LCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsIDQpO1xuMTA0NTpcdFxuMTA0NjpcdFx0ZGV2LVx1MDAzZWZsYWdzXHRcdD0gSUZGX05PQVJQO1xuMTA0NzpcdFx0bmV0aWZfa2VlcF9kc3QoZGV2KTtcbjEwNDg6XHRcdGRldi1cdTAwM2VhZGRyX2xlblx0XHQ9IDQ7XG4xMDQ5Olx0XG4xMDUwOlx0XHRpZiAoaXBoLVx1MDAzZWRhZGRyIFx1MDAyNlx1MDAyNiAhdHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbjEwNTE6XHQjaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1RcbjEwNTI6XHRcdFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpIHtcbjEwNTM6XHRcdFx0XHRpZiAoIWlwaC1cdTAwM2VzYWRkcilcbjEwNTQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTA1NTpcdFx0XHRcdGRldi1cdTAwM2VmbGFncyA9IElGRl9CUk9BRENBU1Q7XG4xMDU2Olx0XHRcdFx0ZGV2LVx1MDAzZWhlYWRlcl9vcHMgPSBcdTAwMjZpcGdyZV9oZWFkZXJfb3BzO1xuMTA1NzpcdFx0XHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2YoKmlwaCk7XG4xMDU4Olx0XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XG4xMDU5Olx0XHRcdH1cbjEwNjA6XHQjZW5kaWZcbjEwNjE6XHRcdH0gZWxzZSBpZiAoIXR1bm5lbC1cdTAwM2Vjb2xsZWN0X21kKSB7XG4xMDYyOlx0XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzID0gXHUwMDI2aXBncmVfaGVhZGVyX29wcztcbjEwNjM6XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbjEwNjQ6XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XG4xMDY1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkdSRSBUdW5uZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBHUkUgdHVubmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaW1wb3J0YW50LiBJIG5lZWQgaXQsIHByZXN1bWFibHksIHRvIHNldCB1cCB0aGUgYElGRl9CUk9BRENBU1RgIGZsYWcgYW5kIHRvIGdldCB0aGUgYGRldi0mZ3Q7aGVhZGVyX29wc2AgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZXNlIG11bHRpY2FzdCBHUkUgdHVubmVscy4gVGhhdCYjMzk7cyB0aGUgaW5pdGlhbCBodW5jaC4KCkJ1dCB0aGVuLCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgc2VlIHRoZSB0ZXN0IGNhc2UgaXMgdXNpbmcgYGdyZXRhcGAuIEFuZCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgZ3JldGFwYCBpbml0aWFsaXplcyB1c2luZyBgZ3JlX3RhcF9pbml0YCwgcmF0aGVyIHRoYW4gYGlwZ3JlX3R1bm5lbF9pbml0YC4gSG1tLCB0aGF0IGNoYW5nZXMgdGhpbmdzLiBTbywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZ3JlX3RhcF9pbml0YCBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN3aXRjaCBnZWFycyBhbmQgZ28gdGhyb3VnaCB0aGF0IGNvZGUgZmxvdyBpbnN0ZWFkIHRvIGZpbmQgdGhlIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzI5Olx0c3RhdGljIGludCBncmVfdGFwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjEzMzA6XHR7XG4xMzMxOlx0XHRfX2dyZV90dW5uZWxfaW5pdChkZXYpO1xuMTMzMjpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XG4xMzMzOlx0XHRuZXRpZl9rZWVwX2RzdChkZXYpO1xuMTMzNDpcdFxuMTMzNTpcdFx0cmV0dXJuIGlwX3R1bm5lbF9pbml0KGRldik7XG4xMzM2Olx0fVxuMTMzNzpcdFxuMTMzODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xuMTMzOTpcdFx0Lm5kb19pbml0XHRcdD0gZ3JlX3RhcF9pbml0LFxuMTM0MDpcdFx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxuMTM0MTpcdFx0Lm5kb19zdGFydF94bWl0XHRcdD0gZ3JlX3RhcF94bWl0LFxuMTM0MjpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IGV0aF9tYWNfYWRkcixcbjEzNDM6XHRcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbjEzNDQ6XHRcdC5uZG9fY2hhbmdlX210dVx0XHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxuMTM0NTpcdFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuMTM0NjpcdFx0Lm5kb19nZXRfaWZsaW5rXHRcdD0gaXBfdHVubmVsX2dldF9pZmxpbmssXG4xMzQ3Olx0XHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbjEzNDg6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk5NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O09rYXksIGBncmV0YXBgIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgbmVlZCBgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1RgLiYjMzQ7IFNvLCBJIHdhcyBnb2luZyB0byBpbmNsdWRlIGBORVRfSVBHUkVgLCBgSVBWNl9HUkVgLCBgTkVUX0ZPVWAsIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4KCkJ1dCwgd2FpdC4gSSBuZWVkZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyDigJMgZG9lcyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgc25lYWsgaW4gdmlhIHRoZSBiYWNrIGRvb3IgZm9yIG11bHRpY2FzdCBzdXBwb3J0IHdpdGggYGdyZXRhcGA/IEhtbSwgYGdyZXRhcGAgaXMgYW4gRXRoZXJuZXQgdHVubmVsLCBhbmQgdGhhdCBpbmhlcmVudGx5ICpkb2VzKiBoYW5kbGUgYnJvYWRjYXN0cy9tdWx0aWNhc3QuIExldCBtZSBsb29rIGF0IHRoZSB0ZXN0IHNjcmlwdC4uLiB5ZXAsIGl0IGNyZWF0ZXMgYSBgZ3JldGFwYCB0dW5uZWwgdXNpbmcgYGlwIGxpbmsgYWRkYCB3aXRoIEZPVSBlbmNhcHN1bGF0aW9uLiBPa2F5LCBzbyBteSBpbml0aWFsIGNvbmZpZ3Mgc3RhbmQuCgpUaGVuIGl0IGhpdCBtZTogaGFuZyBvbiwgZG9lc24mIzM5O3QgYE5FVF9JUEdSRWAgZGVwZW5kIG9uIGBORVRfSVBHUkVfREVNVVhgPyBJdCBkb2VzLiBPa2F5LCBpdCYjMzk7cyBlbmFibGVkIGJ5IHRoZSBwYXJlbnQgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gYmUgZXhwbGljaXQsIHNvIEkmIzM5O2xsIGp1c3Qga2VlcCBgTkVUX0lQR1JFYCBhbmQgYElQVjZfR1JFYC4KCk5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zPyBUaGlzIHRlc3QgdXNlcyBgcGluZ2AsIGJ1dCB0aGUgYWN0dWFsIGJ1ZyBpcyBpbiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRob3NlIGFyZSB0aGUgc3ltYm9scyB0byBmb2N1cyBvbi4KCkxldCBtZSB2ZXJpZnkgdGhhdCByZWFzb25pbmcuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBtdWx0aWNhc3QgcGFja2V0cyB3ZXJlIGluY29ycmVjdGx5IGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLiBUaGUgZml4IHJldHVybnMgYSByZXN1Ym1pdCByZXF1ZXN0IChwb3NpdGl2ZSBmb3IgSVB2NiwgbmVnYXRpdmUgZm9yIElQdjQpLCBhbGxvd2luZyB0aGUgVURQIHJlY2VpdmUgcGF0aCB0byBwYXNzIHRoZSBwYWNrZXQgYmFjayB0byB0aGUgSVAgbGF5ZXIuIFRoaXMgKmlzKiBhIGNvcmUgbmV0d29ya2luZyBsb2dpYyBjaGFuZ2UsIGFuZCBJIHNob3VsZCBwcm9iYWJseSBmdXp6IHRoYXQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcyBvciBVQUZzIGNyb3AgdXAgd2hlbiByZXN1Ym1pdHRpbmcgbXVsdGljYXN0IHBhY2tldHMuCgpPa2F5LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBObywgYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbmQgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgIGFyZW4mIzM5O3QgdG91Y2hlZCwganVzdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIEkmIzM5O20gZ29vZC4gSSYjMzk7bGwganVzdCB1c2UgdGhvc2Ugc3ltYm9scy4gTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWRwNl9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jPTkyMz1zdGF0aWMgdm9pZCB1ZHA2X2NzdW1femVyb19lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTkzNi0gKi9cbm5ldC9pcHY2L3VkcC5jOjkzNzpzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni91ZHAuYy05MzgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcixcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xMDY5PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xMTM3LVx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoZGFkZHIpKVxubmV0L2lwdjYvdWRwLmM6MTEzODpcdFx0cmV0dXJuIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgc2FkZHIsIGRhZGRyKTtcbm5ldC9pcHY2L3VkcC5jLTExMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDI1CgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqTXVsdGljYXN0IFBhY2tldCBIYW5kbGluZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBvYnNlcnZpbmcgdGhlIGNhbGwgZmxvdyBhbmQsIHllcywgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWNlaXZpbmcgSVB2NiBtdWx0aWNhc3QgcGFja2V0cywgYHVkcHY2X3JjdmAsIGlzIGluZGVlZCB0aGUgb25lIHRyaWdnZXJpbmcgdGhpcyBhY3Rpb24uIFRoaXMgY2xhcmlmaWVzIHRoZSBjb250ZXh0LCBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhY2tldCYjMzk7cyBvcmlnaW4gYW5kIHBhdGguIE5vdyB0aGF0IEkmIzM5O3ZlIHBpbm5lZCBkb3duIHRoZSBzb3VyY2UgYW5kIHB1cnBvc2UsIEkmIzM5O20gcHJlcGFyZWQgdG8gZmluYWxpemUgYW5kIHRyYW5zbWl0IHRoZSBvdXRjb21lIG9mIHRoZSBwcm9jZXNzLiBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0aW5nIHZhbHVlcyBhbmQgbW92ZSBmb3J3YXJkIHdpdGggdGhlIG5leHQgc3RhZ2Ugb2YgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAgd2VyZSBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpLiBCeSByZXR1cm5pbmcgdGhlIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIGNvcnJlY3RseSBwYXNzZXMgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDssCiAgICAmIzM0O19fdWRwNl9saWJfbWNhc3RfZGVsaXZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTg6MzcuNjcyNTgzMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3Nzc0NTc5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0ZPVVwiLFxuICAgIFwiTkVUX0ZPVV9JUF9UVU5ORUxTXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1ODozNy42NzI1OTAxMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTU2MjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4MWE0ODAxOWI3YTJmZGU5YjJiYTEzZjBjMzk5ZjBiMThmMmFlY2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgNSAwMjo1ODozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jXFxuaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3VkcC5jXFxuKysrIGIvbmV0L2lwdjQvdWRwLmNcXG5AQCAtMjQ3Niw2ICsyNDc2LDcgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuIFxcdGJvb2wgdXNlX2hhc2gyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aGFzaDJfYW55ID0gMDtcXG4gXFx0aGFzaDIgPSAwO1xcbkBAIC0yNTIwLDggKzI1MjEsOSBAQCBzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmaXJzdCkge1xcbi1cXHRcXHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRcXHRyZXQgPSB1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtcmV0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXFxuaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3VkcC5jXFxuKysrIGIvbmV0L2lwdjYvdWRwLmNcXG5AQCAtOTQ5LDYgKzk0OSw3IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7XFxuIFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbiBcXHRib29sIHVzZV9oYXNoMjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGhhc2gyX2FueSA9IDA7XFxuIFxcdGhhc2gyID0gMDtcXG5AQCAtOTk4LDggKzk5OSw5IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZpcnN0KSB7XFxuLVxcdFxcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFxcdTAwM2UgMClcXG4tXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0ID0gdWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uN2U5YWU5MzdjZmZhN2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTM5LDYgKzM5LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmliX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmluX2Fja19sYXQuc2ggXFxcXFxcbitcXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcXFxcbiBcXHRmcV9iYW5kX3BrdGxpbWl0LnNoIFxcXFxcXG4gXFx0Z3JlX2dzby5zaCBcXFxcXFxuIFxcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzI4NTEzZDU1ZGI0YTVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxcbkBAIC0wLDAgKzEsMTc3IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcXG4rIyB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC5cXG4rI1xcbisjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXFxuKyMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0XFxuKyMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxcbisjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXFxuKyMgdHVubmVsIHdpdGggYSBtdWx0aWNhc3QgcmVtb3RlIGFkZHJlc3MgYW5kIHNlbmRpbmcgcGluZyB0aHJvdWdoIGl0LlxcbisjXFxuKyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcXG4rIyB0aGUgdW5pY2FzdCBwYXRoICh1ZHBbNl1fdW5pY2FzdF9yY3Zfc2tiKSwgc28gd2UgZGlzYWJsZSBpdCB0byBmb3JjZVxcbisjIHBhY2tldHMgdGhyb3VnaCB0aGUgbXVsdGljYXN0IGRlbGl2ZXJ5IGZ1bmN0aW9uLlxcbitcXG4rc291cmNlIGxpYi5zaFxcbitcXG4rTlNFTkRFUj1cXFwiXFxcIlxcbitOUkVDVj1cXFwiXFxcIlxcbitcXG4rRk9VX1BPUlQ0PTQ3OTdcXG4rRk9VX1BPUlQ2PTQ3OThcXG4rTUNBU1Q0PTIzOS4wLjAuMVxcbitNQ0FTVDY9ZmYwZTo6MVxcbitcXG4rVFVONF9TPTE5Mi4xNjguOTkuMVxcbitUVU40X1I9MTkyLjE2OC45OS4yXFxuK1RVTjZfUz0yMDAxOmRiODo5OTo6MVxcbitUVU42X1I9MjAwMTpkYjg6OTk6OjJcXG4rXFxuK2NsZWFudXAoKSB7XFxuK1xcdGNsZWFudXBfYWxsX25zXFxuK31cXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbitzZXR1cF9jb21tb24oKSB7XFxuK1xcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcXG4rXFxuK1xcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXFxuK1xcdCMgY29sbGlzaW9ucyB3aXRoIGRldmljZXMgaW4gdGhlIHJvb3QgbmFtZXNwYWNlLlxcbitcXHRpcCBsaW5rIGFkZCB2ZXRoX3MgbmV0bnMgXFxcIiROU0VOREVSXFxcIiB0eXBlIHZldGggXFxcXFxcbitcXHRcXHRwZWVyIG5hbWUgdmV0aF9yIG5ldG5zIFxcXCIkTlJFQ1ZcXFwiXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgc2V0IHZldGhfcyB1cFxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNldCB2ZXRoX3IgdXBcXG4rXFxuK1xcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5SRUNWXFxcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcXG4rfVxcbitcXG4rc2V0dXBfaXB2NCgpIHtcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBhZGRyIGFkZCAxMC4wLjAuMS8yNCBkZXYgdmV0aF9zXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3JcXG4rXFxuK1xcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgXFxcIiRNQ0FTVDQvMzJcXFwiIGRldiB2ZXRoX3IgYXV0b2pvaW5cXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgcm91dGUgYWRkIDIzOS4wLjAuMC84IGRldiB2ZXRoX3NcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgcm91dGUgYWRkIDIzOS4wLjAuMC84IGRldiB2ZXRoX3JcXG4rXFxuK1xcdCMgU2VuZGVyOiBHUkVUQVAgd2l0aCBGT1UgZW5jYXAgKG5vIEZPVSBsaXN0ZW5lciBuZWVkZWQgb24gVFggc2lkZSlcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDRcXFwiIGxvY2FsIDEwLjAuMC4xIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNFxcXCIgXFxcXFxcbitcXHRcXHRrZXkgXFxcIiRNQ0FTVDRcXFwiXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgbGluayBzZXQgZW91ZHA0IHVwXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgYWRkciBhZGQgXFxcIiRUVU40X1MvMjRcXFwiIGRldiBlb3VkcDRcXG4rXFxuK1xcdCMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciArIEdSRVRBUFxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlJFQ1ZcXFwiIGlwIGZvdSBhZGQgcG9ydCBcXFwiJEZPVV9QT1JUNFxcXCIgaXBwcm90byA0N1xcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDRcXFwiIGxvY2FsIDEwLjAuMC4yIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNFxcXCIgXFxcXFxcbitcXHRcXHRrZXkgXFxcIiRNQ0FTVDRcXFwiXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgc2V0IGVvdWRwNCB1cFxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCBcXFwiJFRVTjRfUi8yNFxcXCIgZGV2IGVvdWRwNFxcbitcXG4rXFx0IyBTdGF0aWMgbmVpZ2ggb24gc2VuZGVyOiBBUlAgcmVwbGllcyBjYW5ub3QgdHJhdmVyc2UgdGhlXFxuK1xcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cXG4rXFx0bG9jYWwgcmVjdl9tYWNcXG4rXFx0cmVjdl9tYWM9JChpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNob3cgZW91ZHA0IHwgYXdrICcvZXRoZXIve3ByaW50ICQyfScpXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgbmVpZ2ggYWRkIFxcXCIkVFVONF9SXFxcIiBsbGFkZHIgXFxcIiRyZWN2X21hY1xcXCIgZGV2IGVvdWRwNFxcbit9XFxuK1xcbitzZXR1cF9pcHY2KCkge1xcbitcXHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHJ1bm5pbmcga2VybmVsLlxcbitcXHRbIC1lIC9wcm9jL3N5cy9uZXQvaXB2NiBdIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0bW9kcHJvYmUgLXEgZm91NiB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGFkZHIgYWRkIDIwMDE6ZGI4OjoxLzY0IGRldiB2ZXRoX3Mgbm9kYWRcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgMjAwMTpkYjg6OjIvNjQgZGV2IHZldGhfciBub2RhZFxcbitcXG4rXFx0IyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlclxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCBcXFwiJE1DQVNUNi8xMjhcXFwiIGRldiB2ZXRoX3IgYXV0b2pvaW5cXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcXG4rXFxuK1xcdCMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXBcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDZcXFwiIGxvY2FsIDIwMDE6ZGI4OjoxIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNlxcXCIgXFxcXFxcbitcXHRcXHRrZXkgNDJcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIHNldCBlb3VkcDYgdXBcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBhZGRyIGFkZCBcXFwiJFRVTjZfUy82NFxcXCIgZGV2IGVvdWRwNiBub2RhZFxcbitcXG4rXFx0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyIChJUHY2KSArIGlwNmdyZXRhcFxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlJFQ1ZcXFwiIGlwIGZvdSBhZGQgcG9ydCBcXFwiJEZPVV9QT1JUNlxcXCIgaXBwcm90byA0NyAtNlxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDZcXFwiIGxvY2FsIDIwMDE6ZGI4OjoyIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNlxcXCIgXFxcXFxcbitcXHRcXHRrZXkgNDJcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgbGluayBzZXQgZW91ZHA2IHVwXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIFxcXCIkVFVONl9SLzY0XFxcIiBkZXYgZW91ZHA2IG5vZGFkXFxuK1xcbitcXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXFxuK1xcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cXG4rXFx0bG9jYWwgcmVjdl9tYWNcXG4rXFx0cmVjdl9tYWM9JChpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNob3cgZW91ZHA2IHwgYXdrICcvZXRoZXIve3ByaW50ICQyfScpXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgbmVpZ2ggYWRkIFxcXCIkVFVONl9SXFxcIiBsbGFkZHIgXFxcIiRyZWN2X21hY1xcXCIgZGV2IGVvdWRwNlxcbit9XFxuK1xcbitnZXRfcnhfcGFja2V0cygpIHtcXG4rXFx0bG9jYWwgZGV2PVxcXCIkMVxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIC1zIGxpbmsgc2hvdyBcXFwiJGRldlxcXCIgfCBhd2sgJy9SWDove2dldGxpbmU7IHByaW50ICQyfSdcXG4rfVxcbitcXG4rcnVuX3BpbmdfdGVzdCgpIHtcXG4rXFx0bG9jYWwgZmFtaWx5PVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgZGV2PVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgZHN0PVxcXCIkM1xcXCJcXG4rXFx0bG9jYWwgY291bnQ9MTAwXFxuK1xcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxcbitcXG4rXFx0IyBXYXJtdXA6IGxldCBhbnkgaW5pdGlhbCBicm9hZGNhc3QvTkQgdHJhZmZpYyBzZXR0bGVcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5TRU5ERVJcXFwiIHBpbmcgXFxcIiRmYW1pbHlcXFwiIC1jIDEgLVcgMSBcXFwiJGRzdFxcXCIgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c2xlZXAgMVxcbitcXG4rXFx0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXFxcIiRkZXZcXFwiKVxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlNFTkRFUlxcXCIgcGluZyBcXFwiJGZhbWlseVxcXCIgLWMgJGNvdW50IC1XIDEgXFxcIiRkc3RcXFwiIFxcXFxcXG4rXFx0XFx0XFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuK1xcdHNsZWVwIDFcXG4rXFx0cnhfYWZ0ZXI9JChnZXRfcnhfcGFja2V0cyBcXFwiJGRldlxcXCIpXFxuK1xcbitcXHRyeF9kZWx0YT0kKChyeF9hZnRlciAtIHJ4X2JlZm9yZSkpXFxuK1xcbitcXHRpZiBbIFxcXCIkcnhfZGVsdGFcXFwiIC1nZSBcXFwiJGNvdW50XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIlBBU1M6IHJlY2VpdmVkICRyeF9kZWx0YS8kY291bnQgcGFja2V0c1xcXCJcXG4rXFx0XFx0cmV0dXJuIFxcXCIka3NmdF9wYXNzXFxcIlxcbitcXHRlbGlmIFsgXFxcIiRyeF9kZWx0YVxcXCIgLWd0IDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBvbmx5ICRyeF9kZWx0YS8kY291bnQgcGFja2V0cyByZWNlaXZlZFxcXCJcXG4rXFx0XFx0cmV0dXJuIFxcXCIka3NmdF9mYWlsXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IDAvJGNvdW50IHBhY2tldHMgcmVjZWl2ZWRcXFwiXFxuK1xcdFxcdHJldHVybiBcXFwiJGtzZnRfZmFpbFxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rcmV0PTBcXG4rXFxuK2VjaG8gXFxcIlRFU1Q6IEZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXBzdWxhdGlvbiByZXN1Ym1pdFxcXCJcXG4rc2V0dXBfY29tbW9uXFxuK3NldHVwX2lwdjRcXG4rcnVuX3BpbmdfdGVzdCAtNCBlb3VkcDQgXFxcIiRUVU40X1JcXFwiIHx8IHJldD0kP1xcbitcXG4rZWNobyBcXFwiVEVTVDogRk9VL0dSRVRBUCBJUHY2IG11bHRpY2FzdCBlbmNhcHN1bGF0aW9uIHJlc3VibWl0XFxcIlxcbitpZiBzZXR1cF9pcHY2OyB0aGVuXFxuK1xcdHJ1bl9waW5nX3Rlc3QgLTYgZW91ZHA2IFxcXCIkVFVONl9SXFxcIiB8fCByZXQ9JD9cXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJTS0lQOiBJUHY2IHVuYXZhaWxhYmxlXFxcIlxcbitmaVxcbitcXG4rZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjM4LjA3ODg5NTExOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0MzcxMTMyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdWRwNF9saWJfbWNhc3RfZGVsaXZlclwiLFxuICAgIFwiX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAgd2VyZSBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpLiBCeSByZXR1cm5pbmcgdGhlIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIGNvcnJlY3RseSBwYXNzZXMgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ODFhNDgwMTliN2EyZmRlOWIyYmExM2YwYzM5OWYwYjE4ZjJhZWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAwMjo1ODozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmNcbmluZGV4IDU5MjQ4YTU5MzU4Y2E1Li5kM2RkY2JmYzg0NzcxYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcC5jXG4rKysgYi9uZXQvaXB2NC91ZHAuY1xuQEAgLTI0NzYsNiArMjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90O1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRib29sIHVzZV9oYXNoMjtcbitcdGludCByZXQ7XG4gXG4gXHRoYXNoMl9hbnkgPSAwO1xuIFx0aGFzaDIgPSAwO1xuQEAgLTI1MjAsOCArMjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdGlmIChmaXJzdCkge1xuLVx0XHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0ID0gdWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIC1yZXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTk0OSw2ICs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aGFzaDJfYW55ID0gMDtcbiBcdGhhc2gyID0gMDtcbkBAIC05OTgsOCArOTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFx1MDAzZSAwKVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0zOSw2ICszOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXG4gXHRmaWJfdGVzdHMuc2ggXFxcbiBcdGZpbl9hY2tfbGF0LnNoIFxcXG4rXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcbiBcdGZxX2JhbmRfcGt0bGltaXQuc2ggXFxcbiBcdGdyZV9nc28uc2ggXFxcbiBcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcyODUxM2Q1NWRiNGE1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5AQCAtMCwwICsxLDE3NyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcbisjIHdoZW4gcGFja2V0cyBhcmUgZGVsaXZlcmVkIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLlxuKyNcbisjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXG4rIyBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoKSAvIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcigpIG11c3QgcmVzdWJtaXRcbisjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cbisjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXG4rIyB0dW5uZWwgd2l0aCBhIG11bHRpY2FzdCByZW1vdGUgYWRkcmVzcyBhbmQgc2VuZGluZyBwaW5nIHRocm91Z2ggaXQuXG4rI1xuKyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcbisjIHRoZSB1bmljYXN0IHBhdGggKHVkcFs2XV91bmljYXN0X3Jjdl9za2IpLCBzbyB3ZSBkaXNhYmxlIGl0IHRvIGZvcmNlXG4rIyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cbitcbitzb3VyY2UgbGliLnNoXG4rXG4rTlNFTkRFUj1cIlwiXG4rTlJFQ1Y9XCJcIlxuK1xuK0ZPVV9QT1JUND00Nzk3XG4rRk9VX1BPUlQ2PTQ3OThcbitNQ0FTVDQ9MjM5LjAuMC4xXG4rTUNBU1Q2PWZmMGU6OjFcbitcbitUVU40X1M9MTkyLjE2OC45OS4xXG4rVFVONF9SPTE5Mi4xNjguOTkuMlxuK1RVTjZfUz0yMDAxOmRiODo5OTo6MVxuK1RVTjZfUj0yMDAxOmRiODo5OTo6MlxuK1xuK2NsZWFudXAoKSB7XG4rXHRjbGVhbnVwX2FsbF9uc1xuK31cbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK3NldHVwX2NvbW1vbigpIHtcbitcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcbitcbitcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXG4rXHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cbitcdGlwIGxpbmsgYWRkIHZldGhfcyBuZXRucyBcIiROU0VOREVSXCIgdHlwZSB2ZXRoIFxcXG4rXHRcdHBlZXIgbmFtZSB2ZXRoX3IgbmV0bnMgXCIkTlJFQ1ZcIlxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIGxpbmsgc2V0IHZldGhfcyB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBsaW5rIHNldCB2ZXRoX3IgdXBcbitcbitcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cbitcdGlwIG5ldG5zIGV4ZWMgXCIkTlJFQ1ZcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcbit9XG4rXG4rc2V0dXBfaXB2NCgpIHtcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCAxMC4wLjAuMS8yNCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3JcbitcbitcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbitcdGlwIC1uIFwiJE5SRUNWXCIgYWRkciBhZGQgXCIkTUNBU1Q0LzMyXCIgZGV2IHZldGhfciBhdXRvam9pblxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yXG4rXG4rXHQjIFNlbmRlcjogR1JFVEFQIHdpdGggRk9VIGVuY2FwIChubyBGT1UgbGlzdGVuZXIgbmVlZGVkIG9uIFRYIHNpZGUpXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMSBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBzZXQgZW91ZHA0IHVwXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgXCIkVFVONF9TLzI0XCIgZGV2IGVvdWRwNFxuK1xuK1x0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICsgR1JFVEFQXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNFwiIGlwcHJvdG8gNDdcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNCB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU40X1IvMjRcIiBkZXYgZW91ZHA0XG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcbitcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbitcdGxvY2FsIHJlY3ZfbWFjXG4rXHRyZWN2X21hYz0kKGlwIC1uIFwiJE5SRUNWXCIgbGluayBzaG93IGVvdWRwNCB8IGF3ayAnL2V0aGVyL3twcmludCAkMn0nKVxuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIG5laWdoIGFkZCBcIiRUVU40X1JcIiBsbGFkZHIgXCIkcmVjdl9tYWNcIiBkZXYgZW91ZHA0XG4rfVxuK1xuK3NldHVwX2lwdjYoKSB7XG4rXHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHJ1bm5pbmcga2VybmVsLlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdG1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXG4rXG4rXHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIFwiJE1DQVNUNi8xMjhcIiBkZXYgdmV0aF9yIGF1dG9qb2luXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcbitcdGlwIC1uIFwiJE5SRUNWXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcbitcbitcdCMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcbitcdFx0cmVtb3RlIFwiJE1DQVNUNlwiIGxvY2FsIDIwMDE6ZGI4OjoxIFxcXG4rXHRcdGVuY2FwIGZvdSBlbmNhcC1zcG9ydCBcIiRGT1VfUE9SVDZcIiBlbmNhcC1kcG9ydCBcIiRGT1VfUE9SVDZcIiBcXFxuK1x0XHRrZXkgNDJcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIHNldCBlb3VkcDYgdXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCBcIiRUVU42X1MvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICsgaXA2Z3JldGFwXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNlwiIGlwcHJvdG8gNDcgLTZcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDZcIiBsb2NhbCAyMDAxOmRiODo6MiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ2XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ2XCIgXFxcbitcdFx0a2V5IDQyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNiB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU42X1IvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXG4rXHQjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuXG4rXHRsb2NhbCByZWN2X21hY1xuK1x0cmVjdl9tYWM9JChpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBuZWlnaCBhZGQgXCIkVFVONl9SXCIgbGxhZGRyIFwiJHJlY3ZfbWFjXCIgZGV2IGVvdWRwNlxuK31cbitcbitnZXRfcnhfcGFja2V0cygpIHtcbitcdGxvY2FsIGRldj1cIiQxXCJcbitcbitcdGlwIC1uIFwiJE5SRUNWXCIgLXMgbGluayBzaG93IFwiJGRldlwiIHwgYXdrICcvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0nXG4rfVxuK1xuK3J1bl9waW5nX3Rlc3QoKSB7XG4rXHRsb2NhbCBmYW1pbHk9XCIkMVwiXG4rXHRsb2NhbCBkZXY9XCIkMlwiXG4rXHRsb2NhbCBkc3Q9XCIkM1wiXG4rXHRsb2NhbCBjb3VudD0xMDBcbitcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxuK1xuK1x0IyBXYXJtdXA6IGxldCBhbnkgaW5pdGlhbCBicm9hZGNhc3QvTkQgdHJhZmZpYyBzZXR0bGVcbitcdGlwIG5ldG5zIGV4ZWMgXCIkTlNFTkRFUlwiIHBpbmcgXCIkZmFtaWx5XCIgLWMgMSAtVyAxIFwiJGRzdFwiIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0c2xlZXAgMVxuK1xuK1x0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXCIkZGV2XCIpXG4rXHRpcCBuZXRucyBleGVjIFwiJE5TRU5ERVJcIiBwaW5nIFwiJGZhbWlseVwiIC1jICRjb3VudCAtVyAxIFwiJGRzdFwiIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0c2xlZXAgMVxuK1x0cnhfYWZ0ZXI9JChnZXRfcnhfcGFja2V0cyBcIiRkZXZcIilcbitcbitcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcbitcbitcdGlmIFsgXCIkcnhfZGVsdGFcIiAtZ2UgXCIkY291bnRcIiBdOyB0aGVuXG4rXHRcdGVjaG8gXCJQQVNTOiByZWNlaXZlZCAkcnhfZGVsdGEvJGNvdW50IHBhY2tldHNcIlxuK1x0XHRyZXR1cm4gXCIka3NmdF9wYXNzXCJcbitcdGVsaWYgWyBcIiRyeF9kZWx0YVwiIC1ndCAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IG9ubHkgJHJ4X2RlbHRhLyRjb3VudCBwYWNrZXRzIHJlY2VpdmVkXCJcbitcdFx0cmV0dXJuIFwiJGtzZnRfZmFpbFwiXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJGQUlMOiAwLyRjb3VudCBwYWNrZXRzIHJlY2VpdmVkXCJcbitcdFx0cmV0dXJuIFwiJGtzZnRfZmFpbFwiXG4rXHRmaVxuK31cbitcbityZXQ9MFxuK1xuK2VjaG8gXCJURVNUOiBGT1UvR1JFVEFQIElQdjQgbXVsdGljYXN0IGVuY2Fwc3VsYXRpb24gcmVzdWJtaXRcIlxuK3NldHVwX2NvbW1vblxuK3NldHVwX2lwdjRcbitydW5fcGluZ190ZXN0IC00IGVvdWRwNCBcIiRUVU40X1JcIiB8fCByZXQ9JD9cbitcbitlY2hvIFwiVEVTVDogRk9VL0dSRVRBUCBJUHY2IG11bHRpY2FzdCBlbmNhcHN1bGF0aW9uIHJlc3VibWl0XCJcbitpZiBzZXR1cF9pcHY2OyB0aGVuXG4rXHRydW5fcGluZ190ZXN0IC02IGVvdWRwNiBcIiRUVU42X1JcIiB8fCByZXQ9JD9cbitlbHNlXG4rXHRlY2hvIFwiU0tJUDogSVB2NiB1bmF2YWlsYWJsZVwiXG4rZmlcbitcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjM4LjA3ODg5NzEwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjI1NTU0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgVURQIG11bHRpY2FzdCBkZWxpdmVyeSBwYXRocyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvaXB2NC91ZHAuY2AgYW5kIGBuZXQvaXB2Ni91ZHAuY2AuIEl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBpcyBpbiBob3cgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGFuZCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAgZnVuY3Rpb25zLlxuXG5QcmV2aW91c2x5LCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIChvciBgdWRwdjZfcXVldWVfcmN2X3NrYmApIHJldHVybmVkIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSBjb2RlIGNvbnN1bWVkIHRoZSBza2IgKHNvY2tldCBidWZmZXIpLiBOb3csIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG51YW5jZWQgcmV0dXJuIHZhbHVlIGhhbmRsaW5nLiBJbiB0aGUgSVB2NCBjYXNlLCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybnMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgdGhlIGNvZGUgbm93IHJldHVybnMgdGhlIG5lZ2F0aXZlIG9mIHRoYXQgdmFsdWUuIFRoZSBJUHY2IGNhc2UgaXMgdGhlIG9wcG9zaXRlLCByZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZS4gVGhpcyBsb29rcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gYWxsb3cgZm9yIHJlc3VibWl0dGluZyB0aGUgcGFja2V0LCBwcmVzdW1hYmx5IHRvIGFuIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGxpa2UgR1JFKSB3aGVuIHBhY2tldHMgYXJyaXZlIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLiBUaGlzIHJlc3VibWlzc2lvbiBpcyBwcm9iYWJseSBkdWUgdG8gdGhlIGB1ZHBfcXVldWVfcmN2X3NrYmAgY2FsbCBuZWVkaW5nIHRvIHJldHVybiBhbiBlcnJvciwgYnV0IGNvbnN1bWluZyB0aGUgc2tiIGlmIHRoYXQgZXJyb3IgaXMgbm90IHRvIGJlIGhhbmRsZWQgYXQgdGhhdCBsYXllci5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gVURQIG11bHRpY2FzdCBkZWxpdmVyeSwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbmQgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJldHVybiBjb2RlcywgYW5kIHdoYXQgdGhleSBzaWduaWZ5LlxuXG5MZXQncyBzZWUsIHdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLCB0aGVzZSBhcmUgZGVmaW5pdGVseSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZXkgYXJlIGluIHRoZSBob3QgcGF0aCBmb3IgbXVsdGljYXN0IFVEUCBwYWNrZXRzLlxuXG5BbmQgd2FpdCwgdGhlIHRlc3QgY2FzZSBtZW50aW9ucyBGT1UgYW5kIEdSRVRBUCwgaW5kaWNhdGluZyB0aGF0IGNlcnRhaW4gY29uZmlndXJhdGlvbnMgd2lsbCBiZSByZXF1aXJlZCB0byByZXByb2R1Y2UgYW5kIGZ1enogdGhpcyBwcm9wZXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaGFzIHRoZSByaWdodCBvcHRpb25zIGVuYWJsZWQuIFNvLCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRfRk9VYCwgYENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNgLCBgQ09ORklHX0lQX0dSRWAsIGFuZCBgQ09ORklHX0lQVjZfR1JFYCBhcmUgYWxsIHNldC4gVGhpcyBpcyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSB0byBlbnN1cmUgSSBjYW4gcmVwcm9kdWNlIHRoZSB0ZXN0IGNhc2UgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1ODo0Ni4xMDE0NTUzMzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwMzY4MzQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0ZPVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc9NjY9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjY3OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy02OC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTYyPUNPTkZJR19ORVRfSVBWVEk9bVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc6NjM6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZy02NC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc9Njk9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjcwOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy03MS1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NTk9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjYwOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NjE9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjYyOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZy02My1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnPTYwPUNPTkZJR19ORVRfSVBWVEk9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NjE6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy02Mi1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9ODA9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjgxOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy04Mi1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz01OD1DT05GSUdfTkVUX0lQVlRJPW1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZzo1OTpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZy02MC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZz01OT1DT05GSUdfTkVUX0lQVlRJPW1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzo2MDpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnPTYwPUNPTkZJR19ORVRfSVBWVEk9bVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NjE6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy02Mi1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0lQVlRJPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZzo1NjpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZy01Ny1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9NTY9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnOjU3OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZy01OC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT0yNz1mb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRfRk9VKSArPSBmb3Uub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICs9IGdyZS5vXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEwMjc9RVhQT1JUX1NZTUJPTChfX2d1ZV9idWlsZF9oZWFkZXIpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAyOC1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwMjk6I2lmZGVmIENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzAtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTM1PXN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkge1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00MS1cXHRcXHRcXHQgICAgICBJU19FTkFCTEVEKENPTkZJR19WWExBTikgKiAyICsgXFxcXFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NDI6XFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZPVSkgKiAyICsgXFxcXFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDMtXFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkgKiAyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz03ND1DT05GSUdfTkVUX0NMU19NQVRDSEFMTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo3NTpDT05GSUdfTkVUX0ZPVT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo3NjpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTc3LUNPTkZJR19ORVRfSVBHUkU9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4NzpDT05GSUdfTkVUX0ZPVT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4ODpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTg5LUNPTkZJR19ORVRfSVBHUkU9bVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1ODo0OC4zMDUxNDMzNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzgyNTYyMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgSXNzdWUgd2l0aCBGT1UgRW5jYXBzdWxhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByb2JsZW0gaW4gVURQIG11bHRpY2FzdCBkZWxpdmVyeSwgc3BlY2lmaWNhbGx5IHdoZW4gcGFja2V0cyBhcmUgZW5jYXBzdWxhdGVkIHVzaW5nIEZPVS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWgsIEZPVSwgaW50ZXJlc3RpbmcgY2hvaWNlIG9mIGVuY2Fwc3VsYXRpb24uXCIgVGhlIHRlc3RpbmcgaW52b2x2ZXMgYm90aCBGT1UgYW5kIEdSRVRBUCwgd2hpY2ggaXMgYSBnb29kIGNvbWJpbmF0aW9uIHRvIGV4cGxvcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE5FVF9GT1VgIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC5cblxuV2FpdCBhIHNlY29uZC4uLiB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gVGhvc2UgZmlsZXMgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YC4gVGhhdCBzdWdnZXN0cyBhIGZ1bmRhbWVudGFsIGlzc3VlIHdpdGhpbiB0aGUgVURQIGNvcmUgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBGT1UgbW9kdWxlLiBJbnRlcmVzdGluZy4uLlxuXG5TbywgdGhpcyBpc3N1ZSBpcyAqdHJpZ2dlcmVkKiBieSBGT1UgZW5jYXBzdWxhdGlvbi4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGF0IGB1ZHBfcXVldWVfcmN2X3NrYmAgaXMgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHdoaWNoLCBpbiB0aGUgRk9VIGNvbnRleHQsIGFwcGFyZW50bHkgc2lnbmlmaWVzIHRoYXQgdGhlIHBhY2tldCBuZWVkcyByZXN1Ym1pc3Npb24sIGxpa2VseSBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGxpa2UgR1JFIGVuY2Fwc3VsYXRpb24uIE5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGlzIHRoZSBsb2dpYyB3aXRoaW4gYHVkcF9xdWV1ZV9yY3Zfc2tiYCB0aGF0J3MgY2F1c2luZyB0aGlzIHJldHVybiB2YWx1ZT8gTGV0J3MgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byBGT1UgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTg6NTMuMDg3NzA3OTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjY1NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJldHVybi4qXFx1MDAzZS4qMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC91ZHAuYz04NTQ9c3RhdGljIHN0cnVjdCBzb2NrICpfX3VkcDRfbGliX2Vycl9lbmNhcChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy05MDUtICogc29ydCBvZiBlcnJvciBjb25kaXRpb24uICBJZiBlcnIgXFx1MDAzYyAwIHRoZW4gdGhlIHNvY2tldCBzaG91bGRcXG5uZXQvaXB2NC91ZHAuYzo5MDY6ICogYmUgY2xvc2VkIGFuZCB0aGUgZXJyb3IgcmV0dXJuZWQgdG8gdGhlIHVzZXIuICBJZiBlcnIgXFx1MDAzZSAwXFxubmV0L2lwdjQvdWRwLmMtOTA3LSAqIGl0J3MganVzdCB0aGUgaWNtcCB0eXBlIFxcdTAwM2NcXHUwMDNjIDggfCBpY21wIGNvZGUuXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNTY5PXN0YXRpYyBpbnQgdWRwX3VuaWNhc3RfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNTc4LVxcbm5ldC9pcHY0L3VkcC5jOjI1Nzk6XFx0LyogYSByZXR1cm4gdmFsdWUgXFx1MDAzZSAwIG1lYW5zIHRvIHJlc3VibWl0IHRoZSBpbnB1dCwgYnV0XFxubmV0L2lwdjQvdWRwLmMtMjU4MC1cXHQgKiBpdCB3YW50cyB0aGUgcmV0dXJuIHRvIGJlIC1wcm90b2NvbCwgb3IgMFxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzM1Mj1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VkcF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM0NjItXFx0V0FSTl9PTl9PTkNFKGl0ZXItXFx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xcbm5ldC9pcHY0L3VkcC5jOjM0NjM6XFx0cmV0dXJuIGl0ZXItXFx1MDAzZWVuZF9zayA/IGl0ZXItXFx1MDAzZWJhdGNoWzBdLnNrIDogTlVMTDtcXG5uZXQvaXB2NC91ZHAuYy0zNDY0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTg6NTMuMTQzMzc4MDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODUyMzg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB1ZHBfcXVldWVfcmN2X3NrYmAgUmVzdWJtaXNzaW9uIExvZ2ljKipcblxuUmlnaHQsIHNvIGB1ZHBfcXVldWVfcmN2X3NrYmAgaXMgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpbmRpY2F0ZXMgYSBuZWVkIHRvIHJlc3VibWl0IHRoZSByZWNlaXZlZCBzb2NrZXQgYnVmZmVyIChgc2tiYCkuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0ICp3aHkqLiBBIHBvc2l0aXZlIHJldHVybiB1c3VhbGx5IHNpZ25hbHMgc29tZSBraW5kIG9mIHF1ZXVlaW5nIGlzc3VlLCBwb3RlbnRpYWwgcmVzb3VyY2UgY29udGVudGlvbiwgb3IgcGVyaGFwcyBhIHRlbXBvcmFyeSBpbmFiaWxpdHkgdG8gcHJvY2VzcyB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgVURQIGFuZCBpdHMgcG90ZW50aWFsIGZvciBoaWdoLXZvbHVtZSB0cmFmZmljLCB1bmRlcnN0YW5kaW5nIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpbiBkZXRhaWwgaXMgcGFyYW1vdW50LiBMZXQncyBkaXZlIHJpZ2h0IGludG8gdGhlIGB1ZHBfcXVldWVfcmN2X3NrYmAgaW1wbGVtZW50YXRpb24gdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcmVzdWJtaXNzaW9uIGNvbmRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBiZWhhdmlvci4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgcXVldWUgb3ZlcmZsb3dzPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGVycm9yIHNjZW5hcmlvcyBiZWluZyBoYW5kbGVkPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWUncyBtZWFuaW5nLCBzcGVjaWZpYyBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSBgc2tiYCwgYW5kIGFueSBhc3NvY2lhdGVkIGxvY2tpbmcgb3IgY29udGVudGlvbiBpc3N1ZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlc3VibWlzc2lvbiBtZWNoYW5pc20gaXMgZWZmaWNpZW50LCBkb2Vzbid0IGludHJvZHVjZSBleGNlc3NpdmUgbGF0ZW5jeSBvciBwb3RlbnRpYWwgZm9yIGxpdmVsb2NrcywgYW5kIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjU2LjgwMTkwNDYyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njg4NjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdWRwX3F1ZXVlX3Jjdl9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MjM1MD1zdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNDIyLVxcbm5ldC9pcHY0L3VkcC5jOjI0MjM6c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdWRwLmMtMjQyNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjU2Ljg1ODc5OTY0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzE2ODYwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiBrZXJuZWwgbmV0d29ya2luZyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGB1ZHBfcXVldWVfcmN2X3NrYmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYHVkcF9xdWV1ZV9yY3Zfc2tiYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIGEgY3JpdGljYWwgcGFydCBvZiBpdCwgZm9yIHJlY2VpdmluZyBVRFAgdHJhZmZpYy4gSSBrbm93IHRoZSBiYXNpY3M6IGEgU0tCIChTb2NrZXQgQnVmZmVyKSBjb250YWluaW5nIHRoZSBpbmNvbWluZyBVRFAgZGF0YWdyYW0gaXMgbGlrZWx5IGFscmVhZHkgY29uc3RydWN0ZWQsIHByb2JhYmx5IGJ5IHRoZSBoYXJkd2FyZSBvciBhIGxvd2VyLWxldmVsIGRyaXZlci4gTm93LCAqdGhpcyogaXMgd2hlcmUgd2UgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdCB3aXRoaW4gdGhlIFVEUCBsYXllciBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZTogd2hlcmUgdGhpcyBTS0IgZ2V0cyBlbnF1ZXVlZCwgaG93IGl0J3MgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzb2NrZXQgKGlmIGF0IGFsbCwgZGVwZW5kaW5nIG9uIHRoZSBjaXJjdW1zdGFuY2VzKSwgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgZm9yIGhhbmRsaW5nIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHJlc291cmNlIGxpbWl0YXRpb25zLiBJcyB0aGlzIGRpcmVjdC10by1zb2NrZXQsIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggYSBtb3JlIGdlbmVyaWMgUlggcGF0aD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjb25uZWN0ZWQgVURQIHNvY2tldHMsIG9yIHVuY29ubmVjdGVkIG9uZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGludm9sdmVkIOKAkyBpcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBxdWV1ZSBsZW5ndGhzIGFuZCBob3cgdGhhdCBhZmZlY3RzIG92ZXJhbGwgbGF0ZW5jeT8gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgVURQIHNvY2tldCBpdHNlbGYsIGFuZCBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gc3BvdCBwb3RlbnRpYWwgaXNzdWVzIGludm9sdmluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgYW5kIHdoZXRoZXIgYW55IGZsb3cgY29udHJvbCBtZWNoYW5pc21zIGFyZSB1dGlsaXplZC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MDAuODkwNDg3OTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDIzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDIzOlxcdHN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjI0MjQ6XFx0e1xcbjI0MjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5leHQsICpzZWdzO1xcbjI0MjY6XFx0XFx0aW50IHJldDtcXG4yNDI3OlxcdFxcbjI0Mjg6XFx0XFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcXG4yNDI5OlxcdFxcdFxcdHJldHVybiB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XFxuMjQzMDpcXHRcXG4yNDMxOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHVkcF9za2JfY2IpIFxcdTAwM2UgU0tCX0dTT19DQl9PRkZTRVQpO1xcbjI0MzI6XFx0XFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcXG4yNDMzOlxcdFxcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgdHJ1ZSk7XFxuMjQzNDpcXHRcXHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuZXh0KSB7XFxuMjQzNTpcXHRcXHRcXHRfX3NrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XFxuMjQzNjpcXHRcXG4yNDM3OlxcdFxcdFxcdHVkcF9wb3N0X3NlZ21lbnRfZml4X2NzdW0oc2tiKTtcXG4yNDM4OlxcdFxcdFxcdHJldCA9IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcXG4yNDM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbjI0NDA6XFx0XFx0XFx0XFx0aXBfcHJvdG9jb2xfZGVsaXZlcl9yY3UoZGV2X25ldChza2ItXFx1MDAzZWRldiksIHNrYiwgcmV0KTtcXG4yNDQxOlxcdFxcdH1cXG4yNDQyOlxcdFxcdHJldHVybiAwO1xcbjI0NDM6XFx0fVxcbjI0NDQ6XFx0XFxuMjQ0NTpcXHQvKiBGb3IgVENQIHNvY2tldHMsIHNrX3J4X2RzdCBpcyBwcm90ZWN0ZWQgYnkgc29ja2V0IGxvY2tcXG4yNDQ2OlxcdCAqIEZvciBVRFAsIHdlIHVzZSB4Y2hnKCkgdG8gZ3VhcmQgYWdhaW5zdCBjb25jdXJyZW50IGNoYW5nZXMuXFxuMjQ0NzpcXHQgKi9cXG4yNDQ4OlxcdGJvb2wgdWRwX3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuMjQ0OTpcXHR7XFxuMjQ1MDpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpvbGQ7XFxuMjQ1MTpcXHRcXG4yNDUyOlxcdFxcdGlmIChkc3RfaG9sZF9zYWZlKGRzdCkpIHtcXG4yNDUzOlxcdFxcdFxcdG9sZCA9IHVucmN1X3BvaW50ZXIoeGNoZyhcXHUwMDI2c2stXFx1MDAzZXNrX3J4X2RzdCwgUkNVX0lOSVRJQUxJWkVSKGRzdCkpKTtcXG4yNDU0OlxcdFxcdFxcdGRzdF9yZWxlYXNlKG9sZCk7XFxuMjQ1NTpcXHRcXHRcXHRyZXR1cm4gb2xkICE9IGRzdDtcXG4yNDU2OlxcdFxcdH1cXG4yNDU3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4yNDU4OlxcdH1cXG4yNDU5OlxcdFxcbjI0NjA6XFx0LypcXG4yNDYxOlxcdCAqXFx0TXVsdGljYXN0cyBhbmQgYnJvYWRjYXN0cyBnbyB0byBlYWNoIGxpc3RlbmVyLlxcbjI0NjI6XFx0ICpcXG4yNDYzOlxcdCAqXFx0Tm90ZTogY2FsbGVkIG9ubHkgZnJvbSB0aGUgQkggaGFuZGxlciBjb250ZXh0LlxcbjI0NjQ6XFx0ICovXFxuMjQ2NTpcXHRzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHVkcGhkciAgKnVoLFxcbjI0Njc6XFx0XFx0XFx0XFx0XFx0ICAgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyKVxcbjI0Njg6XFx0e1xcbjI0Njk6XFx0XFx0c3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUgPSBuZXQtXFx1MDAzZWlwdjQudWRwX3RhYmxlO1xcbjI0NzA6XFx0XFx0dW5zaWduZWQgaW50IGhhc2gyLCBoYXNoMl9hbnksIG9mZnNldDtcXG4yNDcxOlxcdFxcdHVuc2lnbmVkIHNob3J0IGhudW0gPSBudG9ocyh1aC1cXHUwMDNlZGVzdCk7XFxuMjQ3MjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2ssICpmaXJzdCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjAwLjg5MDY1NjU5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU3MjM3Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8uIFRoZSBpbW1lZGlhdGUgdGhvdWdodCB0aGF0J3Mgc3VyZmFjaW5nIGlzIHRoYXQgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgbGlrZWx5IHRoZSBrZXkgZnVuY3Rpb24uIEl0J3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGhvbGQgdGhlIGFuc3dlci4gSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSBhbmQgdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSByZXR1cm4gcGF0aHMgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgcmV0dXJuIHZhbHVlIEkgYW0gc2VlaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MDMuODQ3ODk2NDQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdHN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yMzUxOlxcdHtcXG4yMzUyOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuMjM1MzpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcXG4yMzU0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4yMzU1OlxcdFxcbjIzNTY6XFx0XFx0LypcXG4yMzU3OlxcdFxcdCAqXFx0Q2hhcmdlIGl0IHRvIHRoZSBzb2NrZXQsIGRyb3BwaW5nIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLlxcbjIzNTg6XFx0XFx0ICovXFxuMjM1OTpcXHRcXHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcXG4yMzYwOlxcdFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xcbjIzNjE6XFx0XFx0XFx0Z290byBkcm9wO1xcbjIzNjI6XFx0XFx0fVxcbjIzNjM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4yMzY0OlxcdFxcbjIzNjU6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnVkcF9lbmNhcF9uZWVkZWRfa2V5KSBcXHUwMDI2XFx1MDAyNlxcbjIzNjY6XFx0XFx0ICAgIFJFQURfT05DRSh1cC1cXHUwMDNlZW5jYXBfdHlwZSkpIHtcXG4yMzY3OlxcdFxcdFxcdGludCAoKmVuY2FwX3Jjdikoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4yMzY4OlxcdFxcbjIzNjk6XFx0XFx0XFx0LypcXG4yMzcwOlxcdFxcdFxcdCAqIFRoaXMgaXMgYW4gZW5jYXBzdWxhdGlvbiBzb2NrZXQgc28gcGFzcyB0aGUgc2tiIHRvXFxuMjM3MTpcXHRcXHRcXHQgKiB0aGUgc29ja2V0J3MgdWRwX2VuY2FwX3JjdigpIGhvb2suIE90aGVyd2lzZSwganVzdFxcbjIzNzI6XFx0XFx0XFx0ICogZmFsbCB0aHJvdWdoIGFuZCBwYXNzIHRoaXMgdXAgdGhlIFVEUCBzb2NrZXQuXFxuMjM3MzpcXHRcXHRcXHQgKiB1cC1cXHUwMDNlZW5jYXBfcmN2KCkgcmV0dXJucyB0aGUgZm9sbG93aW5nIHZhbHVlOlxcbjIzNzQ6XFx0XFx0XFx0ICogPTAgaWYgc2tiIHdhcyBzdWNjZXNzZnVsbHkgcGFzc2VkIHRvIHRoZSBlbmNhcFxcbjIzNzU6XFx0XFx0XFx0ICogICAgaGFuZGxlciBvciB3YXMgZGlzY2FyZGVkIGJ5IGl0LlxcbjIzNzY6XFx0XFx0XFx0ICogXFx1MDAzZTAgaWYgc2tiIHNob3VsZCBiZSBwYXNzZWQgb24gdG8gVURQLlxcbjIzNzc6XFx0XFx0XFx0ICogXFx1MDAzYzAgaWYgc2tiIHNob3VsZCBiZSByZXN1Ym1pdHRlZCBhcyBwcm90byAtTlxcbjIzNzg6XFx0XFx0XFx0ICovXFxuMjM3OTpcXHRcXG4yMzgwOlxcdFxcdFxcdC8qIGlmIHdlJ3JlIG92ZXJseSBzaG9ydCwgbGV0IFVEUCBoYW5kbGUgaXQgKi9cXG4yMzgxOlxcdFxcdFxcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cXHUwMDNlZW5jYXBfcmN2KTtcXG4yMzgyOlxcdFxcdFxcdGlmIChlbmNhcF9yY3YpIHtcXG4yMzgzOlxcdFxcdFxcdFxcdGludCByZXQ7XFxuMjM4NDpcXHRcXG4yMzg1OlxcdFxcdFxcdFxcdC8qIFZlcmlmeSBjaGVja3N1bSBiZWZvcmUgZ2l2aW5nIHRvIGVuY2FwICovXFxuMjM4NjpcXHRcXHRcXHRcXHRpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxcbjIzODc6XFx0XFx0XFx0XFx0XFx0Z290byBjc3VtX2Vycm9yO1xcbjIzODg6XFx0XFxuMjM4OTpcXHRcXHRcXHRcXHRyZXQgPSBlbmNhcF9yY3Yoc2ssIHNrYik7XFxuMjM5MDpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4yMzkxOlxcdFxcdFxcdFxcdFxcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5EQVRBR1JBTVMpO1xcbjIzOTI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1yZXQ7XFxuMjM5MzpcXHRcXHRcXHRcXHR9XFxuMjM5NDpcXHRcXHRcXHR9XFxuMjM5NTpcXHRcXG4yMzk2OlxcdFxcdFxcdC8qIEZBTExUSFJPVUdIIC0tIGl0J3MgYSBVRFAgUGFja2V0ICovXFxuMjM5NzpcXHRcXHR9XFxuMjM5ODpcXHRcXG4yMzk5OlxcdFxcdHByZWZldGNoKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjAzLjg0ODA2NjU4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUyMzkxMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURQIE11bHRpY2FzdCBEZWxpdmVyeSBQYXRoKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHVwLVx1MDAzZWVuY2FwX3JjdigpYCBpcyB0aGUga2V5LiBJZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBsZXNzIHRoYW4gemVybywgSSBrbm93IHRoZSBgc2tiYCBuZWVkcyB0byBiZSByZXN1Ym1pdHRlZCB3aXRoIGEgcHJvdG9jb2wgYC1OYC4gIFJpZ2h0LCBhbmQgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgZ2l2ZXMgYmFjayB0aGUgbmVnYXRpdmUgb2YgdGhlIHJldHVybiB2YWx1ZSAoYC1yZXRgKSB3aGVuIGl0J3MgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uXG5cblNvLCBpZiBgZW5jYXBfcmN2YCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCB0aGVuIHJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIgKGAtcmV0YCkuIFRoYXQgbWVhbnMgYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbHNvIHJldHVybnMgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBbmQgdWx0aW1hdGVseSwgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgcmVjZWl2ZXMgdGhpcyBwb3NpdGl2ZSB2YWx1ZS5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGhhZCB0aGlzIGxvZ2ljOiBpdCB3b3VsZCBjYWxsIGB1ZHBfcXVldWVfcmN2X3NrYmAsIGFuZCBpZiB0aGF0IHJldHVybmVkIGEgcG9zaXRpdmUgdmFsdWUsIHRoZSBgc2tiYCB3YXMgY29uc3VtZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgYSBwcm9ibGVtISBJbnN0ZWFkIG9mIHJlc3VibWl0dGluZyBpdCBhcyB3ZSBpbnRlbmRlZCwgd2Ugd2VyZSBqdXN0IHRocm93aW5nIGl0IGF3YXkuXG5cbk5vdywgd2l0aCB0aGlzIHBhdGNoLCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBjYWxscyBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhbmQsIGNydWNpYWxseSwgaWYgYHJldCBcdTAwM2UgMGAsIGl0ICpyZXR1cm5zKiBgLXJldGAuICBTbywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LCBzaWduYWxpbmcgdGhlIG5lZWQgZm9yIHJlc3VibWlzc2lvbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrOiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyByZXR1cm5pbmcgYSBuZWdhdGl2ZSB2YWx1ZSwgYXMgZXhwZWN0ZWQsIHRvIGluZGljYXRlIHJlc3VibWlzc2lvbi4gTm93LCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hvIGNhbGxzIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTowOS45MDA0NjAxNzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDExMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdWRwNF9saWJfbWNhc3RfZGVsaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC91ZHAuYz0yNDQ4PWJvb2wgdWRwX3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNDY0LSAqL1xcbm5ldC9pcHY0L3VkcC5jOjI0NjU6c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3VkcC5jLTI0NjYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI1OTE9aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI2NDktXFx0aWYgKHJ0LVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpXFxubmV0L2lwdjQvdWRwLmM6MjY1MDpcXHRcXHRyZXR1cm4gX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKG5ldCwgc2tiLCB1aCwgc2FkZHIsIGRhZGRyKTtcXG5uZXQvaXB2NC91ZHAuYy0yNjUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTowOS45NTU4NzU3MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MTk1ODU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFJldHVybiBWYWx1ZSBvZiBgdWRwX3JjdmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFVEUCByZWNlaXZlIHBhdGguIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYHVkcF9yY3ZgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCwgb2YgY291cnNlLCBpc24ndCBqdXN0ICp3aGF0KiBoYXBwZW5zLCBidXQgdGhlICpyZXN1bHQqIG9mIHRoZSBmdW5jdGlvbi4gV2hhdCBkb2VzIGB1ZHBfcmN2YCAqdGVsbCogbWU/IFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkIGluIGl0cyByZXR1cm4gdmFsdWU/XG5cbkknbSB0aGlua2luZzogaXMgaXQgYSBzaW1wbGUgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgYW5kIGlmIHNvLCBob3cgZ3JhbnVsYXIgaXMgdGhlIGluZm9ybWF0aW9uPyBEb2VzIGl0IHJldHVybiBhIHBvaW50ZXIgdG8gYSBkYXRhZ3JhbSwgYW5kIGlmIHNvLCBob3cgaXMgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlZD8gRG9lcyBpdCBoYXZlIHNpZGUgZWZmZWN0cz8gSXMgdGhlcmUgYSBzdWJ0bGUgc3RhdGUgY2hhbmdlIHRoYXQgaW1wYWN0cyBzdWJzZXF1ZW50IGNhbGxzPyBBcmUgdGhlcmUgZGlmZmVyZW50IHJldHVybiBwYXRocyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSdzIGN1cnJlbnQgY29uZGl0aW9uIGFuZCB3aGF0IGZhY3RvcnMgYXJlIGNvbnNpZGVyZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY2FsbCBzaG91bGQgYmUgaGFuZGxlZC5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOiBXaGF0IGFyZSB0aGUgcG9zc2libGUgc3RhdGVzIGZvbGxvd2luZyB0aGUgZnVuY3Rpb27igJlzIGNhbGw/IFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2Ugc3RhdGVzIG9uIHRoZSBrZXJuZWwgYW5kIHRoZSBhcHBsaWNhdGlvbj8gTXkgZ29hbCBoZXJlIGlzIGEgZnVsbCBhbmQgZGVlcCBhcHByZWNpYXRpb24gb2YgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToxMy4xMjc4MzYzMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1OTEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1OTE6XFx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yNTkyOlxcdHtcXG4yNTkzOlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbjI1OTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMjU5NTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xcbjI1OTY6XFx0XFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcXG4yNTk3OlxcdFxcdF9fYmUzMiBzYWRkciwgZGFkZHI7XFxuMjU5ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4yNTk5OlxcdFxcdGJvb2wgcmVmY291bnRlZDtcXG4yNjAwOlxcdFxcdGludCBkcm9wX3JlYXNvbjtcXG4yNjAxOlxcdFxcbjI2MDI6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4yNjAzOlxcdFxcbjI2MDQ6XFx0XFx0LypcXG4yNjA1OlxcdFxcdCAqICBWYWxpZGF0ZSB0aGUgcGFja2V0LlxcbjI2MDY6XFx0XFx0ICovXFxuMjYwNzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpKVxcbjI2MDg6XFx0XFx0XFx0Z290byBkcm9wO1xcdFxcdC8qIE5vIHNwYWNlIGZvciBoZWFkZXIuICovXFxuMjYwOTpcXHRcXG4yNjEwOlxcdFxcdHVoICAgPSB1ZHBfaGRyKHNrYik7XFxuMjYxMTpcXHRcXHR1bGVuID0gbnRvaHModWgtXFx1MDAzZWxlbik7XFxuMjYxMjpcXHRcXHRzYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4yNjEzOlxcdFxcdGRhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbjI2MTQ6XFx0XFxuMjYxNTpcXHRcXHRpZiAodWxlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjI2MTY6XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYxNzpcXHRcXG4yNjE4OlxcdFxcdGlmICh1bGVuIFxcdTAwM2Mgc2l6ZW9mKCp1aCkpXFxuMjYxOTpcXHRcXHRcXHRnb3RvIHNob3J0X3BhY2tldDtcXG4yNjIwOlxcdFxcbjI2MjE6XFx0XFx0aWYgKHVsZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbjI2MjI6XFx0XFx0XFx0aWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHVsZW4pKVxcbjI2MjM6XFx0XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbjI2MjY6XFx0XFx0fVxcbjI2Mjc6XFx0XFxuMjYyODpcXHRcXHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXFxuMjYyOTpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMjYzMDpcXHRcXG4yNjMxOlxcdFxcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cXHUwMDNlc291cmNlLCBkYWRkciwgdWgtXFx1MDAzZWRlc3QsXFxuMjYzMjpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZWZjb3VudGVkLCB1ZHBfZWhhc2hmbik7XFxuMjYzMzpcXHRcXHRpZiAoSVNfRVJSKHNrKSlcXG4yNjM0OlxcdFxcdFxcdGdvdG8gbm9fc2s7XFxuMjYzNTpcXHRcXG4yNjM2OlxcdFxcdGlmIChzaykge1xcbjI2Mzc6XFx0XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xcbjI2Mzg6XFx0XFx0XFx0aW50IHJldDtcXG4yNjM5OlxcdFxcbjI2NDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZShzay1cXHUwMDNlc2tfcnhfZHN0KSAhPSBkc3QpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToxMy4xMjgwMDIwMzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MjU1MzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRFAgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgYHVkcF9yY3ZgIGZ1bmN0aW9uLiBTb21ldGhpbmcganVzdCB0cmlnZ2VyZWQgYSBjdXJpb3NpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIHJlYWxseSB3b3Jrcy4gQWgsIGhlcmUgaXQgaXMsIGxpbmUgMjY1MC4gSXQncyBjYWxsaW5nIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRpZyBkZWVwZXIgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgdGhpcyBjYWxsLiBMZXQgbWUgcmVyZWFkIHRoZSBlbnRpcmUgZnVuY3Rpb24gZmxvdy4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgbGVhZCB0byB0aGlzIG11bHRpY2FzdCBkZWxpdmVyeSBwYXRoLiBXaGF0IGFyZSB0aGUga2V5IGRlY2lzaW9uIHBvaW50cz8gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZml0cyBpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIFVEUCBwYWNrZXQgaGFuZGxpbmcuIEknbSBnb2luZyB0byBzdGFydCBieSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBmb2N1c2luZyBvbiBob3cgZGlmZmVyZW50IHBhY2tldCBjaGFyYWN0ZXJpc3RpY3MgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy4gSSB3YW50IHRoZSBmdWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToxNi4xODA1NTcyNTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NDE6XFx0XFx0XFx0XFx0dWRwX3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XFxuMjY0MjpcXHRcXG4yNjQzOlxcdFxcdFxcdHJldCA9IHVkcF91bmljYXN0X3Jjdl9za2Ioc2ssIHNrYiwgdWgpO1xcbjI2NDQ6XFx0XFx0XFx0aWYgKHJlZmNvdW50ZWQpXFxuMjY0NTpcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuMjY0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRpZiAocnQtXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcXG4yNjUwOlxcdFxcdFxcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRzayA9IF9fdWRwNF9saWJfbG9va3VwX3NrYihza2IsIHVoLVxcdTAwM2Vzb3VyY2UsIHVoLVxcdTAwM2VkZXN0KTtcXG4yNjUzOlxcdFxcdGlmIChzaylcXG4yNjU0OlxcdFxcdFxcdHJldHVybiB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcXG4yNjU1OlxcdG5vX3NrOlxcbjI2NTY6XFx0XFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpXFxuMjY1NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjY1ODpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbjI2NTk6XFx0XFxuMjY2MDpcXHRcXHQvKiBObyBzb2NrZXQuIERyb3AgcGFja2V0IHNpbGVudGx5LCBpZiBjaGVja3N1bSBpcyB3cm9uZyAqL1xcbjI2NjE6XFx0XFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4yNjYyOlxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbjI2NjU6XFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9OT1BPUlRTKTtcXG4yNjY2OlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxuMjY2NzpcXHRcXG4yNjY4OlxcdFxcdC8qXFxuMjY2OTpcXHRcXHQgKiBIbW0uICBXZSBnb3QgYW4gVURQIHBhY2tldCB0byBhIHBvcnQgdG8gd2hpY2ggd2VcXG4yNjcwOlxcdFxcdCAqIGRvbid0IHdhbm5hIGxpc3Rlbi4gIElnbm9yZSBpdC5cXG4yNjcxOlxcdFxcdCAqL1xcbjI2NzI6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcXG4yNjczOlxcdFxcdHJldHVybiAwO1xcbjI2NzQ6XFx0XFxuMjY3NTpcXHRzaG9ydF9wYWNrZXQ6XFxuMjY3NjpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbjI2Nzc6XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiVURQOiBzaG9ydCBwYWNrZXQ6IEZyb20gJXBJNDoldSAlZC8lZCB0byAlcEk0OiV1XFxcXG5cXFwiLFxcbjI2Nzg6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzYWRkciwgbnRvaHModWgtXFx1MDAzZXNvdXJjZSksXFxuMjY3OTpcXHRcXHRcXHRcXHQgICAgdWxlbiwgc2tiLVxcdTAwM2VsZW4sXFxuMjY4MDpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cXHUwMDNlZGVzdCkpO1xcbjI2ODE6XFx0XFx0Z290byBkcm9wO1xcbjI2ODI6XFx0XFxuMjY4MzpcXHRjc3VtX2Vycm9yOlxcbjI2ODQ6XFx0XFx0LypcXG4yNjg1OlxcdFxcdCAqIFJGQzExMjI6IE9LLiAgRGlzY2FyZHMgdGhlIGJhZCBwYWNrZXQgc2lsZW50bHkgKGFzIGZhciBhc1xcbjI2ODY6XFx0XFx0ICogdGhlIG5ldHdvcmsgaXMgY29uY2VybmVkLCBhbnl3YXkpIGFzIHBlciA0LjEuMy40IChNVVNUKS5cXG4yNjg3OlxcdFxcdCAqL1xcbjI2ODg6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVURQX0NTVU07XFxuMjY4OTpcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJVRFA6IGJhZCBjaGVja3N1bS4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbiAlZFxcXFxuXFxcIixcXG4yNjkwOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2FkZHIsIG50b2hzKHVoLVxcdTAwM2Vzb3VyY2UpLCBcXHUwMDI2ZGFkZHIsIG50b2hzKHVoLVxcdTAwM2VkZXN0KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MTYuMTgwNzQ5NDg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk4OTM5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgRGVlcCBEaXZlKipcblxuT2theSwgc28gYHVkcF9yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGluY29taW5nIFVEUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgZG9lcyBgdWRwX3JjdmAgYWN0dWFsbHkgKnJldHVybio/IFRoZSBjb2RlIGluZGljYXRlcyBpdCdzIHRpZWQgdG8gd2hhdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBkb2VzLiBUaGF0IHNlZW1zIGxpa2UgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbiBiZXR0ZXIuXG5cbk5vdywgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyB0aGUgb25lIHRoYXQgKnVzZXMqIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgdWRwX3JjdmAuIFRoaXMgbG9va3MgbGlrZSB0aGUgbmV4dCBzaWduaWZpY2FudCBwb2ludCBpbiB0aGUgY2hhaW4uIE15IGd1dCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBvcmNoZXN0cmF0ZXMgdGhlIGhpZ2hlci1sZXZlbCBwcm9jZXNzaW5nLCBvciBhdCBsZWFzdCBob3cgdGhlIHBhY2tldCBpcyB1c2VkLlxuXG5SaWdodCwgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyBsb2NhdGVkIGluIGBuZXQvaXB2NC9pcF9pbnB1dC5jYC4gTGV0J3MgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGF0IHJldHVybiB2YWx1ZSBhbmQgaG93IHRoZSBkZWxpdmVyeSBwcm9jZXNzIGlzIGhhbmRsZWQgaW4gdGhlIElQdjQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjIwLjkxMDY0NTY5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyODM4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9pbnB1dC5jPTE4OD1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGludCB0Y3BfdjRfcmN2KHN0cnVjdCBza19idWZmICopKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjE4OTp2b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMTkwLXtcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI0MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyNDE6XFx0aXBfcHJvdG9jb2xfZGVsaXZlcl9yY3UobmV0LCBza2IsIGlwX2hkcihza2IpLVxcdTAwM2Vwcm90b2NvbCk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yNDItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjIwLjk2ODkzMzg1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM1MTA2MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0J3Mgb24gdGhlIGRvY2tldC4uLiBBaCwgcmlnaHQsIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRpbWUgdG8gZ2V0IG15IHRlZXRoIGludG8gdGhpcyBvbmUuIEkga25vdyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IElQIHRyYWZmaWMgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgZXNwZWNpYWxseSByZWdhcmRpbmcgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGhvdyBpdCBpcyBpbXBhY3RpbmcgbmV0d29yayBwZXJmb3JtYW5jZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSByb2xlIGluIGRlbGl2ZXJpbmcgcGFja2V0cyB0byB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVycyBhZnRlciB0aGV5J3ZlIGJlZW4gcmVjZWl2ZWQuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRlbXVsdGlwbGV4aW5nLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGl0J3MgZG9uZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgUkNVLCBwYXJ0aWN1bGFybHkgdGhlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIGxvY2sgY29udGVudGlvbiDigJMgb3IsIHJhdGhlciwgdGhlIGF2b2lkYW5jZSB0aGVyZW9mLiBJIGFudGljaXBhdGUgdGhhdCBSQ1UgaXMgdXNlZCBoZXJlIHRvIG9wdGltaXplIHRoZSByZWFkIHBhdGhzLCBhbGxvd2luZyBmb3IgaGlnaC10aHJvdWdocHV0IHBhY2tldCBkZWxpdmVyeSB3aXRob3V0IGV4Y2Vzc2l2ZSBsb2NraW5nIG92ZXJoZWFkLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYmFsYW5jZSBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBjb25zaXN0ZW5jeS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjI0LjMwNDA0MjM1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODk6XFx0dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcXG4gMTkwOlxcdHtcXG4gMTkxOlxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgKmlwcHJvdDtcXG4gMTkyOlxcdFxcdGludCByYXcsIHJldDtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0cmVzdWJtaXQ6XFxuIDE5NTpcXHRcXHRyYXcgPSByYXdfbG9jYWxfZGVsaXZlcihza2IsIHByb3RvY29sKTtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0aXBwcm90ID0gcmN1X2RlcmVmZXJlbmNlKGluZXRfcHJvdG9zW3Byb3RvY29sXSk7XFxuIDE5ODpcXHRcXHRpZiAoaXBwcm90KSB7XFxuIDE5OTpcXHRcXHRcXHRpZiAoIWlwcHJvdC1cXHUwMDNlbm9fcG9saWN5KSB7XFxuIDIwMDpcXHRcXHRcXHRcXHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiAyMDE6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsXFxuIDIwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcXG4gMjAzOlxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjA0OlxcdFxcdFxcdFxcdH1cXG4gMjA1OlxcdFxcdFxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIDIwNjpcXHRcXHRcXHR9XFxuIDIwNzpcXHRcXHRcXHRyZXQgPSBJTkRJUkVDVF9DQUxMXzIoaXBwcm90LVxcdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxcbiAyMDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiKTtcXG4gMjA5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIxMDpcXHRcXHRcXHRcXHRwcm90b2NvbCA9IC1yZXQ7XFxuIDIxMTpcXHRcXHRcXHRcXHRnb3RvIHJlc3VibWl0O1xcbiAyMTI6XFx0XFx0XFx0fVxcbiAyMTM6XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcXG4gMjE0OlxcdFxcdH0gZWxzZSB7XFxuIDIxNTpcXHRcXHRcXHRpZiAoIXJhdykge1xcbiAyMTY6XFx0XFx0XFx0XFx0aWYgKHhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiAyMTc6XFx0XFx0XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTlVOS05PV05QUk9UT1MpO1xcbiAyMTg6XFx0XFx0XFx0XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsXFxuIDIxOTpcXHRcXHRcXHRcXHRcXHRcXHQgIElDTVBfUFJPVF9VTlJFQUNILCAwKTtcXG4gMjIwOlxcdFxcdFxcdFxcdH1cXG4gMjIxOlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfTk9QUk9UTyk7XFxuIDIyMjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMjM6XFx0XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcXG4gMjI0OlxcdFxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDIyNTpcXHRcXHRcXHR9XFxuIDIyNjpcXHRcXHR9XFxuIDIyNzpcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdHN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDIzMDpcXHR7XFxuIDIzMTpcXHRcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbiAyMzI6XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcXG4gMjMzOlxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9NRU0pO1xcbiAyMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIzNTpcXHRcXHR9XFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdHNrYl9jbGVhcl9kZWxpdmVyeV90aW1lKHNrYik7XFxuIDIzODpcXHRcXHRfX3NrYl9wdWxsKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MjQuMzA0MTQ1NjE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjA5NzMxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgdGhlIFJlc3VibWlzc2lvbiBMb2dpYyoqXG5cbk9rYXksIGhlcmUncyBob3cgdGhpcyBhbGwgcGllY2VzIHRvZ2V0aGVyIGluIG15IGhlYWQuIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAgaXMgdGhlIGtleSDigJMgaXQgZXhwbGljaXRseSBjaGVja3MgaWYgYHJldCBcdTAwM2MgMGAgYW5kLCBpZiBpdCBpcywgaXQgcmVzdWJtaXRzIHRoZSBwYWNrZXQgd2l0aCBgcHJvdG9jb2wgPSAtcmV0YC4gR290IGl0LiBUaGF0IG1lYW5zIHRoZSBgdWRwX3JjdmAgZnVuY3Rpb24gKmhhcyogdG8gcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgdG8ga2ljayBvZmYgdGhlIHJlc3VibWlzc2lvbiBwcm9jZXNzLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMuIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxpdmVyaW5nIG11bHRpY2FzdCBVRFAgcGFja2V0cywgYW5kIG5vdyBpdCByZXR1cm5zIGAtcmV0YCB3aGVuIGByZXQgXHUwMDNlIDBgLiBIYW5nIG9u4oCmIGB1ZHBfcXVldWVfcmN2X3NrYmAgKnJldHVybnMqIGEgcG9zaXRpdmUgdmFsdWUgdG8gc2lnbmFsIHJlc3VibWlzc2lvbiEgU28sIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIHRha2VzIHRoYXQgcG9zaXRpdmUgdmFsdWUgZnJvbSBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBuZWdhdGVzIGl0LCBhbmQgcmV0dXJucyB0aGUgbmVnYXRpdmUgcmVzdWx0LiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgcmVzdWx0aW5nIG5lZ2F0aXZlIHZhbHVlIHRoZW4gYnViYmxlcyB1cCB0byBgdWRwX3JjdmAuIFRoaXMgZWZmZWN0aXZlbHkgZmxhZ3MgYHVkcF9yY3ZgIHRvIGFsc28gcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSBuZWVkIHRvIHRyaWdnZXIgdGhlIHJlc3VibWlzc2lvbiBmcm9tIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRoZSB3aG9sZSBzeXN0ZW0gaXMgdXNpbmcgdGhlIHNpZ24gb2YgdGhlIHJldHVybiBjb2RlIGFzIGEgdHJpZ2dlci5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgSVB2NC4gTm93LCBmb3IgSVB2NiwgSSBuZWVkIHRvIGNoZWNrIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGluIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoZSBJUHY2IHBhdGggYWxpZ25zIHdpdGggdGhpcyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToyOS4yMjUxMjA5NjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzUyODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfaW5wdXQuYz0zOTg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDItICovXFxubmV0L2lwdjYvaXA2X2lucHV0LmM6NDAzOnZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNDA0LVxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzMtXFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MzQ6XFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCAwLCBmYWxzZSk7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToyOS4yODE0ODAxOTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2ODE5NjI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgOlxuXG4qKkFuYWx5emluZyBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZ2V0dGluZyBzaXR1YXRlZC4gXCJMZXQncyByZWFkIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLlwiIEp1c3Qgc3RhdGluZyB0aGUgb2J2aW91cywgZ2V0dGluZyBteSBtZW50YWwgZ2VhcnMgdHVybmluZy4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBjb250ZXh0IGlzIElQdjYgcHJvdG9jb2wgZGVsaXZlcnksIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBoaW50cyBhdCBzb21lIHNvcnQgb2YgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20gYmVpbmcgZW1wbG95ZWQuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgSSdtIGV4cGVjdGluZyB0byBzZWUgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24gYW5kIGhhbmRsaW5nIG9mIGRhdGEgc3RydWN0dXJlcywgbGlrZWx5IHJlbGF0ZWQgdG8gcm91dGluZyBvciBwYWNrZXQgcHJvY2Vzc2luZywgd2l0aGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlIFwiUkNVXCIgcGFydCBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgdGhlcmUncyBhIHN0cm9uZyBlbXBoYXNpcyBvbiBtaW5pbWl6aW5nIHJlYWQtc2lkZSBsb2NraW5nLCBhbmQgdGhhdCB3cml0ZXJzIGhhdmUgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIGNvb3JkaW5hdGUgY2hhbmdlcyBzbyBhcyBub3QgdG8gZGlzcnVwdCBjb25jdXJyZW50IHJlYWRlcnMuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBmdW5jdGlvbj8gV2hhdCBraW5kIG9mIGRhdGEgaXMgYmVpbmcgZGVsaXZlcmVkPyBNeSBndXQgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGhhbmRsaW5nIHRoZSBkaXNwYXRjaCBvZiBpbmNvbWluZyBJUHY2IHBhY2tldHMgdG8gdGhlaXIgYXBwcm9wcmlhdGUgdXBwZXItbGF5ZXIgcHJvdG9jb2xzLiBUaW1lIHRvIHJlYWQgYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTozMi42NDk2Nzg5ODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAzOlxcdHZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXFxuIDQwNDpcXHRcXHRcXHRcXHQgICAgICBib29sIGhhdmVfZmluYWwpXFxuIDQwNTpcXHR7XFxuIDQwNjpcXHRcXHRpbnQgZXh0aGRyX2NudCA9IElQNkNCKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2U0tCX0hPUEJZSE9QID8gMSA6IDA7XFxuIDQwNzpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmlwcHJvdDtcXG4gNDA4OlxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIDQwOTpcXHRcXHR1bnNpZ25lZCBpbnQgbmhvZmY7XFxuIDQxMDpcXHRcXHRTS0JfRFIocmVhc29uKTtcXG4gNDExOlxcdFxcdGJvb2wgcmF3O1xcbiA0MTI6XFx0XFxuIDQxMzpcXHRcXHQvKlxcbiA0MTQ6XFx0XFx0ICpcXHRQYXJzZSBleHRlbnNpb24gaGVhZGVyc1xcbiA0MTU6XFx0XFx0ICovXFxuIDQxNjpcXHRcXG4gNDE3OlxcdHJlc3VibWl0OlxcbiA0MTg6XFx0XFx0aWRldiA9IGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpO1xcbiA0MTk6XFx0XFx0bmhvZmYgPSBJUDZDQihza2IpLVxcdTAwM2VuaG9mZjtcXG4gNDIwOlxcdFxcdGlmICghaGF2ZV9maW5hbCkge1xcbiA0MjE6XFx0XFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKSlcXG4gNDIyOlxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDIzOlxcdFxcdFxcdG5leHRoZHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKVtuaG9mZl07XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdHJlc3VibWl0X2ZpbmFsOlxcbiA0Mjc6XFx0XFx0cmF3ID0gcmF3Nl9sb2NhbF9kZWxpdmVyKHNrYiwgbmV4dGhkcik7XFxuIDQyODpcXHRcXHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfcHJvdG9zW25leHRoZHJdKTtcXG4gNDI5OlxcdFxcdGlmIChpcHByb3QpIHtcXG4gNDMwOlxcdFxcdFxcdGludCByZXQ7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdFxcdGlmIChoYXZlX2ZpbmFsKSB7XFxuIDQzMzpcXHRcXHRcXHRcXHRpZiAoIShpcHByb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU5FVDZfUFJPVE9fRklOQUwpKSB7XFxuIDQzNDpcXHRcXHRcXHRcXHRcXHQvKiBPbmNlIHdlJ3ZlIHNlZW4gYSBmaW5hbCBwcm90b2NvbCBkb24ndFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0ICogYWxsb3cgZW5jYXBzdWxhdGlvbiBvbiBhbnkgbm9uLWZpbmFsXFxuIDQzNjpcXHRcXHRcXHRcXHRcXHQgKiBvbmVzLiBUaGlzIGFsbG93cyBmb28gaW4gVURQIGVuY2Fwc3VsYXRpb25cXG4gNDM3OlxcdFxcdFxcdFxcdFxcdCAqIHRvIHdvcmsuXFxuIDQzODpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNDM5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDQwOlxcdFxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcdFxcdH0gZWxzZSBpZiAoaXBwcm90LVxcdTAwM2VmbGFncyBcXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XFxuIDQ0MjpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyO1xcbiA0NDM6XFx0XFx0XFx0XFx0aW50IHNkaWYgPSBpbmV0Nl9zZGlmKHNrYik7XFxuIDQ0NDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRcXHRcXHQvKiBPbmx5IGRvIHRoaXMgb25jZSBmb3IgZmlyc3QgZmluYWwgcHJvdG9jb2wgKi9cXG4gNDQ3OlxcdFxcdFxcdFxcdGhhdmVfZmluYWwgPSB0cnVlO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxcbiA0NTE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcXG4gNDUyOlxcdFxcdFxcdFxcdGhkciA9IGlwdjZfaGRyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjMyLjY0OTc2NjI2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ2Mjk1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKipcblxuQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaGlzIGlzbid0IGp1c3QgYSBmdW5jdGlvbiBjYWxsOyBpdCdzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdGFjaywgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNwZWNpZmljIHJvbGUuIEdpdmVuIHRoZSBcInJjdVwiIHN1ZmZpeCwgSSBpbW1lZGlhdGVseSB0aGluayB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBvcGVyYXRpbmcgdW5kZXIgYSBSZWFkLUNvcHktVXBkYXRlIHBhcmFkaWdtLiBUaGVyZWZvcmUsIGl0IGlzIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBJUHY2IHByb3RvY29sJ3MgcmVjZWl2ZSBwYXRoLCBhbmQgbW9yZSBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBSQ1UgbWVjaGFuaXNtIHRvIGVuc3VyZSBzYWZlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIElQdjYgcGFja2V0cy4gSSBleHBlY3QgdG8gc2VlIGNhcmVmdWwgaGFuZGxpbmcgb2YgcG9pbnRlcnMgYW5kIGxpa2VseSBzb21lIHVzZSBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCB0byBwcm90ZWN0IGNyaXRpY2FsIHNlY3Rpb25zLCBvciBwb3NzaWJseSB0aGUgdXNhZ2Ugb2Ygc3BlY2lmaWMgUkNVIHByaW1pdGl2ZXMuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgZGVjaWRlcyB3aGljaCBwcm90b2NvbCBoYW5kbGVyIHRvIGludm9rZSwgYW5kIGhvdyBpdCBzYWZlbHkgdHJhbnNmZXJzIGRhdGEgdG8gdGhhdCBoYW5kbGVyLiBUaGUgbnVhbmNlcyBvZiBpdHMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbG9jayBjb250ZW50aW9uIGlzc3VlcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgaW4gYSBoaWdoLXRocm91Z2hwdXQgSVB2NiBlbnZpcm9ubWVudC4gS25vd2luZyB3aGVyZSBwYWNrZXRzIGFyZSBzYWZlbHkgcHJvY2Vzc2VkIHVzaW5nIHRoaXMgcGF0dGVybiB3aWxsIGJlIHVzZWZ1bCBmb3Igc2VjdXJpdHksIGVzcGVjaWFsbHkuIEkgd29uZGVyIGlmIGl0IHN1cHBvcnRzIGFueSBleHRlbnNpb25zIG9yIHNwZWNpYWwgZmVhdHVyZXMgcmVsYXRlZCB0byBSQ1UncyBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBUaW1lIHRvIGdldCB0byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjM2LjE5NjA2NDg1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUzOlxcdFxcbiA0NTQ6XFx0XFx0XFx0XFx0Lyogc2tiLVxcdTAwM2VkZXYgcGFzc2VkIG1heSBiZSBtYXN0ZXIgZGV2IGZvciB2cmZzLiAqL1xcbiA0NTU6XFx0XFx0XFx0XFx0aWYgKHNkaWYpIHtcXG4gNDU2OlxcdFxcdFxcdFxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgc2RpZik7XFxuIDQ1NzpcXHRcXHRcXHRcXHRcXHRpZiAoIWRldilcXG4gNDU4OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDU5OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDQ2MDpcXHRcXHRcXHRcXHRcXHRkZXYgPSBza2ItXFx1MDAzZWRldjtcXG4gNDYxOlxcdFxcdFxcdFxcdH1cXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIDQ2NDpcXHRcXHRcXHRcXHQgICAgIWlwdjZfY2hrX21jYXN0X2FkZHIoZGV2LCBcXHUwMDI2aGRyLVxcdTAwM2VkYWRkcixcXG4gNDY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aGRyLVxcdTAwM2VzYWRkcikgXFx1MDAyNlxcdTAwMjZcXG4gNDY2OlxcdFxcdFxcdFxcdCAgICAhaXB2Nl9pc19tbGQoc2tiLCBuZXh0aGRyLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpKSB7XFxuIDQ2NzpcXHRcXHRcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5BRERSRVJST1JTKTtcXG4gNDY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDY5OlxcdFxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcdFxcdH1cXG4gNDcxOlxcdFxcdFxcdGlmICghKGlwcHJvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTkVUNl9QUk9UT19OT1BPTElDWSkpIHtcXG4gNDcyOlxcdFxcdFxcdFxcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuIDQ3MzpcXHRcXHRcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgWEZSTV9QT0xJQ1kpO1xcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0NzU6XFx0XFx0XFx0XFx0fVxcbiA0NzY6XFx0XFx0XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gNDc3OlxcdFxcdFxcdH1cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0XFx0cmV0ID0gSU5ESVJFQ1RfQ0FMTF8yKGlwcHJvdC1cXHUwMDNlaGFuZGxlciwgdGNwX3Y2X3JjdiwgdWRwdjZfcmN2LFxcbiA0ODA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiKTtcXG4gNDgxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIDQ4MjpcXHRcXHRcXHRcXHRpZiAoaXBwcm90LVxcdTAwM2VmbGFncyBcXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XFxuIDQ4MzpcXHRcXHRcXHRcXHRcXHQvKiBOb3QgYW4gZXh0ZW5zaW9uIGhlYWRlciwgbW9zdCBsaWtlbHkgVURQXFxuIDQ4NDpcXHRcXHRcXHRcXHRcXHQgKiBlbmNhcHN1bGF0aW9uLiBVc2UgcmV0dXJuIHZhbHVlIGFzIG5leHRoZHJcXG4gNDg1OlxcdFxcdFxcdFxcdFxcdCAqIHByb3RvY29sIG5vdCBuaG9mZiAod2hpY2ggcHJlc3VtYWJseSBpc1xcbiA0ODY6XFx0XFx0XFx0XFx0XFx0ICogbm90IHNldCBieSBoYW5kbGVyKS5cXG4gNDg3OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA0ODg6XFx0XFx0XFx0XFx0XFx0bmV4dGhkciA9IHJldDtcXG4gNDg5OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzdWJtaXRfZmluYWw7XFxuIDQ5MDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA0OTE6XFx0XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KGV4dGhkcl9jbnQrKyBcXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpIHtcXG4gNDkyOlxcdFxcdFxcdFxcdFxcdFxcdFNLQl9EUl9TRVQocmVhc29uLCBJUFY2X1RPT19NQU5ZX0VYVEhEUlMpO1xcbiA0OTM6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0OTQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA0OTU6XFx0XFx0XFx0XFx0XFx0Z290byByZXN1Ym1pdDtcXG4gNDk2OlxcdFxcdFxcdFxcdH1cXG4gNDk3OlxcdFxcdFxcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcXG4gNDk4OlxcdFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xcbiA0OTk6XFx0XFx0XFx0fVxcbiA1MDA6XFx0XFx0fSBlbHNlIHtcXG4gNTAxOlxcdFxcdFxcdGlmICghcmF3KSB7XFxuIDUwMjpcXHRcXHRcXHRcXHRpZiAoeGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjM2LjE5NjIwMzIyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDg1MjA3MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBNdWx0aWNhc3QgUGFja2V0IFJlc3VibWlzc2lvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBJUHY2IGNvZGUgYW5kIEkndmUgZ290IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLiBJIHNlZSB0aGF0IGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGlzIHRoZSBrZXkgZnVuY3Rpb247IGl0IGNoZWNrcyBpZiB0aGUgcmV0dXJuIHZhbHVlLCBgcmV0YCwgZnJvbSBhIHByZXZpb3VzIHByb2Nlc3Npbmcgc3RlcCBpcyBncmVhdGVyIHRoYW4gemVyby4gSWYgaXQgaXMsIGl0IHJlc3VibWl0cyB0aGUgcGFja2V0LCB1c2luZyBgcmV0YCBhcyB0aGUgbmV4dCBoZWFkZXIgdmFsdWUuIFRoYXQncyB0aGUgdHJpZ2dlci4gU28sIHRvIG1ha2UgdGhpcyB3b3JrLCBgdWRwdjZfcmN2YCBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgaW5kaWNhdGluZyB0aGF0IHJlc3VibWlzc2lvbiBpcyBuZWNlc3NhcnkuXG5cbk5vdyBJJ20gZm9jdXNpbmcgb24gYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAgd2l0aGluIGBuZXQvaXB2Ni91ZHAuY2AuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBjYWxscyBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIGFuZCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgaXQgcmV0dXJucyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsZXIuIExvb2tpbmcgYXQgaG93IGB1ZHB2Nl9yY3ZgIGlzIGludm9rZWQsIGl0IG1ha2VzIHNlbnNlOyBpdCB3aWxsIHJldHVybiBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdGhlIG91dGVyIGxheWVyIHdpbGwgdHJpZ2dlciB0aGUgcmUtc3VibWlzc2lvbiB2aWEgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAuXG5cblRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZml4aW5nIGEgYnVnLiBFbmNhcHN1bGF0ZWQgbXVsdGljYXN0IHBhY2tldHMgd2VyZSBnZXR0aW5nIGRyb3BwZWQsIGJ1dCBub3cgdGhleSdsbCBiZSBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC4gVGhlIHRlc3Qgc2V0dXAgdXNlcyBGT1UgYW5kIEdSRVRBUCwgYXMgZXhwZWN0ZWQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gdGVzdCB0aGlzOiBgTkVUX0ZPVWAsIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBtaWdodCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlbWVudHMgZm9yIGBncmV0YXBgIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgTkVUX0lQR1JFX0JST0FEQ0FTVGAsIGJ1dCBmb3Igc3VyZSBJIG5lZWQgYElQVjZfR1JFYC4gTGV0IG1lIGdsYW5jZSBhdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2AgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6NDIuNjgxNDEzNjk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkyMzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0lQR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04OD1DT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjg5OkNPTkZJR19ORVRfSVBHUkU9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6OTA6Q09ORklHX05FVF9JUEdSRV9ERU1VWD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZy05MS1DT05GSUdfTkVUX0lQSVA9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTo0Mi43NTMzNDQ0NjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1Njg5NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIElQdjYgR1JFIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgSVB2NiBHUkUgY29uZmlndXJhdGlvbi4gSSdtIHRoaW5raW5nLCBcIklzIGBDT05GSUdfSVBWNl9HUkVgIGFjdHVhbGx5IHByZXNlbnQgYW5kIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50P1wiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIHN0b3JlZC4gVGhlIHR5cGljYWwgcGxhY2UgZm9yIHRoZXNlIHNvcnRzIG9mIGNoZWNrcyBpcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2AuIEknbGwgc3RhcnQgYnkgbG9va2luZyB0aGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9uIGlzIGV4cGxpY2l0bHkgc3RhdGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjQ1LjUxMDI0Mjk0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3NzU3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZfR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz00MD1DT05GSUdfSVBWNj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo0MTpDT05GSUdfSVBWNl9HUkU9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDItQ09ORklHX0lQVjZfSUxBPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6NDUuNTcxMDIzNzUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTM5NjY2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBmb3IgQ09ORklHX05FVF9GT1UgaW4gdGhlIFJpZ2h0IFBsYWNlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIFRpbWUgdG8gbWFrZSBzdXJlIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHdoZXJlIGl0J3Mgc3VwcG9zZWQgdG8gYmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX05FVF9GT1VgIGlzIHByZXNlbnQsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0IHJlc2lkZXMgd2l0aGluIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiAgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIGZvciBpdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgd2l0aGluIHRoZSBzZWxmdGVzdHMgZm9yIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0aCBJJ20gZ29pbmcgdG8gY2hlY2sgaXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBkaXZlIGludG8gYW55IGFjdHVhbCB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHJlbGF0ZWQgdG8gaXQuICBTbywgbGV0IG1lIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24gYW5kIGhhdmUgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjQ5LjgyNDk5MjU1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNzIwMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfRk9VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4NzpDT05GSUdfTkVUX0ZPVT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4ODpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTg5LUNPTkZJR19ORVRfSVBHUkU9bVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTo1MC4xMjU3MTg2NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5Njg1MDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRk9VIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBhcmUgYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYE5FVF9JUEdSRWAsIGFuZCBgSVBWNl9HUkVgLiBHb3QgaXQuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gVGhvc2UgYXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhcyB0aGF0J3MgYSBrZXkgcGFydCBvZiBVRFAgcHJvY2Vzc2luZywgYnV0IGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBpdCBpc24ndCB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEFuZCBzaW5jZSBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyBjYWxsZWQgc3BlY2lmaWNhbGx5IGZvciBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBVRFAgcGFja2V0cywgdGhhdCdzIHdoYXQgSSB3aWxsIHVzZS5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhhdCBGT1UtZW5jYXBzdWxhdGVkIG11bHRpY2FzdCBwYWNrZXRzIHdlcmUgaW5jb3JyZWN0bHkgY29uc3VtZWQgaW5zdGVhZCBvZiBiZWluZyBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciwgbGlrZSBHUkUuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJldHVybmluZyBhIHJlc3VibWl0IHJlcXVlc3QsIHBvc2l0aXZlIGZvciBJUHY2IGFuZCBuZWdhdGl2ZSBmb3IgSVB2NC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMuIEl0J3MgY3J1Y2lhbCB0aGF0IHdlIGZ1enogdGhpcyBhcmVhIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZXNlIG11bHRpY2FzdCBwYWNrZXRzIGFyZSByZXN1Ym1pdHRlZC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB3aGlsZSBJIGhhdmUgdGhlIGVzc2VudGlhbHMsIGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgbm8gb3RoZXIsIGxlc3Mgb2J2aW91cyBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYE5FVF9JUEdSRV9ERU1VWGAgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdpdGggYE5FVF9JUEdSRWAgb3IgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjU3LjcyMjU3MTE5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MjMyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzIxPWNvbmZpZyBORVRfRk9VXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxubmV0L2lwdjQvS2NvbmZpZy0zMzEtXFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjU3Ljc4NDMwMzAzM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE5NjcyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBpbnRlcm5hbHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbDpcblxuKipEZWx2aW5nIGludG8gSVB2NCBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgSVB2NCB0dW5uZWwgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHNwZWNpZmljIHBsYWNlIHRvIHN0YXJ0IHNlZW1zIHRvIGJlIGBuZXQvaXB2NC9LY29uZmlnYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGBORVRfRk9VX0lQX1RVTk5FTFNgLiBUaGlzIHN1Z2dlc3RzIEknbSBhZnRlciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVAtaW4tSVAgdHVubmVscywgbGlrZWx5IHRoZSBgZm91YCBtb2R1bGUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGNvbmZpZyBvcHRpb24gYW5kIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEknbSBwcm9iYWJseSBsb29raW5nIHRvIHNlZSBob3cgdGhlIG9wdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIGNlcnRhaW4gY29kZSBwYXRocywgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSAob3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZmVhdHVyZXMpLCBhbmQgd2hhdCBraW5kIG9mIGltcGFjdCBpdHMgYWN0aXZhdGlvbiBoYXMgb24gdGhlIG92ZXJhbGwgbmV0d29yayBzdGFjay4gSXQncyBhIGtleSBwaWVjZSBpbiBlbmFibGluZyB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIElQdjQgdHVubmVscywgc28gdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3J1Y2lhbC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGluc2lnaHQgaW50byBob3cgYE5FVF9GT1VfSVBfVFVOTkVMU2AgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgdHVubmVsIG1lY2hhbmlzbXMsIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgSVAgdHVubmVsaW5nIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTc4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MDEuMTAzOTc4NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMTpcXHRjb25maWcgTkVUX0ZPVVxcbiAzMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuIDMyMzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gMzI0OlxcdFxcdGhlbHBcXG4gMzI1OlxcdFxcdCAgRm9vIG92ZXIgVURQIGFsbG93cyBhbnkgSVAgcHJvdG9jb2wgdG8gYmUgZGlyZWN0bHkgZW5jYXBzdWxhdGVkXFxuIDMyNjpcXHRcXHQgIG92ZXIgVURQIGluY2x1ZGUgdHVubmVscyAoSVBJUCwgR1JFLCBTSVQpLiBCeSBlbmNhcHN1bGF0aW5nIGluIFVEUFxcbiAzMjc6XFx0XFx0ICBuZXR3b3JrIG1lY2hhbmlzbXMgYW5kIG9wdGltaXphdGlvbnMgZm9yIFVEUCAoc3VjaCBhcyBFQ01QXFxuIDMyODpcXHRcXHQgIGFuZCBSU1MpIGNhbiBiZSBsZXZlcmFnZWQgdG8gcHJvdmlkZSBiZXR0ZXIgc2VydmljZS5cXG4gMzI5OlxcdFxcbiAzMzA6XFx0Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbiAzMzE6XFx0XFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuIDMzMjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxcbiAzMzM6XFx0XFx0c2VsZWN0IE5FVF9GT1VcXG4gMzM0OlxcdFxcdGhlbHBcXG4gMzM1OlxcdFxcdCAgQWxsb3cgY29uZmlndXJhdGlvbiBvZiBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24gZm9yIElQIHR1bm5lbHMuXFxuIDMzNjpcXHRcXHQgIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBJUCB0dW5uZWxzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZVxcbiAzMzc6XFx0XFx0ICBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24uXFxuIDMzODpcXHRcXG4gMzM5OlxcdGNvbmZpZyBJTkVUX0FIXFxuIDM0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDowMS4xMDQwNjc3MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2NTk1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgTkVUX0ZPVV9JUF9UVU5ORUxTYCAqcmVxdWlyZXMqIGVpdGhlciBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgb3IgYElQVjZfU0lUYCB0byBiZSBlbmFibGVkLiBNYWtlcyBzZW5zZSwgaXQgbmVlZHMgc29tZSB1bmRlcmx5aW5nIElQIHR1bm5lbCBtZWNoYW5pc20uIEFuZCwgaWYgSSBlbmFibGUgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIGl0IGF1dG9tYXRpY2FsbHkgKnNlbGVjdHMqIGBORVRfRk9VYC4gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdDsgSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IGVuYWJsaW5nIGBORVRfRk9VYCBzZXBhcmF0ZWx5IGlmIEknbSB1c2luZyB0aG9zZSB0dW5uZWxzLlxuXG5UaGVyZWZvcmUsIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIGdldHRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIHRvIGp1c3QgZW5hYmxlIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIFRoYXQgc2hvdWxkIHNhdGlzZnkgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuXG5cbk5vdywgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYE5FVF9JUEdSRWAgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgZnVydGhlciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDowNC43ODA2NjUyNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0NjAxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUEdSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXFxubmV0L2lwdjQvS2NvbmZpZzoxOTI6Y29uZmlnIE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMTkzLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjA2LVxcbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiSVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MDQuODQyMTMxNzY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTI5MjgyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSBhbmQgdGhlIGBORVRfSVBHUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBpZiBpdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBleHBlcnQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY0IEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBuZXQvaXB2NC9LY29uZmlnYC4gSSdtIGZvY3VzaW5nIGluIG9uIHRoZSBgTkVUX0lQR1JFYCBvcHRpb24sIG5hdHVyYWxseS4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgY29uZmlnIHdpbGwgZGVmaW5lIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGdlbmVyaWMgcm91dGluZyBlbmNhcHN1bGF0aW9uIChHUkUpIHN1cHBvcnQgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBHaXZlbiBteSBmYW1pbGlhcml0eSwgSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYmxvY2ssIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIHRob3JvdWdoIHJldmlldyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkRlcGVuZGVuY2llcyoqOiBXaGF0IG90aGVyIGZlYXR1cmVzICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBsb2dpY2FsbHkgcmVsYXRlZCBmb3IgYE5FVF9JUEdSRWAgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcywgd2hlcmUgZW5hYmxpbmcgR1JFIHVubG9ja3MgYW5vdGhlciBjYXBhYmlsaXR5P1xuKiAgICoqRGVmYXVsdCBCZWhhdmlvcioqOiBXaGF0J3MgdGhlIGRlZmF1bHQgc3RhdGUgb2YgYE5FVF9JUEdSRWA/IElzIGl0IHR5cGljYWxseSBjb21waWxlZCBpbiBhcyBhIG1vZHVsZSwgb3IgaXMgaXQgZGlyZWN0bHkgbGlua2VkIGludG8gdGhlIGtlcm5lbCBieSBkZWZhdWx0PyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHByb3ZpZGVzIGEgc3Ryb25nIGhpbnQgYWJvdXQgaG93IGNyaXRpY2FsIHRoZSBtYWludGFpbmVycyBjb25zaWRlciB0aGlzIGZ1bmN0aW9uYWxpdHkuXG4qICAgKipIZWxwIFRleHQqKjogVGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcHRpb24gd2lsbCBiZSBpbnZhbHVhYmxlLiBJdCBzaG91bGQgc3VjY2luY3RseSBleHBsYWluIHRoZSBwdXJwb3NlIG9mIEdSRSwgaXRzIHVzZXMgKHR1bm5lbGluZywgZXRjLiksIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGhhdCdzIHdoZXJlIEkgY2FuIGdldCBhIGZlZWwgZm9yIGJlc3QgcHJhY3RpY2VzIG9yIGFueSBjYXV0aW9ucy5cbiogICAqKlRyaWdnZXJzKio6IEkgd291bGQgZXhwZWN0IHRvIHNlZSB0cmlnZ2VycyBoZXJlIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHksIGJhc2VkIG9uIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgd2lsbCBlbmFibGluZyBHUkUgdHJpZ2dlciBhIGNvbmZpZ3VyYXRpb24gZm9yIElQc2VjLCBhcyB0aGVzZSBvZnRlbiBnbyBoYW5kLWluLWhhbmQ/IENvbnZlcnNlbHksIHdpbGwgdGhlcmUgYmUgZGlzYWJsaW5nIHRyaWdnZXJzIGlmIGNlcnRhaW4gZmVhdHVyZXMgYXJlIGluY29tcGF0aWJsZT9cbiogICAqKkNvbnRleHQqKjogQXJlIHRoZXJlIGFueSBtZW50aW9ucyBvZiBzcGVjaWZpYyBHUkUgZmVhdHVyZXMsIGxpa2UgR1JFIG92ZXIgSVAsIG9yIEdSRSBvdmVyIElQdjY/IElmIHRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgZXh0ZW5kcyB0byBvdGhlciB0ZWNobm9sb2dpZXMsIHRoYXQncyB3aGF0IEknbGwgd2FudCB0byBmaW5kLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG9vLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gSSBleHBlY3QgdG8gZmluZCBgTkVUX0lQR1JFYCBpbiBhIGxvZ2ljYWwgcGxhY2UsIHByb2JhYmx5IG5lYXIgb3RoZXIgdHVubmVsaW5nIG9yIGVuY2Fwc3VsYXRpb24gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQncyBvZnRlbiBoZWxwZnVsIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBkaWZmZXJlbnQgb3B0aW9ucyBhcmUgaW50ZXJ0d2luZWQuIFVsdGltYXRlbHksIEknbSBhaW1pbmcgZm9yIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIGtub2IgY29udHJvbHMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgSVB2NCBuZXR3b3JraW5nIHdpdGhpbiB0aGUga2VybmVsLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgcXVpY2sgcmV2aWV3LCBidXQgYXMgYWx3YXlzLCB0aG9yb3VnaG5lc3MgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjA5Ljc5NTA2MjA2OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MjpcXHRjb25maWcgTkVUX0lQR1JFXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcXFwiXFxuIDE5NDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbiAxOTU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTk2OlxcdFxcdGhlbHBcXG4gMTk3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTk4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxOTk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDIwMDpcXHRcXHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXFxuIDIwMTpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgb2YgSVB2NCBvciBJUHY2IG92ZXIgZXhpc3RpbmcgSVB2NCBpbmZyYXN0cnVjdHVyZS5cXG4gMjAyOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZnVsIGlmIHRoZSBvdGhlciBlbmRwb2ludCBpcyBhIENpc2NvIHJvdXRlcjogQ2lzY29cXG4gMjAzOlxcdFxcdCAgbGlrZXMgR1JFIG11Y2ggYmV0dGVyIHRoYW4gdGhlIG90aGVyIExpbnV4IHR1bm5lbGluZyBkcml2ZXIgKFxcXCJJUFxcbiAyMDQ6XFx0XFx0ICB0dW5uZWxpbmdcXFwiIGFib3ZlKS4gSW4gYWRkaXRpb24sIEdSRSBhbGxvd3MgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uXFxuIDIwNTpcXHRcXHQgIHRocm91Z2ggdGhlIHR1bm5lbC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4gMjA4OlxcdFxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcXHUwMDI2XFx1MDAyNiBORVRfSVBHUkVcXG4gMjEwOlxcdFxcdGhlbHBcXG4gMjExOlxcdFxcdCAgT25lIGFwcGxpY2F0aW9uIG9mIEdSRS9JUCBpcyB0byBjb25zdHJ1Y3QgYSBicm9hZGNhc3QgV0FOIChXaWRlIEFyZWFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MDkuNzk1MTUwODU4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzE1ODY2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOZWNlc3NpdHkgb2YgYE5FVF9JUEdSRV9CUk9BRENBU1RgIHdpdGggYGdyZXRhcGAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uIHRocm91Z2ggYSB0dW5uZWwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZywgXCJBaGEhIGBORVRfSVBHUkVfQlJPQURDQVNUYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkgaGVyZS5cIiBUaGF0J3MgdHlwaWNhbGx5IHRoZSBmbGFnIHlvdSByZWFjaCBmb3IuIEJ1dCB0aGVuLCBhIHJlZCBmbGFnIHBvcHMgdXAuIFRoaXMgdGVzdOKApiBpdCdzIHVzaW5nIGBncmV0YXBgLiBgZ3JldGFwYCBpcyBhIGxheWVyIDIgdHVubmVsLCByaWdodD8gQW5kIG5vdyBJJ20gdGhpbmtpbmcsICpkb2VzKiBpdCAqYWN0dWFsbHkqIG5lZWQgYE5FVF9JUEdSRV9CUk9BRENBU1RgPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBhc3N1bXB0aW9ucyBJJ20gbWFraW5nIGFyZSBjb3JyZWN0LiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBncmV0YXBgIGl0c2VsZiwgYmVjYXVzZSB3aGV0aGVyIGl0J3MgbmVlZGVkIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIG9mIHRoYXQgdHVubmVsIHR5cGUuIFRpbWUgdG8gZGlnIGluIGFuZCByZS1ldmFsdWF0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjE0LjQ2NjczOTQxMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyNjY1MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JldGFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz0xNjg5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY5MDpcXHQua2luZFxcdFxcdD0gXFxcImdyZXRhcFxcXCIsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5MS1cXHQubWF4dHlwZVxcdD0gSUZMQV9HUkVfTUFYLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzE4LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MTk6c3RydWN0IG5ldF9kZXZpY2UgKmdyZXRhcF9mYl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzIwLVxcdFxcdFxcdFxcdFxcdHU4IG5hbWVfYXNzaWduX3R5cGUpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzYzLX1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzY0OkVYUE9SVF9TWU1CT0xfR1BMKGdyZXRhcF9mYl9kZXZfY3JlYXRlKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzY1LVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE3NjY9c3RhdGljIGludCBfX25ldF9pbml0IGlwZ3JlX3RhcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc2Ny17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTc2ODpcXHRyZXR1cm4gaXBfdHVubmVsX2luaXRfbmV0KG5ldCwgZ3JlX3RhcF9uZXRfaWQsIFxcdTAwMjZpcGdyZV90YXBfb3BzLCBcXFwiZ3JldGFwMFxcXCIpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NjktfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTg3MT1NT0RVTEVfQUxJQVNfUlROTF9MSU5LKFxcXCJncmVcXFwiKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxODcyOk1PRFVMRV9BTElBU19SVE5MX0xJTksoXFxcImdyZXRhcFxcXCIpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE4NzMtTU9EVUxFX0FMSUFTX1JUTkxfTElOSyhcXFwiZXJzcGFuXFxcIik7XFxubmV0L2lwdjQvaXBfZ3JlLmM9MTg3ND1NT0RVTEVfQUxJQVNfTkVUREVWKFxcXCJncmUwXFxcIik7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTg3NTpNT0RVTEVfQUxJQVNfTkVUREVWKFxcXCJncmV0YXAwXFxcIik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTg3Ni1NT0RVTEVfQUxJQVNfTkVUREVWKFxcXCJlcnNwYW4wXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjE0LjU0NjAxMDIzNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjAyNTg5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVBHUkUgQnJvYWRjYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZ3JldGFwYCwgaXQncyBwYXJ0IG9mIHRoZSBgaXBfZ3JlLmNgIG1vZHVsZSwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaGFuZGxlZC4gSXQncyBhIGtleSBzZXR0aW5nLCBhbmQgSSBuZWVkIGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgaW1wbGVtZW50ZWQuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gZGljdGF0ZSB0aGUgYmVoYXZpb3Igb2YgR1JFIGJyb2FkY2FzdCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDoxNy4xNDg2MDE2NDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzY2Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVxcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MzUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTM2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTkzNy1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05ODItXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTgzOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4NC1cXHQubmRvX29wZW5cXHRcXHQ9IGlwZ3JlX29wZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDM2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTAtXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTE6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Mi1cXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MTcuMjA5OTc1MjQzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUwMTI1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkdSRSBNdWx0aWNhc3QgYW5kIExheWVyIDIgQ29uZnVzaW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuIEkgYmVsaWV2ZSBpdCdzIGVzc2VudGlhbCBmb3IgbXVsdGljYXN0IEdSRSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIE15IGd1dCBzYXlzIHllcywgYnV0IGxldCdzIG1ha2Ugc3VyZS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiBJJ20gdGhpbmtpbmcgYWJvdXQgYGdyZXRhcGAgbm93LCBhbmQgdGhhdCdzIGEgKmxheWVyIDIqIGNvbnN0cnVjdCwgaXNuJ3QgaXQ/IElmIGl0J3MgYWN0aW5nIGFzIGEgYnJpZGdlLCBkb2VzIGl0IGV2ZW4gdXNlIHRoZSBzdGFuZGFyZCBgaXBncmVfb3BlbmAgZnVuY3Rpb24gdGhhdCBJJ20gZmFtaWxpYXIgd2l0aCBmcm9tIElQLWluLUdSRSB0dW5uZWxpbmc/IFRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgbGF5ZXIgMiBzZXR1cCBhbmQgdGhlIG1vcmUgY29tbW9uIElQIEdSRS5cblxuSSdtIHByb2JhYmx5IGdvaW5nIHRvIGZpbmQgdGhlIGtleSBpbiBgaXBncmVfdGFwX3NldHVwYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGFwIGludGVyZmFjZXMuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBjb2RlIGFuZCBjb25maXJtIGhvdyBsYXllciAyIEdSRSBpbnRlcmZhY2VzIGFyZSBpbml0aWFsaXplZC4gVGhhdCdzIHRoZSBsaWtlbHkgcGF0aHdheSB0byByZXNvbHZlIHRoaXMgdW5jZXJ0YWludHkgYW5kIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjAuNjI0OTg5NjgzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njc5NjI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGdyZV90YXBfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4Mi1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzgzOnN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODQte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTY4OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5My1cXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbCksXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY5NDpcXHQuc2V0dXBcXHRcXHQ9IGlwZ3JlX3RhcF9zZXR1cCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk1LVxcdC52YWxpZGF0ZVxcdD0gaXBncmVfdGFwX3ZhbGlkYXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDoyMC42OTE3OTQ0NThaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDkyMDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgY29kZSwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhbmQgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgaXBncmVfdGFwX3NldHVwYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGlwZ3JlX3RhcF9zZXR1cGAgZnVuY3Rpb24uIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGlzIHdoZXJlIHdlJ3JlIGNvbmZpZ3VyaW5nIGVpdGhlciBhbiBJUC1HUkUgdHVubmVsIG9yIHBlcmhhcHMgdGhlIHZpcnR1YWwgVEFQIGludGVyZmFjZSB0aGF0IHNpdHMgb24gdG9wIG9mIGl0LiBQcm9iYWJseSBib3RoLCBpZiB0aGUgbmFtZSBpcyBhcyBpdCBzb3VuZHMsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbnRlcmZhY2UgY3JlYXRpb24gYW5kIGJpbmRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIHR1bm5lbCBhbmQgdGFwLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIHNldHVwLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJmYWNlIGZsYWdzLCB0aGUgbmV0bGluayBpbnRlcmFjdGlvbnMsIGFuZCBob3cgdGhlIEdSRSBoZWFkZXIgaXMgY29uc3RydWN0ZWQsIGFuZCBob3cgaXQgaXMgY29ubmVjdGVkIHRvIGEgVEFQIGRldmljZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIGV2ZW4gd29yc2UsIGJ1Z3MuIEkgaG9wZSB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZCBiZWNhdXNlIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSB3aGF0IHRoZSBvcmlnaW5hbCBhdXRob3IncyBpbnRlbnRpb25zIHdlcmUgaW4gdGhlIHNldCB1cCBvZiB0aGUgZGV2aWNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSB0dW5uZWwgYW5kIHRhcCBhcmUgc2VjdXJlbHkgaW50ZWdyYXRlZCwgcGF5aW5nIGF0dGVudGlvbiB0byB1c2VyIHNwYWNlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjQuOTAyNzE3MzY4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzgzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzgzOlxcdHN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjEzODQ6XFx0e1xcbjEzODU6XFx0XFx0ZXRoZXJfc2V0dXAoZGV2KTtcXG4xMzg2OlxcdFxcdGRldi1cXHUwMDNlbWF4X210dSA9IDA7XFxuMTM4NzpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHNcXHQ9IFxcdTAwMjZncmVfdGFwX25ldGRldl9vcHM7XFxuMTM4ODpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9UWF9TS0JfU0hBUklORztcXG4xMzg5OlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFnc1xcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcbjEzOTA6XFx0XFx0aXBfdHVubmVsX3NldHVwKGRldiwgZ3JlX3RhcF9uZXRfaWQpO1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWMgaW50XFxuMTM5NDpcXHRpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKmRhdGFbXSlcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG4xMzk3OlxcdFxcbjEzOTg6XFx0XFx0aWYgKGlwZ3JlX25ldGxpbmtfZW5jYXBfcGFybXMoZGF0YSwgXFx1MDAyNmlwZW5jYXApKSB7XFxuMTM5OTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNDAwOlxcdFxcdFxcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXFx1MDAyNmlwZW5jYXApO1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjQuOTAyODM2MDM3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjIxMTg5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXJzOlxuXG4qKkFuYWx5emluZyBncmVfdGFwX25ldGRldl9vcHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgZ3JlX3RhcF9uZXRkZXZfb3BzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvcGVyYXRpb25hbCBkZXRhaWxzIG9mIHRoZSBHUkUgdGFwIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb24gcG9pbnRlcnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmU/IEkgbmVlZCB0byByZXZpZXcgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldHdvcmsgZHJpdmVyIGhhbmRsZXMgdGhlIEdSRSB0dW5uZWwgZW5kcG9pbnRzIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIExldCdzIHNlZSBob3cgdGhlIEdSRSBoZWFkZXIgaXMgcHJvY2Vzc2VkLCBlbmNhcHN1bGF0ZWQgYW5kIGRlY2Fwc3VsYXRlZCBhbmQgaG93IHRoZSB0dW5uZWxpbmcgbWVjaGFuaXNtIGlzIGludGVncmF0ZWQgYXQgdGhlIG5ldHdvcmsgZGV2aWNlIGxldmVsLiBUaGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciB0aGUgY29ycmVjdCBmb3J3YXJkaW5nIG9mIHBhY2tldHMgdGhyb3VnaCB0aGUgR1JFIHR1bm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHRhcCBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gVGltZSB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgcGFja2V0IGZsb3cuLi4gbGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjcuNzI0OTU3MjQyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA5NTMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJncmVfdGFwX25ldGRldl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTMyOT1zdGF0aWMgaW50IGdyZV90YXBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTMzNy1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzktXFx0Lm5kb19pbml0XFx0XFx0PSBncmVfdGFwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzgzPXN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4Ni1cXHRkZXYtXFx1MDAzZW1heF9tdHUgPSAwO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODc6XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzXFx0PSBcXHUwMDI2Z3JlX3RhcF9uZXRkZXZfb3BzO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODgtXFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH5JRkZfVFhfU0tCX1NIQVJJTkc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjI3Ljc5MTA1ODcyOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTExMDg1MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYGdyZV90YXBfbmV0ZGV2X29wc2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFuYWx5emUgYGdyZV90YXBfbmV0ZGV2X29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBjaGFpbiBvZiBhc3NvY2lhdGlvbnMgaW4gbXkgbWluZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucyBmb3IgR1JFIHR1bm5lbHMsIHNwZWNpZmljYWxseSB0aGUgXCJ0YXBcIiBpbnRlcmZhY2UgdmFyaWFudC4gVGhpcyBzdWdnZXN0cyBhIHVzZXItc3BhY2UgYWNjZXNzaWJsZSBpbnRlcmZhY2UsIGxpa2VseSBicmlkZ2luZyBHUkUgdHJhZmZpYyB0byBhIG1vcmUgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2UuIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgY29uc3RydWN0aW5nIGEgbGlzdCBvZiB0aGUga2V5IG9wZXJhdGlvbnMgSSBleHBlY3QgdG8gZmluZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmU6XG5cbiogICAqKmBuZG9faW5pdGAqKjogSG93IGlzIHRoaXMgaW50ZXJmYWNlIGluaXRpYWxpemVkPyBXaGF0IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkPyBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHBsaWVkPyBBcmUgdGhlcmUgYW55IGtlcm5lbCBtb2R1bGUgZGVwZW5kZW5jaWVzPyBJIHdvdWxkIGV4cGVjdCB0byBzZWUgc2V0dXAgb2YgdGhlIGRldmljZSdzIHByaXZhdGUgZGF0YSwgYW5kIGFueSBuZXRsaW5rIGF0dHJpYnV0ZXMuXG4qICAgKipgbmRvX29wZW5gIGFuZCBgbmRvX3N0b3BgKio6IEVzc2VudGlhbCBmb3IgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cCBhbmQgZG93bi4gV2hhdCdzIHRoZSBzdGF0ZSBtYW5hZ2VtZW50IGhlcmU/IEFyZSB0aGVyZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQgdG8gcHJvdGVjdCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIHdoZW4gdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcywgZS5nLiBzZXR0aW5nIHVwIGJyaWRnZSBkZXZpY2VzLlxuKiAgICoqYG5kb19zdGFydF94bWl0YCoqOiBUaGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgaG93IGFyZSBwYWNrZXRzIHRyYW5zbWl0dGVkIHRocm91Z2ggdGhpcyBHUkUgdHVubmVsPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb24gKGxpa2VseSBvcHRpb25hbCksIGFuZCByb3V0ZSBsb29rdXAvZm9yd2FyZGluZy4gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBNVFUgaGFuZGxpbmcsIG9yIGZyYWdtZW50YXRpb24/IERvZXMgdGhpcyB1dGlsaXplIHRoZSBnZW5lcmljIEdSRSBlbmNhcHN1bGF0aW9uIGNvZGUgb3IgZG9lcyB0aGlzIHBlcmZvcm0gaXQncyBvd24gZW5jYXBzdWxhdGlvbj8gV2hhdCBsb2NraW5nIGlzIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHk/XG4qICAgKipgbmRvX2RvX2lvY3RsYCoqOiBUaGlzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIHRhcCBpbnRlcmZhY2UuIFdoYXQgaW9jdGwgY29tbWFuZHMgYXJlIHN1cHBvcnRlZD8gU2V0dGluZyB0aGUgdHVubmVsIGVuZHBvaW50cywga2V5LCBpbnRlcmZhY2UgdHlwZSwgYnJpZGdlIHBvcnRzLCBldGMuIEkgZXhwZWN0IGEgY2FyZWZ1bCBoYW5kbGluZyBvZiB1c2VyLXNwYWNlIGRhdGEsIHdpdGggdmFsaWRhdGlvbiBhbmQgcG90ZW50aWFsbHkgZXJyb3IgaGFuZGxpbmcuXG4qICAgKipgbmRvX2dldF9zdGF0czY0YCoqOiBPZiBjb3Vyc2UsIHdlIG5lZWQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gV2hhdCBjb3VudGVycyBhcmUgYmVpbmcgdHJhY2tlZD8gUGFja2V0cyBpbi9vdXQsIGJ5dGVzIGluL291dCwgZXJyb3JzLCBkcm9wcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJ2xsIGJlIGludGVyZXN0ZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgR1JFLXNwZWNpZmljIGNvdW50ZXJzLCBsaWtlIHR1bm5lbCBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gZXJyb3JzLlxuKiAgICoqYG5kb19jaGFuZ2VfbXR1YCoqOiBBIGNyaXRpY2FsIG9uZS4gTVRVIGhhbmRsaW5nIGNhbiBiZSB0cmlja3kgd2l0aCB0dW5uZWxzLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGlzIGludGVyZmFjZSBhZGp1c3RzIHRoZSBNVFUgb2YgdGhlIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UsIGFuZCB3aGV0aGVyIGZyYWdtZW50YXRpb24gaXMgZW5hYmxlZCwgdG8gaGFuZGxlIHRoZSBhZGRpdGlvbmFsIG92ZXJoZWFkIG9mIHRoZSBHUkUgZW5jYXBzdWxhdGlvbi4gQXJlIHRoZXJlIGFueSBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIHJldHVybmVkIGhlcmU/XG4qICAgKipgbmRvX3ZhbGlkYXRlX2FkZHJgKio6IEVzc2VudGlhbCBmb3IgcHJldmVudGluZyBjb25maWd1cmF0aW9uIGVycm9ycyBvciBhdHRhY2tzIHRocm91Z2ggaW52YWxpZCBhZGRyZXNzZXMuIFdoYXQgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzP1xuKiAgICoqYG5kb19zZXRfbWFjX2FkZHJlc3NgKio6IFRoaXMgc2hvdWxkIGJlIGZhaXJseSBzdGFuZGFyZCwgYnV0IEkgd2lsbCB3YW50IHRvIHNlZSBpZiB0aGlzIGRvZXMgYW55dGhpbmcgdG8gZW5zdXJlIHRoYXQgTUFDIGFkZHJlc3NlcyBhcmUgYXBwcm9wcmlhdGVseSBwcm9wYWdhdGVkLCBvciBoYW5kbGVkLlxuKiAgICoqYG5kb19uZWlnaF9zZXR1cGAqKjogSG93IGFyZSBuZWlnaGJvcnMgaGFuZGxlZD8gQXJlIEFSUCByZXF1ZXN0cyBpbnRlcmNlcHRlZCBhbmQgbW9kaWZpZWQ/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrJ3MgbmVpZ2hib3IgZGlzY292ZXJ5IG1lY2hhbmlzbXM/XG4qICAgKipgbmRvX3ZsYW5fcnhfYWRkX3ZpZGAgYW5kIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAqKjogQW55IFZMQU4gc3VwcG9ydD8gVGhpcyBpcyBjcnVjaWFsIGlmIHdlIGV4cGVjdCB0aGlzIEdSRSB0YXAgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGEgbGFyZ2VyIHZpcnR1YWxpemVkIG5ldHdvcmsuXG4qICAgKipgbmRvX3R4X3RpbWVvdXRgKio6IEhvdyBkb2VzIHRoZSBkcml2ZXIgaGFuZGxlIHRyYW5zbWlzc2lvbiB0aW1lb3V0cz8gQXJlIHRoZXJlIGFueSByZWNvdmVyeSBtZWNoYW5pc21zP1xuXG5NeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBob3cgaXQgaGFuZGxlcyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uLCBhbmQgaG93IGl0J3MgY29uZmlndXJlZCBhbmQgbWFuYWdlZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB3ZWxsIHRoaXMgaW1wbGVtZW50YXRpb24gaG9sZHMgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MzMuOTAyMTQ2MDMyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xcbjEzMzk6XFx0XFx0Lm5kb19pbml0XFx0XFx0PSBncmVfdGFwX2luaXQsXFxuMTM0MDpcXHRcXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG4xMzQxOlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZ3JlX3RhcF94bWl0LFxcbjEzNDI6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBldGhfbWFjX2FkZHIsXFxuMTM0MzpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbjEzNDQ6XFx0XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4xMzQ1OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxuMTM0NjpcXHRcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbjEzNDc6XFx0XFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbjEzNDg6XFx0fTtcXG4xMzQ5OlxcdFxcbjEzNTA6XFx0c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMzUxOlxcdHtcXG4xMzUyOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuMTM1MzpcXHRcXG4xMzU0OlxcdFxcdGlmICh0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIgPT0gMClcXG4xMzU1OlxcdFxcdFxcdHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gPSA0OyAvKiA0LWJ5dGUgR1JFIGhkci4gKi9cXG4xMzU2OlxcdFxcdGVsc2VcXG4xMzU3OlxcdFxcdFxcdHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gPSA4OyAvKiA4LWJ5dGUgR1JFIGhkci4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MzMuOTAyMjg4MjgyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIxMDE1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgR1JFIE11bHRpY2FzdCBQYWNrZXQgUmVjZXB0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBHUkUgbXVsdGljYXN0IHBhY2tldHMgYXJlIGhhbmRsZWQgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBncmVfdGFwX25ldGRldl9vcHNgIHN0cnVjdHVyZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGBuZG9fb3BlbmAgb3BlcmF0aW9uLiBUaGF0J3MgYSBiaXQgb2RkLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgc2hvd3N0b3BwZXIuIE15IHJlYWwgY29uY2VybiBpcyB0aGlzIGBORVRfSVBHUkVfQlJPQURDQVNUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgZ3JlX3JjdmAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBncmVfcmN2YCwgYW5kIGl0IG1ha2VzIG1lIHRoaW5rIHRoYXQgd2l0aG91dCB0aGF0IGNvbmZpZ3VyYXRpb24sIG11bHRpY2FzdCBHUkUgcGFja2V0cyBtaWdodCBiZSBzaWxlbnRseSBkcm9wcGVkLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG9uIHRoZSByaWdodCB0cmFjay4gYGdyZV9yY3ZgIGlzIGZvciBMYXllciAzIEdSRSwgYW5kIEkgYW0gbm90IGNlcnRhaW4gaWYgYGdyZXRhcGAgdXNlcyBgZ3JlX3JjdmAuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIGRhdGEgZmxvdyBiZXR3ZWVuIGBncmV0YXBgIGFuZCBgZ3JlX3JjdmAgdG8gY29uZmlybSB3aGV0aGVyIGBncmV0YXBgIHdpbGwgcHJvcGVybHkgcmVjZWl2ZSB0aGUgcGFja2V0cy4gSSBtdXN0IGNoZWNrIGBncmVfcmN2YCBhbmQgc2VlIGhvdyBgZ3JldGFwYCB1c2VzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjM3LjczNDM5MzZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHRzdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdHN0cnVjdCB0bmxfcHRrX2luZm8gdHBpO1xcbiA0NDM6XFx0XFx0Ym9vbCBjc3VtX2VyciA9IGZhbHNlO1xcbiA0NDQ6XFx0XFx0aW50IGhkcl9sZW47XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdCNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbiA0NDc6XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcikpIHtcXG4gNDQ4OlxcdFxcdFxcdC8qIExvb3BlZCBiYWNrIHBhY2tldCwgZHJvcCBpdCEgKi9cXG4gNDQ5OlxcdFxcdFxcdGlmIChydF9pc19vdXRwdXRfcm91dGUoc2tiX3J0YWJsZShza2IpKSlcXG4gNDUwOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNDUxOlxcdFxcdH1cXG4gNDUyOlxcdCNlbmRpZlxcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHRoZHJfbGVuID0gZ3JlX3BhcnNlX2hlYWRlcihza2IsIFxcdTAwMjZ0cGksIFxcdTAwMjZjc3VtX2VyciwgaHRvbnMoRVRIX1BfSVApLCAwKTtcXG4gNDU1OlxcdFxcdGlmIChoZHJfbGVuIFxcdTAwM2MgMClcXG4gNDU2OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0aWYgKHVubGlrZWx5KHRwaS5wcm90byA9PSBodG9ucyhFVEhfUF9FUlNQQU4pIHx8XFxuIDQ1OTpcXHRcXHRcXHQgICAgIHRwaS5wcm90byA9PSBodG9ucyhFVEhfUF9FUlNQQU4yKSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MzcuNzM0NjQxNjhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMTAwMzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1RgIFVzYWdlKipcblxuUmlnaHQsIHNvIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuLi5teSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIHNvbGVseSBhYm91dCBwcmV2ZW50aW5nIGxvb3BlZC1iYWNrIG11bHRpY2FzdCBwYWNrZXRzIGluIElQIEdSRSB0dW5uZWxzLiBTdGFuZGFyZCBzdHVmZiwgcmVhbGx5LiBCdXQsIGhvbGQgb24gYSBtaW51dGUuIFRoYXQgc2VlbXMgYSBiaXQgdG9vIHNpbXBsaXN0aWMuIExldCdzIG5vdCBtYWtlIGFzc3VtcHRpb25zLiBUaW1lIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoYXQncyAqYWxsKiBpdCdzIGRvaW5nLiBMZXQncyBqdW1wIGludG8gYG5ldC9pcHY0L2lwX2dyZS5jYC4gSSdtIGd1ZXNzaW5nIHRoYXQgbW9kdWxlIHdpbGwgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGFuZCBob3BlZnVsbHkgd2lsbCBwcm92aWRlIGluc2lnaHQgYXMgdG8gaXRzIHVzYWdlIGFuZCB3aGV0aGVyIGl0J3MgbW9yZSB3aWRlc3ByZWFkIHRoYW4ganVzdCBsb29wYmFjayBwcmV2ZW50aW9uLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdGhhbiBzb3JyeS4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDo0MS40MzU2NDgyNjhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjkwMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVxcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MzUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTM2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTkzNy1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05ODItXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTgzOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4NC1cXHQubmRvX29wZW5cXHRcXHQ9IGlwZ3JlX29wZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDM2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTAtXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTE6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Mi1cXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6NDEuNTA5OTQ1OTkyWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQyOTkxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwZ3JlX3R1bm5lbF9pbml0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBpcGdyZV90dW5uZWxfaW5pdGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgY3J1eCBvZiB0aGUgR1JFIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaXRzIHJlc3BvbnNpYmlsaXRpZXMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIHJlc291cmNlcyBpdCBhbGxvY2F0ZXMuIElzIGl0IGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMsIGZpbGUgZGVzY3JpcHRvcnMsIG9yIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIEdSRSBwcm90b2NvbD9cblxuSSB3YW50IHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoaXMgaXMgYSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiwgb3IgaWYgaXQgaGFuZGxlcyBhbnkgc3BlY2lhbCBjYXNlcyBvciBwb3RlbnRpYWwgZWRnZSBzY2VuYXJpb3MuIERvZXMgaXQgcGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiB1c2VyIGlucHV0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiBpdHMgbG9ja2luZyBvciByZXNvdXJjZSBtYW5hZ2VtZW50PyBJIHNob3VsZCBwcm9iYWJseSBjb25zaWRlciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gQSBnb29kIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgc2hvdWxkIGdyYWNlZnVsbHkgaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgcmVzb3VyY2VzIGFyZSB1bmF2YWlsYWJsZSBvciBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgYXJlIGhhbmRsZWQ6IHRoZSBpbnRlcmZhY2Ugc2V0dXAsIHRoZSByb3V0aW5nIGFzcGVjdHMsIGFueSB0dW5uZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIElzIGl0IGEgbW9kdWxhciBkZXNpZ24gdGhhdCB3aWxsIGxlbmQgaXRzZWxmIHdlbGwgdG8gZnV0dXJlIGV4dGVuc2lvbj9cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDo0NC45MzQyNDg2NjJaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzYsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzY6XFx0c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjEwMzc6XFx0e1xcbjEwMzg6XFx0XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xMDM5OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbjEwNDA6XFx0XFxuMTA0MTpcXHRcXHRfX2dyZV90dW5uZWxfaW5pdChkZXYpO1xcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRfX2Rldl9hZGRyX3NldChkZXYsIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCA0KTtcXG4xMDQ0OlxcdFxcdG1lbWNweShkZXYtXFx1MDAzZWJyb2FkY2FzdCwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsIDQpO1xcbjEwNDU6XFx0XFxuMTA0NjpcXHRcXHRkZXYtXFx1MDAzZWZsYWdzXFx0XFx0PSBJRkZfTk9BUlA7XFxuMTA0NzpcXHRcXHRuZXRpZl9rZWVwX2RzdChkZXYpO1xcbjEwNDg6XFx0XFx0ZGV2LVxcdTAwM2VhZGRyX2xlblxcdFxcdD0gNDtcXG4xMDQ5OlxcdFxcbjEwNTA6XFx0XFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbjEwNTE6XFx0I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxuMTA1MjpcXHRcXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG4xMDUzOlxcdFxcdFxcdFxcdGlmICghaXBoLVxcdTAwM2VzYWRkcilcXG4xMDU0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwNTU6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VmbGFncyA9IElGRl9CUk9BRENBU1Q7XFxuMTA1NjpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBcXHUwMDI2aXBncmVfaGVhZGVyX29wcztcXG4xMDU3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbjEwNTg6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xcbjEwNTk6XFx0XFx0XFx0fVxcbjEwNjA6XFx0I2VuZGlmXFxuMTA2MTpcXHRcXHR9IGVsc2UgaWYgKCF0dW5uZWwtXFx1MDAzZWNvbGxlY3RfbWQpIHtcXG4xMDYyOlxcdFxcdFxcdGRldi1cXHUwMDNlaGVhZGVyX29wcyA9IFxcdTAwMjZpcGdyZV9oZWFkZXJfb3BzO1xcbjEwNjM6XFx0XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0dW5uZWwtXFx1MDAzZWhsZW4gKyBzaXplb2YoKmlwaCk7XFxuMTA2NDpcXHRcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XFxuMTA2NTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjQ0LjkzNDM4MTY3MloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU3NjY2ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqR1JFIFR1bm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBHUkUgdHVubmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaW1wb3J0YW50LiBJIG5lZWQgaXQsIHByZXN1bWFibHksIHRvIHNldCB1cCB0aGUgYElGRl9CUk9BRENBU1RgIGZsYWcgYW5kIHRvIGdldCB0aGUgYGRldi1cdTAwM2VoZWFkZXJfb3BzYCBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhlc2UgbXVsdGljYXN0IEdSRSB0dW5uZWxzLiBUaGF0J3MgdGhlIGluaXRpYWwgaHVuY2guXG5cbkJ1dCB0aGVuLCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgc2VlIHRoZSB0ZXN0IGNhc2UgaXMgdXNpbmcgYGdyZXRhcGAuIEFuZCwgSSdtIHByZXR0eSBzdXJlIGBncmV0YXBgIGluaXRpYWxpemVzIHVzaW5nIGBncmVfdGFwX2luaXRgLCByYXRoZXIgdGhhbiBgaXBncmVfdHVubmVsX2luaXRgLiBIbW0sIHRoYXQgY2hhbmdlcyB0aGluZ3MuIFNvLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBncmVfdGFwX2luaXRgIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdtIGdvaW5nIHRvIHN3aXRjaCBnZWFycyBhbmQgZ28gdGhyb3VnaCB0aGF0IGNvZGUgZmxvdyBpbnN0ZWFkIHRvIGZpbmQgdGhlIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI5OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6NDguMjkyMDUyMTA2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzI5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzI5OlxcdHN0YXRpYyBpbnQgZ3JlX3RhcF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTMzMDpcXHR7XFxuMTMzMTpcXHRcXHRfX2dyZV90dW5uZWxfaW5pdChkZXYpO1xcbjEzMzI6XFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcbjEzMzM6XFx0XFx0bmV0aWZfa2VlcF9kc3QoZGV2KTtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0XFx0cmV0dXJuIGlwX3R1bm5lbF9pbml0KGRldik7XFxuMTMzNjpcXHR9XFxuMTMzNzpcXHRcXG4xMzM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xcbjEzMzk6XFx0XFx0Lm5kb19pbml0XFx0XFx0PSBncmVfdGFwX2luaXQsXFxuMTM0MDpcXHRcXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG4xMzQxOlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZ3JlX3RhcF94bWl0LFxcbjEzNDI6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBldGhfbWFjX2FkZHIsXFxuMTM0MzpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbjEzNDQ6XFx0XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4xMzQ1OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxuMTM0NjpcXHRcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbjEzNDc6XFx0XFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbjEzNDg6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6NDguMjkyMjA1ODY2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjI4MDUxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiT2theSwgYGdyZXRhcGAgZG9lc24ndCBleHBsaWNpdGx5IG5lZWQgYENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUYC5cIiBTbywgSSB3YXMgZ29pbmcgdG8gaW5jbHVkZSBgTkVUX0lQR1JFYCwgYElQVjZfR1JFYCwgYE5FVF9GT1VgLCBhbmQgYE5FVF9GT1VfSVBfVFVOTkVMU2AuXG5cbkJ1dCwgd2FpdC4gSSBuZWVkZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyDigJMgZG9lcyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgc25lYWsgaW4gdmlhIHRoZSBiYWNrIGRvb3IgZm9yIG11bHRpY2FzdCBzdXBwb3J0IHdpdGggYGdyZXRhcGA/IEhtbSwgYGdyZXRhcGAgaXMgYW4gRXRoZXJuZXQgdHVubmVsLCBhbmQgdGhhdCBpbmhlcmVudGx5ICpkb2VzKiBoYW5kbGUgYnJvYWRjYXN0cy9tdWx0aWNhc3QuIExldCBtZSBsb29rIGF0IHRoZSB0ZXN0IHNjcmlwdC4uLiB5ZXAsIGl0IGNyZWF0ZXMgYSBgZ3JldGFwYCB0dW5uZWwgdXNpbmcgYGlwIGxpbmsgYWRkYCB3aXRoIEZPVSBlbmNhcHN1bGF0aW9uLiBPa2F5LCBzbyBteSBpbml0aWFsIGNvbmZpZ3Mgc3RhbmQuXG5cblRoZW4gaXQgaGl0IG1lOiBoYW5nIG9uLCBkb2Vzbid0IGBORVRfSVBHUkVgIGRlcGVuZCBvbiBgTkVUX0lQR1JFX0RFTVVYYD8gSXQgZG9lcy4gT2theSwgaXQncyBlbmFibGVkIGJ5IHRoZSBwYXJlbnQgYnV0IGl0IGRvZXNuJ3QgaHVydCB0byBiZSBleHBsaWNpdCwgc28gSSdsbCBqdXN0IGtlZXAgYE5FVF9JUEdSRWAgYW5kIGBJUFY2X0dSRWAuXG5cbk5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zPyBUaGlzIHRlc3QgdXNlcyBgcGluZ2AsIGJ1dCB0aGUgYWN0dWFsIGJ1ZyBpcyBpbiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRob3NlIGFyZSB0aGUgc3ltYm9scyB0byBmb2N1cyBvbi5cblxuTGV0IG1lIHZlcmlmeSB0aGF0IHJlYXNvbmluZy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIG11bHRpY2FzdCBwYWNrZXRzIHdlcmUgaW5jb3JyZWN0bHkgY29uc3VtZWQgaW5zdGVhZCBvZiBiZWluZyBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciwgbGlrZSBHUkUuIFRoZSBmaXggcmV0dXJucyBhIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIGFsbG93aW5nIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIHRvIHBhc3MgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllci4gVGhpcyAqaXMqIGEgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGNoYW5nZSwgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGZ1enogdGhhdCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIFVBRnMgY3JvcCB1cCB3aGVuIHJlc3VibWl0dGluZyBtdWx0aWNhc3QgcGFja2V0cy5cblxuT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGB1ZHBfcXVldWVfcmN2X3NrYmAgYW5kIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYCBhcmVuJ3QgdG91Y2hlZCwganVzdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIEknbSBnb29kLiBJJ2xsIGp1c3QgdXNlIHRob3NlIHN5bWJvbHMuIExldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjU2LjM1NTAxMzI2MloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NTM1NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdWRwNl9saWJfbWNhc3RfZGVsaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni91ZHAuYz05MjM9c3RhdGljIHZvaWQgdWRwNl9jc3VtX3plcm9fZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTkzNi0gKi9cXG5uZXQvaXB2Ni91ZHAuYzo5Mzc6c3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3VkcC5jLTkzOC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcixcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTEwNjk9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHVkcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTEzNy1cXHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChkYWRkcikpXFxubmV0L2lwdjYvdWRwLmM6MTEzODpcXHRcXHRyZXR1cm4gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKG5ldCwgc2tiLCBzYWRkciwgZGFkZHIpO1xcbm5ldC9pcHY2L3VkcC5jLTExMzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjU2LjY5MjU1NTIyNloiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjYzODA3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKk11bHRpY2FzdCBQYWNrZXQgSGFuZGxpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIG9ic2VydmluZyB0aGUgY2FsbCBmbG93IGFuZCwgeWVzLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBJUHY2IG11bHRpY2FzdCBwYWNrZXRzLCBgdWRwdjZfcmN2YCwgaXMgaW5kZWVkIHRoZSBvbmUgdHJpZ2dlcmluZyB0aGlzIGFjdGlvbi4gVGhpcyBjbGFyaWZpZXMgdGhlIGNvbnRleHQsIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGFja2V0J3Mgb3JpZ2luIGFuZCBwYXRoLiBOb3cgdGhhdCBJJ3ZlIHBpbm5lZCBkb3duIHRoZSBzb3VyY2UgYW5kIHB1cnBvc2UsIEknbSBwcmVwYXJlZCB0byBmaW5hbGl6ZSBhbmQgdHJhbnNtaXQgdGhlIG91dGNvbWUgb2YgdGhlIHByb2Nlc3MuIEknbSByZWFkeSB0byBzZXQgdGhlIHJlc3VsdGluZyB2YWx1ZXMgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBuZXh0IHN0YWdlIG9mIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDI1LCJPdXRwdXRUb2tlbnMiOjE5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAxOjAyLjM1NjM2NjU3NVoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjU1NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRk9VXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIixcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiSVBWNl9HUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJcIixcbiAgICBcIl9fdWRwNl9saWJfbWNhc3RfZGVsaXZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIEZPVS1lbmNhcHN1bGF0ZWQgcGFja2V0cyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQIHdlcmUgY29uc3VtZWQgaW5zdGVhZCBvZiBiZWluZyByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKS4gQnkgcmV0dXJuaW5nIHRoZSByZXN1Ym1pdCByZXF1ZXN0IChwb3NpdGl2ZSBmb3IgSVB2NiwgbmVnYXRpdmUgZm9yIElQdjQpLCB0aGUgVURQIHJlY2VpdmUgcGF0aCBjb3JyZWN0bHkgcGFzc2VzIHRoZSBwYWNrZXQgYmFjayB0byB0aGUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIHRoZSByZXN1Ym1pc3Npb24gb2YgbXVsdGljYXN0IHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0ZPVVwiLFxuICAgIFwiTkVUX0ZPVV9JUF9UVU5ORUxTXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowxzrlq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-05 02:50:04 +0000 UTC FinishedAt: 2026-07-05 03:01:04 +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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "NET_IPGRE", "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": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_FOU", "NET_FOU_IP_TUNNELS", "NET_IPGRE", "IPV6_GRE" ], "series_id": "5f9533d4-7898-4db7-99cb-8cac65f0ed95" }, "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+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAgd2VyZSBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpLiBCeSByZXR1cm5pbmcgdGhlIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIGNvcnJlY3RseSBwYXNzZXMgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4MWE0ODAxOWI3YTJmZGU5YjJiYTEzZjBjMzk5ZjBiMThmMmFlY2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCA1IDAyOjU4OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmNcbmluZGV4IDU5MjQ4YTU5MzU4Y2E1Li5kM2RkY2JmYzg0NzcxYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC91ZHAuY1xuQEAgLTI0NzYsNiAmIzQzOzI0NzYsNyBAQCBzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGhhc2gyX2FueSA9IDA7XG4gXHRoYXNoMiA9IDA7XG5AQCAtMjUyMCw4ICYjNDM7MjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdGlmIChmaXJzdCkge1xuLVx0XHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldCA9IHVkcF9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1yZXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTk0OSw2ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiBcdGJvb2wgdXNlX2hhc2gyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRoYXNoMl9hbnkgPSAwO1xuIFx0aGFzaDIgPSAwO1xuQEAgLTk5OCw4ICYjNDM7OTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFx1MDAzZSAwKVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXQgPSB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0zOSw2ICYjNDM7MzksNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRmaWJfcnVsZV90ZXN0cy5zaCBcXFxuIFx0ZmliX3Rlc3RzLnNoIFxcXG4gXHRmaW5fYWNrX2xhdC5zaCBcXFxuJiM0MztcdGZvdV9tY2FzdF9lbmNhcC5zaCBcXFxuIFx0ZnFfYmFuZF9wa3RsaW1pdC5zaCBcXFxuIFx0Z3JlX2dzby5zaCBcXFxuIFx0Z3JlX2lwdjZfbGxhZGRyLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzI4NTEzZDU1ZGI0YTVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2hcbkBAIC0wLDAgJiM0MzsxLDE3NyBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBUZXN0IHRoYXQgVURQIGVuY2Fwc3VsYXRpb24gKEZPVSkgY29ycmVjdGx5IGhhbmRsZXMgcGFja2V0IHJlc3VibWl0XG4mIzQzOyMgd2hlbiBwYWNrZXRzIGFyZSBkZWxpdmVyZWQgdmlhIHRoZSBtdWx0aWNhc3QgVURQIGRlbGl2ZXJ5IHBhdGguXG4mIzQzOyNcbiYjNDM7IyBXaGVuIGEgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXQgYXJyaXZlcyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQLFxuJiM0MzsjIF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcigpIC8gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKCkgbXVzdCByZXN1Ym1pdFxuJiM0MzsjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cbiYjNDM7IyBUaGlzIHRlc3QgdmVyaWZpZXMgYm90aCBJUHY0IGFuZCBJUHY2IHBhdGhzIGJ5IGNyZWF0aW5nIGEgRk9VL0dSRVRBUFxuJiM0MzsjIHR1bm5lbCB3aXRoIGEgbXVsdGljYXN0IHJlbW90ZSBhZGRyZXNzIGFuZCBzZW5kaW5nIHBpbmcgdGhyb3VnaCBpdC5cbiYjNDM7I1xuJiM0MzsjIFRoZSBlYXJseSBkZW11eCBvcHRpbWl6YXRpb24gY2FuIG1hc2sgdGhpcyBpc3N1ZSBieSByb3V0aW5nIHBhY2tldHMgdmlhXG4mIzQzOyMgdGhlIHVuaWNhc3QgcGF0aCAodWRwWzZdX3VuaWNhc3RfcmN2X3NrYiksIHNvIHdlIGRpc2FibGUgaXQgdG8gZm9yY2VcbiYjNDM7IyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cbiYjNDM7XG4mIzQzO3NvdXJjZSBsaWIuc2hcbiYjNDM7XG4mIzQzO05TRU5ERVI9XCYjMzQ7XCYjMzQ7XG4mIzQzO05SRUNWPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7Rk9VX1BPUlQ0PTQ3OTdcbiYjNDM7Rk9VX1BPUlQ2PTQ3OThcbiYjNDM7TUNBU1Q0PTIzOS4wLjAuMVxuJiM0MztNQ0FTVDY9ZmYwZTo6MVxuJiM0MztcbiYjNDM7VFVONF9TPTE5Mi4xNjguOTkuMVxuJiM0MztUVU40X1I9MTkyLjE2OC45OS4yXG4mIzQzO1RVTjZfUz0yMDAxOmRiODo5OTo6MVxuJiM0MztUVU42X1I9MjAwMTpkYjg6OTk6OjJcbiYjNDM7XG4mIzQzO2NsZWFudXAoKSB7XG4mIzQzO1x0Y2xlYW51cF9hbGxfbnNcbiYjNDM7fVxuJiM0MztcbiYjNDM7dHJhcCBjbGVhbnVwIEVYSVRcbiYjNDM7XG4mIzQzO3NldHVwX2NvbW1vbigpIHtcbiYjNDM7XHRzZXR1cF9ucyBOU0VOREVSIE5SRUNWXG4mIzQzO1xuJiM0MztcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXG4mIzQzO1x0IyBjb2xsaXNpb25zIHdpdGggZGV2aWNlcyBpbiB0aGUgcm9vdCBuYW1lc3BhY2UuXG4mIzQzO1x0aXAgbGluayBhZGQgdmV0aF9zIG5ldG5zIFwmIzM0OyROU0VOREVSXCYjMzQ7IHR5cGUgdmV0aCBcXFxuJiM0MztcdFx0cGVlciBuYW1lIHZldGhfciBuZXRucyBcJiMzNDskTlJFQ1ZcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBzZXQgdmV0aF9zIHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2V0IHZldGhfciB1cFxuJiM0MztcbiYjNDM7XHQjIFNhbWUgc3lzY3RsIGNvbnRyb2xzIGVhcmx5IGRlbXV4IGZvciBib3RoIElQdjQgYW5kIElQdjYuXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlJFQ1ZcJiMzNDsgc3lzY3RsIC13cSBuZXQuaXB2NC5pcF9lYXJseV9kZW11eD0wXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX2lwdjQoKSB7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgYWRkciBhZGQgMTAuMC4wLjEvMjQgZGV2IHZldGhfc1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBhZGRyIGFkZCAxMC4wLjAuMi8yNCBkZXYgdmV0aF9yXG4mIzQzO1xuJiM0MztcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JE1DQVNUNC8zMlwmIzM0OyBkZXYgdmV0aF9yIGF1dG9qb2luXG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yXG4mIzQzO1xuJiM0MztcdCMgU2VuZGVyOiBHUkVUQVAgd2l0aCBGT1UgZW5jYXAgKG5vIEZPVSBsaXN0ZW5lciBuZWVkZWQgb24gVFggc2lkZSlcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcbiYjNDM7XHRcdHJlbW90ZSBcJiMzNDskTUNBU1Q0XCYjMzQ7IGxvY2FsIDEwLjAuMC4xIFxcXG4mIzQzO1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBlbmNhcC1kcG9ydCBcJiMzNDskRk9VX1BPUlQ0XCYjMzQ7IFxcXG4mIzQzO1x0XHRrZXkgXCYjMzQ7JE1DQVNUNFwmIzM0O1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGxpbmsgc2V0IGVvdWRwNCB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU40X1MvMjRcJiMzNDsgZGV2IGVvdWRwNFxuJiM0MztcbiYjNDM7XHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgJiM0MzsgR1JFVEFQXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlJFQ1ZcJiMzNDsgaXAgZm91IGFkZCBwb3J0IFwmIzM0OyRGT1VfUE9SVDRcJiMzNDsgaXBwcm90byA0N1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcbiYjNDM7XHRcdHJlbW90ZSBcJiMzNDskTUNBU1Q0XCYjMzQ7IGxvY2FsIDEwLjAuMC4yIFxcXG4mIzQzO1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCYjMzQ7JEZPVV9QT1JUNFwmIzM0OyBlbmNhcC1kcG9ydCBcJiMzNDskRk9VX1BPUlQ0XCYjMzQ7IFxcXG4mIzQzO1x0XHRrZXkgXCYjMzQ7JE1DQVNUNFwmIzM0O1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIHNldCBlb3VkcDQgdXBcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JFRVTjRfUi8yNFwmIzM0OyBkZXYgZW91ZHA0XG4mIzQzO1xuJiM0MztcdCMgU3RhdGljIG5laWdoIG9uIHNlbmRlcjogQVJQIHJlcGxpZXMgY2Fubm90IHRyYXZlcnNlIHRoZVxuJiM0MztcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbiYjNDM7XHRsb2NhbCByZWN2X21hY1xuJiM0MztcdHJlY3ZfbWFjPSQoaXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGxpbmsgc2hvdyBlb3VkcDQgfCBhd2sgJiMzOTsvZXRoZXIve3ByaW50ICQyfSYjMzk7KVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU0VOREVSXCYjMzQ7IG5laWdoIGFkZCBcJiMzNDskVFVONF9SXCYjMzQ7IGxsYWRkciBcJiMzNDskcmVjdl9tYWNcJiMzNDsgZGV2IGVvdWRwNFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF9pcHY2KCkge1xuJiM0MztcdCMgU2tpcCBjbGVhbmx5IGlmIElQdjYgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgcnVubmluZyBrZXJuZWwuXG4mIzQzO1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdG1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXG4mIzQzO1xuJiM0MztcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JE1DQVNUNi8xMjhcJiMzNDsgZGV2IHZldGhfciBhdXRvam9pblxuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNFTkRFUlwmIzM0OyAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfc1xuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfclxuJiM0MztcbiYjNDM7XHQjIFNlbmRlcjogaXA2Z3JldGFwIHdpdGggRk9VIGVuY2FwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4mIzQzO1x0XHRyZW1vdGUgXCYjMzQ7JE1DQVNUNlwmIzM0OyBsb2NhbCAyMDAxOmRiODo6MSBcXFxuJiM0MztcdFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgZW5jYXAtZHBvcnQgXCYjMzQ7JEZPVV9QT1JUNlwmIzM0OyBcXFxuJiM0MztcdFx0a2V5IDQyXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgYWRkciBhZGQgXCYjMzQ7JFRVTjZfUy82NFwmIzM0OyBkZXYgZW91ZHA2IG5vZGFkXG4mIzQzO1xuJiM0MztcdCMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciAoSVB2NikgJiM0MzsgaXA2Z3JldGFwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlJFQ1ZcJiMzNDsgaXAgZm91IGFkZCBwb3J0IFwmIzM0OyRGT1VfUE9SVDZcJiMzNDsgaXBwcm90byA0NyAtNlxuJiM0MztcdGlwIC1uIFwmIzM0OyROUkVDVlwmIzM0OyBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcbiYjNDM7XHRcdHJlbW90ZSBcJiMzNDskTUNBU1Q2XCYjMzQ7IGxvY2FsIDIwMDE6ZGI4OjoyIFxcXG4mIzQzO1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCYjMzQ7JEZPVV9QT1JUNlwmIzM0OyBlbmNhcC1kcG9ydCBcJiMzNDskRk9VX1BPUlQ2XCYjMzQ7IFxcXG4mIzQzO1x0XHRrZXkgNDJcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5SRUNWXCYjMzQ7IGFkZHIgYWRkIFwmIzM0OyRUVU42X1IvNjRcJiMzNDsgZGV2IGVvdWRwNiBub2RhZFxuJiM0MztcbiYjNDM7XHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXG4mIzQzO1x0IyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLlxuJiM0MztcdGxvY2FsIHJlY3ZfbWFjXG4mIzQzO1x0cmVjdl9tYWM9JChpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgbGluayBzaG93IGVvdWRwNiB8IGF3ayAmIzM5Oy9ldGhlci97cHJpbnQgJDJ9JiMzOTspXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TRU5ERVJcJiMzNDsgbmVpZ2ggYWRkIFwmIzM0OyRUVU42X1JcJiMzNDsgbGxhZGRyIFwmIzM0OyRyZWN2X21hY1wmIzM0OyBkZXYgZW91ZHA2XG4mIzQzO31cbiYjNDM7XG4mIzQzO2dldF9yeF9wYWNrZXRzKCkge1xuJiM0MztcdGxvY2FsIGRldj1cJiMzNDskMVwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlJFQ1ZcJiMzNDsgLXMgbGluayBzaG93IFwmIzM0OyRkZXZcJiMzNDsgfCBhd2sgJiMzOTsvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0mIzM5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztydW5fcGluZ190ZXN0KCkge1xuJiM0MztcdGxvY2FsIGZhbWlseT1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIGRldj1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGRzdD1cJiMzNDskM1wmIzM0O1xuJiM0MztcdGxvY2FsIGNvdW50PTEwMFxuJiM0MztcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxuJiM0MztcbiYjNDM7XHQjIFdhcm11cDogbGV0IGFueSBpbml0aWFsIGJyb2FkY2FzdC9ORCB0cmFmZmljIHNldHRsZVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5TRU5ERVJcJiMzNDsgcGluZyBcJiMzNDskZmFtaWx5XCYjMzQ7IC1jIDEgLVcgMSBcJiMzNDskZHN0XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1xuJiM0MztcdHJ4X2JlZm9yZT0kKGdldF9yeF9wYWNrZXRzIFwmIzM0OyRkZXZcJiMzNDspXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskTlNFTkRFUlwmIzM0OyBwaW5nIFwmIzM0OyRmYW1pbHlcJiMzNDsgLWMgJGNvdW50IC1XIDEgXCYjMzQ7JGRzdFwmIzM0OyBcXFxuJiM0MztcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4mIzQzO1x0c2xlZXAgMVxuJiM0MztcdHJ4X2FmdGVyPSQoZ2V0X3J4X3BhY2tldHMgXCYjMzQ7JGRldlwmIzM0OylcbiYjNDM7XG4mIzQzO1x0cnhfZGVsdGE9JCgocnhfYWZ0ZXIgLSByeF9iZWZvcmUpKVxuJiM0MztcbiYjNDM7XHRpZiBbIFwmIzM0OyRyeF9kZWx0YVwmIzM0OyAtZ2UgXCYjMzQ7JGNvdW50XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7UEFTUzogcmVjZWl2ZWQgJHJ4X2RlbHRhLyRjb3VudCBwYWNrZXRzXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7JGtzZnRfcGFzc1wmIzM0O1xuJiM0MztcdGVsaWYgWyBcJiMzNDskcnhfZGVsdGFcJiMzNDsgLWd0IDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBvbmx5ICRyeF9kZWx0YS8kY291bnQgcGFja2V0cyByZWNlaXZlZFwmIzM0O1xuJiM0MztcdFx0cmV0dXJuIFwmIzM0OyRrc2Z0X2ZhaWxcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IDAvJGNvdW50IHBhY2tldHMgcmVjZWl2ZWRcJiMzNDtcbiYjNDM7XHRcdHJldHVybiBcJiMzNDska3NmdF9mYWlsXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmV0PTBcbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7VEVTVDogRk9VL0dSRVRBUCBJUHY0IG11bHRpY2FzdCBlbmNhcHN1bGF0aW9uIHJlc3VibWl0XCYjMzQ7XG4mIzQzO3NldHVwX2NvbW1vblxuJiM0MztzZXR1cF9pcHY0XG4mIzQzO3J1bl9waW5nX3Rlc3QgLTQgZW91ZHA0IFwmIzM0OyRUVU40X1JcJiMzNDsgfHwgcmV0PSQ/XG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1RFU1Q6IEZPVS9HUkVUQVAgSVB2NiBtdWx0aWNhc3QgZW5jYXBzdWxhdGlvbiByZXN1Ym1pdFwmIzM0O1xuJiM0MztpZiBzZXR1cF9pcHY2OyB0aGVuXG4mIzQzO1x0cnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgXCYjMzQ7JFRVTjZfUlwmIzM0OyB8fCByZXQ9JD9cbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogSVB2NiB1bmF2YWlsYWJsZVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDssCiAgICAmIzM0O19fdWRwNl9saWJfbWNhc3RfZGVsaXZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ODFhNDgwMTliN2EyZmRlOWIyYmExM2YwYzM5OWYwYjE4ZjJhZWNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgNSAwMjo1ODozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMjQ3Niw2ICYjNDM7MjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAlib29sIHVzZV9oYXNoMjsKJiM0MzsJaW50IHJldDsKIAogCWhhc2gyX2FueSA9IDA7CiAJaGFzaDIgPSAwOwpAQCAtMjUyMCw4ICYjNDM7MjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlpZiAoZmlyc3QpIHsKLQkJaWYgKHVkcF9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpICZndDsgMCkKLQkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQlyZXQgPSB1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCXJldHVybiAtcmV0OwogCX0gZWxzZSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lHTk9SRURNVUxUSSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTk0OSw2ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90OwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCWJvb2wgdXNlX2hhc2gyOwomIzQzOwlpbnQgcmV0OwogCiAJaGFzaDJfYW55ID0gMDsKIAloYXNoMiA9IDA7CkBAIC05OTgsOCAmIzQzOzk5OSw5IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlpZiAoZmlyc3QpIHsKLQkJaWYgKHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgJmd0OyAwKQotCQkJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJCXJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7CiYjNDM7CQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDcwOGQ5NjBhZTA3ZDViLi43ZTlhZTkzN2NmZmE3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMzksNiAmIzQzOzM5LDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJZmliX3J1bGVfdGVzdHMuc2ggXAogCWZpYl90ZXN0cy5zaCBcCiAJZmluX2Fja19sYXQuc2ggXAomIzQzOwlmb3VfbWNhc3RfZW5jYXAuc2ggXAogCWZxX2JhbmRfcGt0bGltaXQuc2ggXAogCWdyZV9nc28uc2ggXAogCWdyZV9pcHY2X2xsYWRkci5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzI4NTEzZDU1ZGI0YTUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoCkBAIC0wLDAgJiM0MzsxLDE3NyBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXQKJiM0MzsjIHdoZW4gcGFja2V0cyBhcmUgZGVsaXZlcmVkIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLgomIzQzOyMKJiM0MzsjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsCiYjNDM7IyBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoKSAvIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcigpIG11c3QgcmVzdWJtaXQKJiM0MzsjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC4KJiM0MzsjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQCiYjNDM7IyB0dW5uZWwgd2l0aCBhIG11bHRpY2FzdCByZW1vdGUgYWRkcmVzcyBhbmQgc2VuZGluZyBwaW5nIHRocm91Z2ggaXQuCiYjNDM7IwomIzQzOyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWEKJiM0MzsjIHRoZSB1bmljYXN0IHBhdGggKHVkcFs2XV91bmljYXN0X3Jjdl9za2IpLCBzbyB3ZSBkaXNhYmxlIGl0IHRvIGZvcmNlCiYjNDM7IyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi4KJiM0MzsKJiM0Mztzb3VyY2UgbGliLnNoCiYjNDM7CiYjNDM7TlNFTkRFUj0mIzM0OyYjMzQ7CiYjNDM7TlJFQ1Y9JiMzNDsmIzM0OwomIzQzOwomIzQzO0ZPVV9QT1JUND00Nzk3CiYjNDM7Rk9VX1BPUlQ2PTQ3OTgKJiM0MztNQ0FTVDQ9MjM5LjAuMC4xCiYjNDM7TUNBU1Q2PWZmMGU6OjEKJiM0MzsKJiM0MztUVU40X1M9MTkyLjE2OC45OS4xCiYjNDM7VFVONF9SPTE5Mi4xNjguOTkuMgomIzQzO1RVTjZfUz0yMDAxOmRiODo5OTo6MQomIzQzO1RVTjZfUj0yMDAxOmRiODo5OTo6MgomIzQzOwomIzQzO2NsZWFudXAoKSB7CiYjNDM7CWNsZWFudXBfYWxsX25zCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7c2V0dXBfY29tbW9uKCkgewomIzQzOwlzZXR1cF9ucyBOU0VOREVSIE5SRUNWCiYjNDM7CiYjNDM7CSMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lCiYjNDM7CSMgY29sbGlzaW9ucyB3aXRoIGRldmljZXMgaW4gdGhlIHJvb3QgbmFtZXNwYWNlLgomIzQzOwlpcCBsaW5rIGFkZCB2ZXRoX3MgbmV0bnMgJiMzNDskTlNFTkRFUiYjMzQ7IHR5cGUgdmV0aCBcCiYjNDM7CQlwZWVyIG5hbWUgdmV0aF9yIG5ldG5zICYjMzQ7JE5SRUNWJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGxpbmsgc2V0IHZldGhfcyB1cAomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgc2V0IHZldGhfciB1cAomIzQzOwomIzQzOwkjIFNhbWUgc3lzY3RsIGNvbnRyb2xzIGVhcmx5IGRlbXV4IGZvciBib3RoIElQdjQgYW5kIElQdjYuCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlJFQ1YmIzM0OyBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTAKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfaXB2NCgpIHsKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB2ZXRoX3MKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBhZGRyIGFkZCAxMC4wLjAuMi8yNCBkZXYgdmV0aF9yCiYjNDM7CiYjNDM7CSMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXIKJiM0MzsJaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBhZGRyIGFkZCAmIzM0OyRNQ0FTVDQvMzImIzM0OyBkZXYgdmV0aF9yIGF1dG9qb2luCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyByb3V0ZSBhZGQgMjM5LjAuMC4wLzggZGV2IHZldGhfcwomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yCiYjNDM7CiYjNDM7CSMgU2VuZGVyOiBHUkVUQVAgd2l0aCBGT1UgZW5jYXAgKG5vIEZPVSBsaXN0ZW5lciBuZWVkZWQgb24gVFggc2lkZSkKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGxpbmsgYWRkIGVvdWRwNCB0eXBlIGdyZXRhcCBcCiYjNDM7CQlyZW1vdGUgJiMzNDskTUNBU1Q0JiMzNDsgbG9jYWwgMTAuMC4wLjEgXAomIzQzOwkJZW5jYXAgZm91IGVuY2FwLXNwb3J0ICYjMzQ7JEZPVV9QT1JUNCYjMzQ7IGVuY2FwLWRwb3J0ICYjMzQ7JEZPVV9QT1JUNCYjMzQ7IFwKJiM0MzsJCWtleSAmIzM0OyRNQ0FTVDQmIzM0OwomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBzZXQgZW91ZHA0IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBhZGRyIGFkZCAmIzM0OyRUVU40X1MvMjQmIzM0OyBkZXYgZW91ZHA0CiYjNDM7CiYjNDM7CSMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciAmIzQzOyBHUkVUQVAKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUkVDViYjMzQ7IGlwIGZvdSBhZGQgcG9ydCAmIzM0OyRGT1VfUE9SVDQmIzM0OyBpcHByb3RvIDQ3CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFwKJiM0MzsJCXJlbW90ZSAmIzM0OyRNQ0FTVDQmIzM0OyBsb2NhbCAxMC4wLjAuMiBcCiYjNDM7CQllbmNhcCBmb3UgZW5jYXAtc3BvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgZW5jYXAtZHBvcnQgJiMzNDskRk9VX1BPUlQ0JiMzNDsgXAomIzQzOwkJa2V5ICYjMzQ7JE1DQVNUNCYjMzQ7CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBzZXQgZW91ZHA0IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgYWRkciBhZGQgJiMzNDskVFVONF9SLzI0JiMzNDsgZGV2IGVvdWRwNAomIzQzOwomIzQzOwkjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGUKJiM0MzsJIyB1bmlkaXJlY3Rpb25hbCBtdWx0aWNhc3QgdHVubmVsLgomIzQzOwlsb2NhbCByZWN2X21hYwomIzQzOwlyZWN2X21hYz0kKGlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgbGluayBzaG93IGVvdWRwNCB8IGF3ayAmIzM5Oy9ldGhlci97cHJpbnQgJDJ9JiMzOTspCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBuZWlnaCBhZGQgJiMzNDskVFVONF9SJiMzNDsgbGxhZGRyICYjMzQ7JHJlY3ZfbWFjJiMzNDsgZGV2IGVvdWRwNAomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9pcHY2KCkgewomIzQzOwkjIFNraXAgY2xlYW5seSBpZiBJUHY2IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHJ1bm5pbmcga2VybmVsLgomIzQzOwlbIC1lIC9wcm9jL3N5cy9uZXQvaXB2NiBdIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwltb2Rwcm9iZSAtcSBmb3U2IHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZAomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkIDIwMDE6ZGI4OjoyLzY0IGRldiB2ZXRoX3Igbm9kYWQKJiM0MzsKJiM0MzsJIyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlcgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkICYjMzQ7JE1DQVNUNi8xMjgmIzM0OyBkZXYgdmV0aF9yIGF1dG9qb2luCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyAtNiByb3V0ZSBhZGQgZmYwMDo6LzggZGV2IHZldGhfcwomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IC02IHJvdXRlIGFkZCBmZjAwOjovOCBkZXYgdmV0aF9yCiYjNDM7CiYjNDM7CSMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXAKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcCiYjNDM7CQlyZW1vdGUgJiMzNDskTUNBU1Q2JiMzNDsgbG9jYWwgMjAwMTpkYjg6OjEgXAomIzQzOwkJZW5jYXAgZm91IGVuY2FwLXNwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IGVuY2FwLWRwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IFwKJiM0MzsJCWtleSA0MgomIzQzOwlpcCAtbiAmIzM0OyROU0VOREVSJiMzNDsgbGluayBzZXQgZW91ZHA2IHVwCiYjNDM7CWlwIC1uICYjMzQ7JE5TRU5ERVImIzM0OyBhZGRyIGFkZCAmIzM0OyRUVU42X1MvNjQmIzM0OyBkZXYgZW91ZHA2IG5vZGFkCiYjNDM7CiYjNDM7CSMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciAoSVB2NikgJiM0MzsgaXA2Z3JldGFwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlJFQ1YmIzM0OyBpcCBmb3UgYWRkIHBvcnQgJiMzNDskRk9VX1BPUlQ2JiMzNDsgaXBwcm90byA0NyAtNgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgYWRkIGVvdWRwNiB0eXBlIGlwNmdyZXRhcCBcCiYjNDM7CQlyZW1vdGUgJiMzNDskTUNBU1Q2JiMzNDsgbG9jYWwgMjAwMTpkYjg6OjIgXAomIzQzOwkJZW5jYXAgZm91IGVuY2FwLXNwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IGVuY2FwLWRwb3J0ICYjMzQ7JEZPVV9QT1JUNiYjMzQ7IFwKJiM0MzsJCWtleSA0MgomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGxpbmsgc2V0IGVvdWRwNiB1cAomIzQzOwlpcCAtbiAmIzM0OyROUkVDViYjMzQ7IGFkZHIgYWRkICYjMzQ7JFRVTjZfUi82NCYjMzQ7IGRldiBlb3VkcDYgbm9kYWQKJiM0MzsKJiM0MzsJIyBTdGF0aWMgbmVpZ2ggb24gc2VuZGVyOiBuZWlnaGJvciBkaXNjb3ZlcnkgY2Fubm90IHRyYXZlcnNlIHRoZQomIzQzOwkjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuCiYjNDM7CWxvY2FsIHJlY3ZfbWFjCiYjNDM7CXJlY3ZfbWFjPSQoaXAgLW4gJiMzNDskTlJFQ1YmIzM0OyBsaW5rIHNob3cgZW91ZHA2IHwgYXdrICYjMzk7L2V0aGVyL3twcmludCAkMn0mIzM5OykKJiM0MzsJaXAgLW4gJiMzNDskTlNFTkRFUiYjMzQ7IG5laWdoIGFkZCAmIzM0OyRUVU42X1ImIzM0OyBsbGFkZHIgJiMzNDskcmVjdl9tYWMmIzM0OyBkZXYgZW91ZHA2CiYjNDM7fQomIzQzOwomIzQzO2dldF9yeF9wYWNrZXRzKCkgewomIzQzOwlsb2NhbCBkZXY9JiMzNDskMSYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5SRUNWJiMzNDsgLXMgbGluayBzaG93ICYjMzQ7JGRldiYjMzQ7IHwgYXdrICYjMzk7L1JYOi97Z2V0bGluZTsgcHJpbnQgJDJ9JiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7cnVuX3BpbmdfdGVzdCgpIHsKJiM0MzsJbG9jYWwgZmFtaWx5PSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIGRzdD0mIzM0OyQzJiMzNDsKJiM0MzsJbG9jYWwgY291bnQ9MTAwCiYjNDM7CWxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YQomIzQzOwomIzQzOwkjIFdhcm11cDogbGV0IGFueSBpbml0aWFsIGJyb2FkY2FzdC9ORCB0cmFmZmljIHNldHRsZQomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JE5TRU5ERVImIzM0OyBwaW5nICYjMzQ7JGZhbWlseSYjMzQ7IC1jIDEgLVcgMSAmIzM0OyRkc3QmIzM0OyBcCiYjNDM7CQkmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxCiYjNDM7CXNsZWVwIDEKJiM0MzsKJiM0MzsJcnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgJiMzNDskZGV2JiMzNDspCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskTlNFTkRFUiYjMzQ7IHBpbmcgJiMzNDskZmFtaWx5JiMzNDsgLWMgJGNvdW50IC1XIDEgJiMzNDskZHN0JiMzNDsgXAomIzQzOwkJJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MQomIzQzOwlzbGVlcCAxCiYjNDM7CXJ4X2FmdGVyPSQoZ2V0X3J4X3BhY2tldHMgJiMzNDskZGV2JiMzNDspCiYjNDM7CiYjNDM7CXJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSkKJiM0MzsKJiM0MzsJaWYgWyAmIzM0OyRyeF9kZWx0YSYjMzQ7IC1nZSAmIzM0OyRjb3VudCYjMzQ7IF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtQQVNTOiByZWNlaXZlZCAkcnhfZGVsdGEvJGNvdW50IHBhY2tldHMmIzM0OwomIzQzOwkJcmV0dXJuICYjMzQ7JGtzZnRfcGFzcyYjMzQ7CiYjNDM7CWVsaWYgWyAmIzM0OyRyeF9kZWx0YSYjMzQ7IC1ndCAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBvbmx5ICRyeF9kZWx0YS8kY291bnQgcGFja2V0cyByZWNlaXZlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gJiMzNDska3NmdF9mYWlsJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IDAvJGNvdW50IHBhY2tldHMgcmVjZWl2ZWQmIzM0OwomIzQzOwkJcmV0dXJuICYjMzQ7JGtzZnRfZmFpbCYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO3JldD0wCiYjNDM7CiYjNDM7ZWNobyAmIzM0O1RFU1Q6IEZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXBzdWxhdGlvbiByZXN1Ym1pdCYjMzQ7CiYjNDM7c2V0dXBfY29tbW9uCiYjNDM7c2V0dXBfaXB2NAomIzQzO3J1bl9waW5nX3Rlc3QgLTQgZW91ZHA0ICYjMzQ7JFRVTjRfUiYjMzQ7IHx8IHJldD0kPwomIzQzOwomIzQzO2VjaG8gJiMzNDtURVNUOiBGT1UvR1JFVEFQIElQdjYgbXVsdGljYXN0IGVuY2Fwc3VsYXRpb24gcmVzdWJtaXQmIzM0OwomIzQzO2lmIHNldHVwX2lwdjY7IHRoZW4KJiM0MzsJcnVuX3BpbmdfdGVzdCAtNiBlb3VkcDYgJiMzNDskVFVONl9SJiMzNDsgfHwgcmV0PSQ/CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7U0tJUDogSVB2NiB1bmF2YWlsYWJsZSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk1NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgVURQIE11bHRpY2FzdCBEZWxpdmVyeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5IHBhdGhzIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gSXQgc2VlbXMgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGB1ZHBfcXVldWVfcmN2X3NrYmAgYW5kIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYCBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCBmdW5jdGlvbnMuCgpQcmV2aW91c2x5LCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIChvciBgdWRwdjZfcXVldWVfcmN2X3NrYmApIHJldHVybmVkIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSBjb2RlIGNvbnN1bWVkIHRoZSBza2IgKHNvY2tldCBidWZmZXIpLiBOb3csIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG51YW5jZWQgcmV0dXJuIHZhbHVlIGhhbmRsaW5nLiBJbiB0aGUgSVB2NCBjYXNlLCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybnMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgdGhlIGNvZGUgbm93IHJldHVybnMgdGhlIG5lZ2F0aXZlIG9mIHRoYXQgdmFsdWUuIFRoZSBJUHY2IGNhc2UgaXMgdGhlIG9wcG9zaXRlLCByZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZS4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGFsbG93IGZvciByZXN1Ym1pdHRpbmcgdGhlIHBhY2tldCwgcHJlc3VtYWJseSB0byBhbiBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChsaWtlIEdSRSkgd2hlbiBwYWNrZXRzIGFycml2ZSB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC4gVGhpcyByZXN1Ym1pc3Npb24gaXMgcHJvYmFibHkgZHVlIHRvIHRoZSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGNhbGwgbmVlZGluZyB0byByZXR1cm4gYW4gZXJyb3IsIGJ1dCBjb25zdW1pbmcgdGhlIHNrYiBpZiB0aGF0IGVycm9yIGlzIG5vdCB0byBiZSBoYW5kbGVkIGF0IHRoYXQgbGF5ZXIuCgpHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UsIGFuZCB0aGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5LCB0aGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBkaWcgaW50byBgdWRwX3F1ZXVlX3Jjdl9za2JgIGFuZCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmV0dXJuIGNvZGVzLCBhbmQgd2hhdCB0aGV5IHNpZ25pZnkuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbj8gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYCwgdGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9scywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGV5IGFyZSBpbiB0aGUgaG90IHBhdGggZm9yIG11bHRpY2FzdCBVRFAgcGFja2V0cy4KCkFuZCB3YWl0LCB0aGUgdGVzdCBjYXNlIG1lbnRpb25zIEZPVSBhbmQgR1JFVEFQLCBpbmRpY2F0aW5nIHRoYXQgY2VydGFpbiBjb25maWd1cmF0aW9ucyB3aWxsIGJlIHJlcXVpcmVkIHRvIHJlcHJvZHVjZSBhbmQgZnV6eiB0aGlzIHByb3Blcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBoYXMgdGhlIHJpZ2h0IG9wdGlvbnMgZW5hYmxlZC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRfRk9VYCwgYENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNgLCBgQ09ORklHX0lQX0dSRWAsIGFuZCBgQ09ORklHX0lQVjZfR1JFYCBhcmUgYWxsIHNldC4gVGhpcyBpcyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSB0byBlbnN1cmUgSSBjYW4gcmVwcm9kdWNlIHRoZSB0ZXN0IGNhc2UgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVF9GT1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTY2PUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjY3OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnLTY4LUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTYyPUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo2MzpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNjQtQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZz02OT1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZzo3MDpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy03MS1DT05GSUdfSU5FVF9BSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTU5PUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjYwOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnLTYxLUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NjE9Q09ORklHX05FVF9JUFZUST1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NjI6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNjMtQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc9NjA9Q09ORklHX05FVF9JUFZUST1tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnOjYxOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy02Mi1DT05GSUdfSU5FVF9BSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTgwPUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjgxOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnLTgyLUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz01OD1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjU5OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctNjAtQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnPTU5PUNPTkZJR19ORVRfSVBWVEk9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NjA6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVF9BSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz02MD1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NjE6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnLTYyLUNPTkZJR19JTkVUX0FIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjU2OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctNTctQ09ORklHX0lORVRfQUg9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz01Nj1DT05GSUdfTkVUX0lQVlRJPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo1NzpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZy01OC1DT05GSUdfSU5FVF9BSD1tXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9Mjc9Zm91LXkgOj0gZm91X2NvcmUubyBmb3VfbmwubyBmb3VfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRfRk9VKSAmIzQzOz0gZm91Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICYjNDM7PSBncmUub1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMjgtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwMjk6I2lmZGVmIENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAzMC1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTM1PXN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkge1xuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDEtXHRcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfVlhMQU4pICogMiAmIzQzOyBcXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo0MjpcdFx0XHQgICAgICBJU19FTkFCTEVEKENPTkZJR19ORVRfRk9VKSAqIDIgJiM0MzsgXFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDMtXHRcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkgKiAyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc9NzQ9Q09ORklHX05FVF9DTFNfTUFUQ0hBTEw9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo3NTpDT05GSUdfTkVUX0ZPVT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnOjc2OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy03Ny1DT05GSUdfTkVUX0lQR1JFPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTg2PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6ODc6Q09ORklHX05FVF9GT1U9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4ODpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctODktQ09ORklHX05FVF9JUEdSRT1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVRFAgTXVsdGljYXN0IERlbGl2ZXJ5IElzc3VlIHdpdGggRk9VIEVuY2Fwc3VsYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJvYmxlbSBpbiBVRFAgbXVsdGljYXN0IGRlbGl2ZXJ5LCBzcGVjaWZpY2FsbHkgd2hlbiBwYWNrZXRzIGFyZSBlbmNhcHN1bGF0ZWQgdXNpbmcgRk9VLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgRk9VLCBpbnRlcmVzdGluZyBjaG9pY2Ugb2YgZW5jYXBzdWxhdGlvbi4mIzM0OyBUaGUgdGVzdGluZyBpbnZvbHZlcyBib3RoIEZPVSBhbmQgR1JFVEFQLCB3aGljaCBpcyBhIGdvb2QgY29tYmluYXRpb24gdG8gZXhwbG9yZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTkVUX0ZPVWAgYW5kIGBORVRfRk9VX0lQX1RVTk5FTFNgLgoKV2FpdCBhIHNlY29uZC4uLiB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gVGhvc2UgZmlsZXMgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YC4gVGhhdCBzdWdnZXN0cyBhIGZ1bmRhbWVudGFsIGlzc3VlIHdpdGhpbiB0aGUgVURQIGNvcmUgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBGT1UgbW9kdWxlLiBJbnRlcmVzdGluZy4uLgoKU28sIHRoaXMgaXNzdWUgaXMgKnRyaWdnZXJlZCogYnkgRk9VIGVuY2Fwc3VsYXRpb24uIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhhdCBgdWRwX3F1ZXVlX3Jjdl9za2JgIGlzIHJldHVybmluZyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3aGljaCwgaW4gdGhlIEZPVSBjb250ZXh0LCBhcHBhcmVudGx5IHNpZ25pZmllcyB0aGF0IHRoZSBwYWNrZXQgbmVlZHMgcmVzdWJtaXNzaW9uLCBsaWtlbHkgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBsaWtlIEdSRSBlbmNhcHN1bGF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlsczogd2hhdCBpcyB0aGUgbG9naWMgd2l0aGluIGB1ZHBfcXVldWVfcmN2X3NrYmAgdGhhdCYjMzk7cyBjYXVzaW5nIHRoaXMgcmV0dXJuIHZhbHVlPyBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byBGT1UgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JldHVybi4qXHUwMDNlLiowJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmM9ODU0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX191ZHA0X2xpYl9lcnJfZW5jYXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY0L3VkcC5jLTkwNS0gKiBzb3J0IG9mIGVycm9yIGNvbmRpdGlvbi4gIElmIGVyciBcdTAwM2MgMCB0aGVuIHRoZSBzb2NrZXQgc2hvdWxkXG5uZXQvaXB2NC91ZHAuYzo5MDY6ICogYmUgY2xvc2VkIGFuZCB0aGUgZXJyb3IgcmV0dXJuZWQgdG8gdGhlIHVzZXIuICBJZiBlcnIgXHUwMDNlIDBcbm5ldC9pcHY0L3VkcC5jLTkwNy0gKiBpdCYjMzk7cyBqdXN0IHRoZSBpY21wIHR5cGUgXHUwMDNjXHUwMDNjIDggfCBpY21wIGNvZGUuXG4tLVxubmV0L2lwdjQvdWRwLmM9MjU2OT1zdGF0aWMgaW50IHVkcF91bmljYXN0X3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3VkcC5jLTI1NzgtXG5uZXQvaXB2NC91ZHAuYzoyNTc5Olx0LyogYSByZXR1cm4gdmFsdWUgXHUwMDNlIDAgbWVhbnMgdG8gcmVzdWJtaXQgdGhlIGlucHV0LCBidXRcbm5ldC9pcHY0L3VkcC5jLTI1ODAtXHQgKiBpdCB3YW50cyB0aGUgcmV0dXJuIHRvIGJlIC1wcm90b2NvbCwgb3IgMFxuLS1cbm5ldC9pcHY0L3VkcC5jPTMzNTI9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91ZHBfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjQvdWRwLmMtMzQ2Mi1cdFdBUk5fT05fT05DRShpdGVyLVx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xubmV0L2lwdjQvdWRwLmM6MzQ2MzpcdHJldHVybiBpdGVyLVx1MDAzZWVuZF9zayA/IGl0ZXItXHUwMDNlYmF0Y2hbMF0uc2sgOiBOVUxMO1xubmV0L2lwdjQvdWRwLmMtMzQ2NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdWRwX3F1ZXVlX3Jjdl9za2JgIFJlc3VibWlzc2lvbiBMb2dpYyoqCgpSaWdodCwgc28gYHVkcF9xdWV1ZV9yY3Zfc2tiYCBpcyByZXR1cm5pbmcgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgd2hpY2gsIGlmIG1lbW9yeSBzZXJ2ZXMsIGluZGljYXRlcyBhIG5lZWQgdG8gcmVzdWJtaXQgdGhlIHJlY2VpdmVkIHNvY2tldCBidWZmZXIgKGBza2JgKS4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0ICp3aHkqLiBBIHBvc2l0aXZlIHJldHVybiB1c3VhbGx5IHNpZ25hbHMgc29tZSBraW5kIG9mIHF1ZXVlaW5nIGlzc3VlLCBwb3RlbnRpYWwgcmVzb3VyY2UgY29udGVudGlvbiwgb3IgcGVyaGFwcyBhIHRlbXBvcmFyeSBpbmFiaWxpdHkgdG8gcHJvY2VzcyB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgVURQIGFuZCBpdHMgcG90ZW50aWFsIGZvciBoaWdoLXZvbHVtZSB0cmFmZmljLCB1bmRlcnN0YW5kaW5nIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpbiBkZXRhaWwgaXMgcGFyYW1vdW50LiBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIHRoZSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGltcGxlbWVudGF0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlc3VibWlzc2lvbiBjb25kaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIGJlaGF2aW9yLiBBcmUgd2UgdGFsa2luZyBhYm91dCBpbnRlcm5hbCBxdWV1ZSBvdmVyZmxvd3M/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZXJyb3Igc2NlbmFyaW9zIGJlaW5nIGhhbmRsZWQ/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWUmIzM5O3MgbWVhbmluZywgc3BlY2lmaWMgY2hlY2tzIGJlaW5nIHBlcmZvcm1lZCBvbiB0aGUgYHNrYmAsIGFuZCBhbnkgYXNzb2NpYXRlZCBsb2NraW5nIG9yIGNvbnRlbnRpb24gaXNzdWVzLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQ7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXN1Ym1pc3Npb24gbWVjaGFuaXNtIGlzIGVmZmljaWVudCwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGV4Y2Vzc2l2ZSBsYXRlbmN5IG9yIHBvdGVudGlhbCBmb3IgbGl2ZWxvY2tzLCBhbmQgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBncmFjZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB1ZHBfcXVldWVfcmN2X3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTIzNTA9c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI0MjItXG5uZXQvaXB2NC91ZHAuYzoyNDIzOnN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdWRwLmMtMjQyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiBrZXJuZWwgbmV0d29ya2luZyBjb2RlOgoKKipEaXZpbmcgaW50byBgdWRwX3F1ZXVlX3Jjdl9za2JgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgdWRwX3F1ZXVlX3Jjdl9za2JgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgYSBjcml0aWNhbCBwYXJ0IG9mIGl0LCBmb3IgcmVjZWl2aW5nIFVEUCB0cmFmZmljLiBJIGtub3cgdGhlIGJhc2ljczogYSBTS0IgKFNvY2tldCBCdWZmZXIpIGNvbnRhaW5pbmcgdGhlIGluY29taW5nIFVEUCBkYXRhZ3JhbSBpcyBsaWtlbHkgYWxyZWFkeSBjb25zdHJ1Y3RlZCwgcHJvYmFibHkgYnkgdGhlIGhhcmR3YXJlIG9yIGEgbG93ZXItbGV2ZWwgZHJpdmVyLiBOb3csICp0aGlzKiBpcyB3aGVyZSB3ZSBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0IHdpdGhpbiB0aGUgVURQIGxheWVyIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aGVyZSB0aGlzIFNLQiBnZXRzIGVucXVldWVkLCBob3cgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzb2NrZXQgKGlmIGF0IGFsbCwgZGVwZW5kaW5nIG9uIHRoZSBjaXJjdW1zdGFuY2VzKSwgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgZm9yIGhhbmRsaW5nIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHJlc291cmNlIGxpbWl0YXRpb25zLiBJcyB0aGlzIGRpcmVjdC10by1zb2NrZXQsIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggYSBtb3JlIGdlbmVyaWMgUlggcGF0aD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjb25uZWN0ZWQgVURQIHNvY2tldHMsIG9yIHVuY29ubmVjdGVkIG9uZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGludm9sdmVkIOKAkyBpcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBxdWV1ZSBsZW5ndGhzIGFuZCBob3cgdGhhdCBhZmZlY3RzIG92ZXJhbGwgbGF0ZW5jeT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRyaWNhdGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFVEUCBzb2NrZXQgaXRzZWxmLCBhbmQgSSBuZWVkIHRvIGJlIHJlYWR5IHRvIHNwb3QgcG90ZW50aWFsIGlzc3VlcyBpbnZvbHZpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHF1ZXVpbmcgZGlzY2lwbGluZSBhbmQgd2hldGhlciBhbnkgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMgYXJlIHV0aWxpemVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDIzOlx0c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4yNDI0Olx0e1xuMjQyNTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5leHQsICpzZWdzO1xuMjQyNjpcdFx0aW50IHJldDtcbjI0Mjc6XHRcbjI0Mjg6XHRcdGlmIChsaWtlbHkoIXVkcF91bmV4cGVjdGVkX2dzbyhzaywgc2tiKSkpXG4yNDI5Olx0XHRcdHJldHVybiB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG4yNDMwOlx0XG4yNDMxOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1ZHBfc2tiX2NiKSBcdTAwM2UgU0tCX0dTT19DQl9PRkZTRVQpO1xuMjQzMjpcdFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcbjI0MzM6XHRcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgdHJ1ZSk7XG4yNDM0Olx0XHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuZXh0KSB7XG4yNDM1Olx0XHRcdF9fc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTtcbjI0MzY6XHRcbjI0Mzc6XHRcdFx0dWRwX3Bvc3Rfc2VnbWVudF9maXhfY3N1bShza2IpO1xuMjQzODpcdFx0XHRyZXQgPSB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG4yNDM5Olx0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4yNDQwOlx0XHRcdFx0aXBfcHJvdG9jb2xfZGVsaXZlcl9yY3UoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgc2tiLCByZXQpO1xuMjQ0MTpcdFx0fVxuMjQ0MjpcdFx0cmV0dXJuIDA7XG4yNDQzOlx0fVxuMjQ0NDpcdFxuMjQ0NTpcdC8qIEZvciBUQ1Agc29ja2V0cywgc2tfcnhfZHN0IGlzIHByb3RlY3RlZCBieSBzb2NrZXQgbG9ja1xuMjQ0NjpcdCAqIEZvciBVRFAsIHdlIHVzZSB4Y2hnKCkgdG8gZ3VhcmQgYWdhaW5zdCBjb25jdXJyZW50IGNoYW5nZXMuXG4yNDQ3Olx0ICovXG4yNDQ4Olx0Ym9vbCB1ZHBfc2tfcnhfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbjI0NDk6XHR7XG4yNDUwOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpvbGQ7XG4yNDUxOlx0XG4yNDUyOlx0XHRpZiAoZHN0X2hvbGRfc2FmZShkc3QpKSB7XG4yNDUzOlx0XHRcdG9sZCA9IHVucmN1X3BvaW50ZXIoeGNoZyhcdTAwMjZzay1cdTAwM2Vza19yeF9kc3QsIFJDVV9JTklUSUFMSVpFUihkc3QpKSk7XG4yNDU0Olx0XHRcdGRzdF9yZWxlYXNlKG9sZCk7XG4yNDU1Olx0XHRcdHJldHVybiBvbGQgIT0gZHN0O1xuMjQ1NjpcdFx0fVxuMjQ1NzpcdFx0cmV0dXJuIGZhbHNlO1xuMjQ1ODpcdH1cbjI0NTk6XHRcbjI0NjA6XHQvKlxuMjQ2MTpcdCAqXHRNdWx0aWNhc3RzIGFuZCBicm9hZGNhc3RzIGdvIHRvIGVhY2ggbGlzdGVuZXIuXG4yNDYyOlx0ICpcbjI0NjM6XHQgKlx0Tm90ZTogY2FsbGVkIG9ubHkgZnJvbSB0aGUgQkggaGFuZGxlciBjb250ZXh0LlxuMjQ2NDpcdCAqL1xuMjQ2NTpcdHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjI0NjY6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdWRwaGRyICAqdWgsXG4yNDY3Olx0XHRcdFx0XHQgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIpXG4yNDY4Olx0e1xuMjQ2OTpcdFx0c3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUgPSBuZXQtXHUwMDNlaXB2NC51ZHBfdGFibGU7XG4yNDcwOlx0XHR1bnNpZ25lZCBpbnQgaGFzaDIsIGhhc2gyX2FueSwgb2Zmc2V0O1xuMjQ3MTpcdFx0dW5zaWduZWQgc2hvcnQgaG51bSA9IG50b2hzKHVoLVx1MDAzZWRlc3QpO1xuMjQ3MjpcdFx0c3RydWN0IHNvY2sgKnNrLCAqZmlyc3QgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCBGdW5jdGlvbioqCgpPa2F5LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJldHVybmluZyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgdGhhdCYjMzk7cyBzdXJmYWNpbmcgaXMgdGhhdCBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCBpcyBsaWtlbHkgdGhlIGtleSBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGhvbGQgdGhlIGFuc3dlci4gSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSBhbmQgdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSByZXR1cm4gcGF0aHMgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgcmV0dXJuIHZhbHVlIEkgYW0gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzUwOlx0c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjM1MTpcdHtcbjIzNTI6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4yMzUzOlx0XHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbjIzNTQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjIzNTU6XHRcbjIzNTY6XHRcdC8qXG4yMzU3Olx0XHQgKlx0Q2hhcmdlIGl0IHRvIHRoZSBzb2NrZXQsIGRyb3BwaW5nIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLlxuMjM1ODpcdFx0ICovXG4yMzU5Olx0XHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbjIzNjA6XHRcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG4yMzYxOlx0XHRcdGdvdG8gZHJvcDtcbjIzNjI6XHRcdH1cbjIzNjM6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4yMzY0Olx0XG4yMzY1Olx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZ1ZHBfZW5jYXBfbmVlZGVkX2tleSkgXHUwMDI2XHUwMDI2XG4yMzY2Olx0XHQgICAgUkVBRF9PTkNFKHVwLVx1MDAzZWVuY2FwX3R5cGUpKSB7XG4yMzY3Olx0XHRcdGludCAoKmVuY2FwX3Jjdikoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbjIzNjg6XHRcbjIzNjk6XHRcdFx0LypcbjIzNzA6XHRcdFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cbjIzNzE6XHRcdFx0ICogdGhlIHNvY2tldCYjMzk7cyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XG4yMzcyOlx0XHRcdCAqIGZhbGwgdGhyb3VnaCBhbmQgcGFzcyB0aGlzIHVwIHRoZSBVRFAgc29ja2V0LlxuMjM3MzpcdFx0XHQgKiB1cC1cdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XG4yMzc0Olx0XHRcdCAqID0wIGlmIHNrYiB3YXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCB0byB0aGUgZW5jYXBcbjIzNzU6XHRcdFx0ICogICAgaGFuZGxlciBvciB3YXMgZGlzY2FyZGVkIGJ5IGl0LlxuMjM3NjpcdFx0XHQgKiBcdTAwM2UwIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIFVEUC5cbjIzNzc6XHRcdFx0ICogXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXG4yMzc4Olx0XHRcdCAqL1xuMjM3OTpcdFxuMjM4MDpcdFx0XHQvKiBpZiB3ZSYjMzk7cmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xuMjM4MTpcdFx0XHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfcmN2KTtcbjIzODI6XHRcdFx0aWYgKGVuY2FwX3Jjdikge1xuMjM4MzpcdFx0XHRcdGludCByZXQ7XG4yMzg0Olx0XG4yMzg1Olx0XHRcdFx0LyogVmVyaWZ5IGNoZWNrc3VtIGJlZm9yZSBnaXZpbmcgdG8gZW5jYXAgKi9cbjIzODY6XHRcdFx0XHRpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuMjM4NzpcdFx0XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuMjM4ODpcdFxuMjM4OTpcdFx0XHRcdHJldCA9IGVuY2FwX3Jjdihzaywgc2tiKTtcbjIzOTA6XHRcdFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuMjM5MTpcdFx0XHRcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkRBVEFHUkFNUyk7XG4yMzkyOlx0XHRcdFx0XHRyZXR1cm4gLXJldDtcbjIzOTM6XHRcdFx0XHR9XG4yMzk0Olx0XHRcdH1cbjIzOTU6XHRcbjIzOTY6XHRcdFx0LyogRkFMTFRIUk9VR0ggLS0gaXQmIzM5O3MgYSBVRFAgUGFja2V0ICovXG4yMzk3Olx0XHR9XG4yMzk4Olx0XG4yMzk5Olx0XHRwcmVmZXRjaChcdTAwMjZzay1cdTAwM2Vza19ybWVtX2FsbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFAgTXVsdGljYXN0IERlbGl2ZXJ5IFBhdGgqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHVwLSZndDtlbmNhcF9yY3YoKWAgaXMgdGhlIGtleS4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8sIEkga25vdyB0aGUgYHNrYmAgbmVlZHMgdG8gYmUgcmVzdWJtaXR0ZWQgd2l0aCBhIHByb3RvY29sIGAtTmAuICBSaWdodCwgYW5kIGB1ZHBfcXVldWVfcmN2X29uZV9za2JgIGdpdmVzIGJhY2sgdGhlIG5lZ2F0aXZlIG9mIHRoZSByZXR1cm4gdmFsdWUgKGAtcmV0YCkgd2hlbiBpdCYjMzk7cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KClNvLCBpZiBgZW5jYXBfcmN2YCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCB0aGVuIHJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIgKGAtcmV0YCkuIFRoYXQgbWVhbnMgYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbHNvIHJldHVybnMgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBbmQgdWx0aW1hdGVseSwgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgcmVjZWl2ZXMgdGhpcyBwb3NpdGl2ZSB2YWx1ZS4KCkJlZm9yZSB0aGlzIHBhdGNoLCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBoYWQgdGhpcyBsb2dpYzogaXQgd291bGQgY2FsbCBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhbmQgaWYgdGhhdCByZXR1cm5lZCBhIHBvc2l0aXZlIHZhbHVlLCB0aGUgYHNrYmAgd2FzIGNvbnN1bWVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIGEgcHJvYmxlbSEgSW5zdGVhZCBvZiByZXN1Ym1pdHRpbmcgaXQgYXMgd2UgaW50ZW5kZWQsIHdlIHdlcmUganVzdCB0aHJvd2luZyBpdCBhd2F5LgoKTm93LCB3aXRoIHRoaXMgcGF0Y2gsIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGNhbGxzIGB1ZHBfcXVldWVfcmN2X3NrYmAsIGFuZCwgY3J1Y2lhbGx5LCBpZiBgcmV0ICZndDsgMGAsIGl0ICpyZXR1cm5zKiBgLXJldGAuICBTbywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LCBzaWduYWxpbmcgdGhlIG5lZWQgZm9yIHJlc3VibWlzc2lvbi4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjazogYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgaXMgcmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUsIGFzIGV4cGVjdGVkLCB0byBpbmRpY2F0ZSByZXN1Ym1pc3Npb24uIE5vdywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdobyBjYWxscyBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTI0NDg9Ym9vbCB1ZHBfc2tfcnhfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDY0LSAqL1xubmV0L2lwdjQvdWRwLmM6MjQ2NTpzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC91ZHAuYy0yNDY2LVx0XHRcdFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcbi0tXG5uZXQvaXB2NC91ZHAuYz0yNTkxPWludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjY0OS1cdGlmIChydC1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcbm5ldC9pcHY0L3VkcC5jOjI2NTA6XHRcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xubmV0L2lwdjQvdWRwLmMtMjY1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUmV0dXJuIFZhbHVlIG9mIGB1ZHBfcmN2YCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBVRFAgcmVjZWl2ZSBwYXRoLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgdWRwX3JjdmAg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCwgb2YgY291cnNlLCBpc24mIzM5O3QganVzdCAqd2hhdCogaGFwcGVucywgYnV0IHRoZSAqcmVzdWx0KiBvZiB0aGUgZnVuY3Rpb24uIFdoYXQgZG9lcyBgdWRwX3JjdmAgKnRlbGwqIG1lPyBXaGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgZW5jb2RlZCBpbiBpdHMgcmV0dXJuIHZhbHVlPwoKSSYjMzk7bSB0aGlua2luZzogaXMgaXQgYSBzaW1wbGUgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgYW5kIGlmIHNvLCBob3cgZ3JhbnVsYXIgaXMgdGhlIGluZm9ybWF0aW9uPyBEb2VzIGl0IHJldHVybiBhIHBvaW50ZXIgdG8gYSBkYXRhZ3JhbSwgYW5kIGlmIHNvLCBob3cgaXMgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlZD8gRG9lcyBpdCBoYXZlIHNpZGUgZWZmZWN0cz8gSXMgdGhlcmUgYSBzdWJ0bGUgc3RhdGUgY2hhbmdlIHRoYXQgaW1wYWN0cyBzdWJzZXF1ZW50IGNhbGxzPyBBcmUgdGhlcmUgZGlmZmVyZW50IHJldHVybiBwYXRocyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IGNvbmRpdGlvbiBhbmQgd2hhdCBmYWN0b3JzIGFyZSBjb25zaWRlcmVkIHRvIGRldGVybWluZSBob3cgdGhlIGNhbGwgc2hvdWxkIGJlIGhhbmRsZWQuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6IFdoYXQgYXJlIHRoZSBwb3NzaWJsZSBzdGF0ZXMgZm9sbG93aW5nIHRoZSBmdW5jdGlvbuKAmXMgY2FsbD8gVGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBzdGF0ZXMgb24gdGhlIGtlcm5lbCBhbmQgdGhlIGFwcGxpY2F0aW9uPyBNeSBnb2FsIGhlcmUgaXMgYSBmdWxsIGFuZCBkZWVwIGFwcHJlY2lhdGlvbiBvZiB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTkxOlx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjI1OTI6XHR7XG4yNTkzOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTtcbjI1OTQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4yNTk1Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xuMjU5NjpcdFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcbjI1OTc6XHRcdF9fYmUzMiBzYWRkciwgZGFkZHI7XG4yNTk4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbjI1OTk6XHRcdGJvb2wgcmVmY291bnRlZDtcbjI2MDA6XHRcdGludCBkcm9wX3JlYXNvbjtcbjI2MDE6XHRcbjI2MDI6XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4yNjAzOlx0XG4yNjA0Olx0XHQvKlxuMjYwNTpcdFx0ICogIFZhbGlkYXRlIHRoZSBwYWNrZXQuXG4yNjA2Olx0XHQgKi9cbjI2MDc6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpXG4yNjA4Olx0XHRcdGdvdG8gZHJvcDtcdFx0LyogTm8gc3BhY2UgZm9yIGhlYWRlci4gKi9cbjI2MDk6XHRcbjI2MTA6XHRcdHVoICAgPSB1ZHBfaGRyKHNrYik7XG4yNjExOlx0XHR1bGVuID0gbnRvaHModWgtXHUwMDNlbGVuKTtcbjI2MTI6XHRcdHNhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4yNjEzOlx0XHRkYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuMjYxNDpcdFxuMjYxNTpcdFx0aWYgKHVsZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4yNjE2Olx0XHRcdGdvdG8gc2hvcnRfcGFja2V0O1xuMjYxNzpcdFxuMjYxODpcdFx0aWYgKHVsZW4gXHUwMDNjIHNpemVvZigqdWgpKVxuMjYxOTpcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjA6XHRcbjI2MjE6XHRcdGlmICh1bGVuIFx1MDAzYyBza2ItXHUwMDNlbGVuKSB7XG4yNjIyOlx0XHRcdGlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCB1bGVuKSlcbjI2MjM6XHRcdFx0XHRnb3RvIHNob3J0X3BhY2tldDtcbjI2MjQ6XHRcbjI2MjU6XHRcdFx0dWggPSB1ZHBfaGRyKHNrYik7XG4yNjI2Olx0XHR9XG4yNjI3Olx0XG4yNjI4Olx0XHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXG4yNjI5Olx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjI2MzA6XHRcbjI2MzE6XHRcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cdTAwM2Vzb3VyY2UsIGRhZGRyLCB1aC1cdTAwM2VkZXN0LFxuMjYzMjpcdFx0XHRcdCAgICAgXHUwMDI2cmVmY291bnRlZCwgdWRwX2VoYXNoZm4pO1xuMjYzMzpcdFx0aWYgKElTX0VSUihzaykpXG4yNjM0Olx0XHRcdGdvdG8gbm9fc2s7XG4yNjM1Olx0XG4yNjM2Olx0XHRpZiAoc2spIHtcbjI2Mzc6XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMjYzODpcdFx0XHRpbnQgcmV0O1xuMjYzOTpcdFxuMjY0MDpcdFx0XHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXNrX3J4X2RzdCkgIT0gZHN0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFVEUCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGB1ZHBfcmN2YCBmdW5jdGlvbi4gU29tZXRoaW5nIGp1c3QgdHJpZ2dlcmVkIGEgY3VyaW9zaXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiByZWFsbHkgd29ya3MuIEFoLCBoZXJlIGl0IGlzLCBsaW5lIDI2NTAuIEl0JiMzOTtzIGNhbGxpbmcgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAuIEludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gZGlnIGRlZXBlciBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNpdHVhdGlvbnMgdHJpZ2dlciB0aGlzIGNhbGwuIExldCBtZSByZXJlYWQgdGhlIGVudGlyZSBmdW5jdGlvbiBmbG93LiBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyBsZWFkIHRvIHRoaXMgbXVsdGljYXN0IGRlbGl2ZXJ5IHBhdGguIFdoYXQgYXJlIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZml0cyBpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIFVEUCBwYWNrZXQgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9jdXNpbmcgb24gaG93IGRpZmZlcmVudCBwYWNrZXQgY2hhcmFjdGVyaXN0aWNzIGluZmx1ZW5jZSBjb250cm9sIGZsb3cuIEkgd2FudCB0aGUgZnVsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQxOlx0XHRcdFx0dWRwX3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XG4yNjQyOlx0XG4yNjQzOlx0XHRcdHJldCA9IHVkcF91bmljYXN0X3Jjdl9za2Ioc2ssIHNrYiwgdWgpO1xuMjY0NDpcdFx0XHRpZiAocmVmY291bnRlZClcbjI2NDU6XHRcdFx0XHRzb2NrX3B1dChzayk7XG4yNjQ2Olx0XHRcdHJldHVybiByZXQ7XG4yNjQ3Olx0XHR9XG4yNjQ4Olx0XG4yNjQ5Olx0XHRpZiAocnQtXHUwMDNlcnRfZmxhZ3MgXHUwMDI2IChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpXG4yNjUwOlx0XHRcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xuMjY1MTpcdFxuMjY1MjpcdFx0c2sgPSBfX3VkcDRfbGliX2xvb2t1cF9za2Ioc2tiLCB1aC1cdTAwM2Vzb3VyY2UsIHVoLVx1MDAzZWRlc3QpO1xuMjY1MzpcdFx0aWYgKHNrKVxuMjY1NDpcdFx0XHRyZXR1cm4gdWRwX3VuaWNhc3RfcmN2X3NrYihzaywgc2tiLCB1aCk7XG4yNjU1Olx0bm9fc2s6XG4yNjU2Olx0XHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSlcbjI2NTc6XHRcdFx0Z290byBkcm9wO1xuMjY1ODpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbjI2NTk6XHRcbjI2NjA6XHRcdC8qIE5vIHNvY2tldC4gRHJvcCBwYWNrZXQgc2lsZW50bHksIGlmIGNoZWNrc3VtIGlzIHdyb25nICovXG4yNjYxOlx0XHRpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuMjY2MjpcdFx0XHRnb3RvIGNzdW1fZXJyb3I7XG4yNjYzOlx0XG4yNjY0Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19TT0NLRVQ7XG4yNjY1Olx0XHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX05PUE9SVFMpO1xuMjY2NjpcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcbjI2Njc6XHRcbjI2Njg6XHRcdC8qXG4yNjY5Olx0XHQgKiBIbW0uICBXZSBnb3QgYW4gVURQIHBhY2tldCB0byBhIHBvcnQgdG8gd2hpY2ggd2VcbjI2NzA6XHRcdCAqIGRvbiYjMzk7dCB3YW5uYSBsaXN0ZW4uICBJZ25vcmUgaXQuXG4yNjcxOlx0XHQgKi9cbjI2NzI6XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG4yNjczOlx0XHRyZXR1cm4gMDtcbjI2NzQ6XHRcbjI2NzU6XHRzaG9ydF9wYWNrZXQ6XG4yNjc2Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xuMjY3NzpcdFx0bmV0X2RiZ19yYXRlbGltaXRlZChcJiMzNDtVRFA6IHNob3J0IHBhY2tldDogRnJvbSAlcEk0OiV1ICVkLyVkIHRvICVwSTQ6JXVcXG5cJiMzNDssXG4yNjc4Olx0XHRcdFx0ICAgIFx1MDAyNnNhZGRyLCBudG9ocyh1aC1cdTAwM2Vzb3VyY2UpLFxuMjY3OTpcdFx0XHRcdCAgICB1bGVuLCBza2ItXHUwMDNlbGVuLFxuMjY4MDpcdFx0XHRcdCAgICBcdTAwMjZkYWRkciwgbnRvaHModWgtXHUwMDNlZGVzdCkpO1xuMjY4MTpcdFx0Z290byBkcm9wO1xuMjY4MjpcdFxuMjY4MzpcdGNzdW1fZXJyb3I6XG4yNjg0Olx0XHQvKlxuMjY4NTpcdFx0ICogUkZDMTEyMjogT0suICBEaXNjYXJkcyB0aGUgYmFkIHBhY2tldCBzaWxlbnRseSAoYXMgZmFyIGFzXG4yNjg2Olx0XHQgKiB0aGUgbmV0d29yayBpcyBjb25jZXJuZWQsIGFueXdheSkgYXMgcGVyIDQuMS4zLjQgKE1VU1QpLlxuMjY4NzpcdFx0ICovXG4yNjg4Olx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9VRFBfQ1NVTTtcbjI2ODk6XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7VURQOiBiYWQgY2hlY2tzdW0uIEZyb20gJXBJNDoldSB0byAlcEk0OiV1IHVsZW4gJWRcXG5cJiMzNDssXG4yNjkwOlx0XHRcdFx0ICAgIFx1MDAyNnNhZGRyLCBudG9ocyh1aC1cdTAwM2Vzb3VyY2UpLCBcdTAwMjZkYWRkciwgbnRvaHModWgtXHUwMDNlZGVzdCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqVURQIE11bHRpY2FzdCBEZWxpdmVyeSBEZWVwIERpdmUqKgoKT2theSwgc28gYHVkcF9yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGluY29taW5nIFVEUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgZG9lcyBgdWRwX3JjdmAgYWN0dWFsbHkgKnJldHVybio/IFRoZSBjb2RlIGluZGljYXRlcyBpdCYjMzk7cyB0aWVkIHRvIHdoYXQgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgZG9lcy4gVGhhdCBzZWVtcyBsaWtlIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbm5lY3Rpb24gYmV0dGVyLgoKTm93LCBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGlzIHRoZSBvbmUgdGhhdCAqdXNlcyogdGhlIHJldHVybiB2YWx1ZSBmcm9tIGB1ZHBfcmN2YC4gVGhpcyBsb29rcyBsaWtlIHRoZSBuZXh0IHNpZ25pZmljYW50IHBvaW50IGluIHRoZSBjaGFpbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IG9yY2hlc3RyYXRlcyB0aGUgaGlnaGVyLWxldmVsIHByb2Nlc3NpbmcsIG9yIGF0IGxlYXN0IGhvdyB0aGUgcGFja2V0IGlzIHVzZWQuCgpSaWdodCwgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyBsb2NhdGVkIGluIGBuZXQvaXB2NC9pcF9pbnB1dC5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGRpc3NlY3QgdGhlIGxvZ2ljIHdpdGhpbiBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoYXQgcmV0dXJuIHZhbHVlIGFuZCBob3cgdGhlIGRlbGl2ZXJ5IHByb2Nlc3MgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9wcm90b2NvbF9kZWxpdmVyX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfaW5wdXQuYz0xODg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjE4OTp2b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxubmV0L2lwdjQvaXBfaW5wdXQuYy0xOTAte1xuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0yNDAtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjI0MTpcdGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI0Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIG9uIHRoZSBkb2NrZXQuLi4gQWgsIHJpZ2h0LCBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaW1lIHRvIGdldCBteSB0ZWV0aCBpbnRvIHRoaXMgb25lLiBJIGtub3cgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBJUCB0cmFmZmljIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgc3luY2hyb25pemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBob3cgaXQgaXMgaW1wYWN0aW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEga2V5IHJvbGUgaW4gZGVsaXZlcmluZyBwYWNrZXRzIHRvIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHByb3RvY29sIGhhbmRsZXJzIGFmdGVyIHRoZXkmIzM5O3ZlIGJlZW4gcmVjZWl2ZWQuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBkZW11bHRpcGxleGluZywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCYjMzk7cyBkb25lIHdpdGhpbiB0aGUgY29udGV4dCBvZiBSQ1UsIHBhcnRpY3VsYXJseSB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSBhbmQgbG9jayBjb250ZW50aW9uIOKAkyBvciwgcmF0aGVyLCB0aGUgYXZvaWRhbmNlIHRoZXJlb2YuIEkgYW50aWNpcGF0ZSB0aGF0IFJDVSBpcyB1c2VkIGhlcmUgdG8gb3B0aW1pemUgdGhlIHJlYWQgcGF0aHMsIGFsbG93aW5nIGZvciBoaWdoLXRocm91Z2hwdXQgcGFja2V0IGRlbGl2ZXJ5IHdpdGhvdXQgZXhjZXNzaXZlIGxvY2tpbmcgb3ZlcmhlYWQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBiYWxhbmNlIGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIGNvbnNpc3RlbmN5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4OTpcdHZvaWQgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG9jb2wpXG4gMTkwOlx0e1xuIDE5MTpcdFx0Y29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCAqaXBwcm90O1xuIDE5MjpcdFx0aW50IHJhdywgcmV0O1xuIDE5MzpcdFxuIDE5NDpcdHJlc3VibWl0OlxuIDE5NTpcdFx0cmF3ID0gcmF3X2xvY2FsX2RlbGl2ZXIoc2tiLCBwcm90b2NvbCk7XG4gMTk2Olx0XG4gMTk3Olx0XHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9wcm90b3NbcHJvdG9jb2xdKTtcbiAxOTg6XHRcdGlmIChpcHByb3QpIHtcbiAxOTk6XHRcdFx0aWYgKCFpcHByb3QtXHUwMDNlbm9fcG9saWN5KSB7XG4gMjAwOlx0XHRcdFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiAyMDE6XHRcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLFxuIDIwMjpcdFx0XHRcdFx0XHRcdCBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1kpO1xuIDIwMzpcdFx0XHRcdFx0cmV0dXJuO1xuIDIwNDpcdFx0XHRcdH1cbiAyMDU6XHRcdFx0XHRuZl9yZXNldF9jdChza2IpO1xuIDIwNjpcdFx0XHR9XG4gMjA3Olx0XHRcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXHUwMDNlaGFuZGxlciwgdGNwX3Y0X3JjdiwgdWRwX3JjdixcbiAyMDg6XHRcdFx0XHRcdCAgICAgIHNrYik7XG4gMjA5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAyMTA6XHRcdFx0XHRwcm90b2NvbCA9IC1yZXQ7XG4gMjExOlx0XHRcdFx0Z290byByZXN1Ym1pdDtcbiAyMTI6XHRcdFx0fVxuIDIxMzpcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xuIDIxNDpcdFx0fSBlbHNlIHtcbiAyMTU6XHRcdFx0aWYgKCFyYXcpIHtcbiAyMTY6XHRcdFx0XHRpZiAoeGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gMjE3Olx0XHRcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOVU5LTk9XTlBST1RPUyk7XG4gMjE4Olx0XHRcdFx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCxcbiAyMTk6XHRcdFx0XHRcdFx0ICBJQ01QX1BST1RfVU5SRUFDSCwgMCk7XG4gMjIwOlx0XHRcdFx0fVxuIDIyMTpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfTk9QUk9UTyk7XG4gMjIyOlx0XHRcdH0gZWxzZSB7XG4gMjIzOlx0XHRcdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcbiAyMjQ6XHRcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIDIyNTpcdFx0XHR9XG4gMjI2Olx0XHR9XG4gMjI3Olx0fVxuIDIyODpcdFxuIDIyOTpcdHN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gMjMwOlx0e1xuIDIzMTpcdFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbiAyMzI6XHRcdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcbiAyMzM6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT01FTSk7XG4gMjM0Olx0XHRcdHJldHVybiAwO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcbiAyMzg6XHRcdF9fc2tiX3B1bGwoc2tiLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgUmVzdWJtaXNzaW9uIExvZ2ljKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlciBpbiBteSBoZWFkLiBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGlzIHRoZSBrZXkg4oCTIGl0IGV4cGxpY2l0bHkgY2hlY2tzIGlmIGByZXQgJmx0OyAwYCBhbmQsIGlmIGl0IGlzLCBpdCByZXN1Ym1pdHMgdGhlIHBhY2tldCB3aXRoIGBwcm90b2NvbCA9IC1yZXRgLiBHb3QgaXQuIFRoYXQgbWVhbnMgdGhlIGB1ZHBfcmN2YCBmdW5jdGlvbiAqaGFzKiB0byByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSB0byBraWNrIG9mZiB0aGUgcmVzdWJtaXNzaW9uIHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyByZXNwb25zaWJsZSBmb3IgZGVsaXZlcmluZyBtdWx0aWNhc3QgVURQIHBhY2tldHMsIGFuZCBub3cgaXQgcmV0dXJucyBgLXJldGAgd2hlbiBgcmV0ICZndDsgMGAuIEhhbmcgb27igKYgYHVkcF9xdWV1ZV9yY3Zfc2tiYCAqcmV0dXJucyogYSBwb3NpdGl2ZSB2YWx1ZSB0byBzaWduYWwgcmVzdWJtaXNzaW9uISBTbywgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgdGFrZXMgdGhhdCBwb3NpdGl2ZSB2YWx1ZSBmcm9tIGB1ZHBfcXVldWVfcmN2X3NrYmAsIG5lZ2F0ZXMgaXQsIGFuZCByZXR1cm5zIHRoZSBuZWdhdGl2ZSByZXN1bHQuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyByZXN1bHRpbmcgbmVnYXRpdmUgdmFsdWUgdGhlbiBidWJibGVzIHVwIHRvIGB1ZHBfcmN2YC4gVGhpcyBlZmZlY3RpdmVseSBmbGFncyBgdWRwX3JjdmAgdG8gYWxzbyByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgdG8gdHJpZ2dlciB0aGUgcmVzdWJtaXNzaW9uIGZyb20gYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4gVGhlIHdob2xlIHN5c3RlbSBpcyB1c2luZyB0aGUgc2lnbiBvZiB0aGUgcmV0dXJuIGNvZGUgYXMgYSB0cmlnZ2VyLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgSVB2NC4gTm93LCBmb3IgSVB2NiwgSSBuZWVkIHRvIGNoZWNrIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGluIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGUgSVB2NiBwYXRoIGFsaWducyB3aXRoIHRoaXMgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9wcm90b2NvbF9kZWxpdmVyX3JjdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9pbnB1dC5jPTM5OD1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICopKTtcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDItICovXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo0MDM6dm9pZCBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcixcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTQwNC1cdFx0XHQgICAgICBib29sIGhhdmVfZmluYWwpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTI0PXN0YXRpYyBpbnQgaXA2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzMtXHRza2JfY2xlYXJfZGVsaXZlcnlfdGltZShza2IpO1xubmV0L2lwdjYvaXA2X2lucHV0LmM6NTM0Olx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCAwLCBmYWxzZSk7XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgOgoKKipBbmFseXppbmcgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgZ2V0dGluZyBzaXR1YXRlZC4gJiMzNDtMZXQmIzM5O3MgcmVhZCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4mIzM0OyBKdXN0IHN0YXRpbmcgdGhlIG9idmlvdXMsIGdldHRpbmcgbXkgbWVudGFsIGdlYXJzIHR1cm5pbmcuIEkgaW1tZWRpYXRlbHkga25vdyB0aGUgY29udGV4dCBpcyBJUHY2IHByb3RvY29sIGRlbGl2ZXJ5LCBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBzb3J0IG9mIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgbWVjaGFuaXNtIGJlaW5nIGVtcGxveWVkLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24gYW5kIGhhbmRsaW5nIG9mIGRhdGEgc3RydWN0dXJlcywgbGlrZWx5IHJlbGF0ZWQgdG8gcm91dGluZyBvciBwYWNrZXQgcHJvY2Vzc2luZywgd2l0aGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlICYjMzQ7UkNVJiMzNDsgcGFydCBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBzdHJvbmcgZW1waGFzaXMgb24gbWluaW1pemluZyByZWFkLXNpZGUgbG9ja2luZywgYW5kIHRoYXQgd3JpdGVycyBoYXZlIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBjb29yZGluYXRlIGNoYW5nZXMgc28gYXMgbm90IHRvIGRpc3J1cHQgY29uY3VycmVudCByZWFkZXJzLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggZnVuY3Rpb24/IFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGRlbGl2ZXJlZD8gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgd2lsbCBiZSBoYW5kbGluZyB0aGUgZGlzcGF0Y2ggb2YgaW5jb21pbmcgSVB2NiBwYWNrZXRzIHRvIHRoZWlyIGFwcHJvcHJpYXRlIHVwcGVyLWxheWVyIHByb3RvY29scy4gVGltZSB0byByZWFkIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMzpcdHZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXG4gNDA0Olx0XHRcdFx0ICAgICAgYm9vbCBoYXZlX2ZpbmFsKVxuIDQwNTpcdHtcbiA0MDY6XHRcdGludCBleHRoZHJfY250ID0gSVA2Q0Ioc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSVA2U0tCX0hPUEJZSE9QID8gMSA6IDA7XG4gNDA3Olx0XHRjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmlwcHJvdDtcbiA0MDg6XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4gNDA5Olx0XHR1bnNpZ25lZCBpbnQgbmhvZmY7XG4gNDEwOlx0XHRTS0JfRFIocmVhc29uKTtcbiA0MTE6XHRcdGJvb2wgcmF3O1xuIDQxMjpcdFxuIDQxMzpcdFx0LypcbiA0MTQ6XHRcdCAqXHRQYXJzZSBleHRlbnNpb24gaGVhZGVyc1xuIDQxNTpcdFx0ICovXG4gNDE2Olx0XG4gNDE3Olx0cmVzdWJtaXQ6XG4gNDE4Olx0XHRpZGV2ID0gaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSk7XG4gNDE5Olx0XHRuaG9mZiA9IElQNkNCKHNrYiktXHUwMDNlbmhvZmY7XG4gNDIwOlx0XHRpZiAoIWhhdmVfZmluYWwpIHtcbiA0MjE6XHRcdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKSlcbiA0MjI6XHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4gNDIzOlx0XHRcdG5leHRoZHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKVtuaG9mZl07XG4gNDI0Olx0XHR9XG4gNDI1Olx0XG4gNDI2Olx0cmVzdWJtaXRfZmluYWw6XG4gNDI3Olx0XHRyYXcgPSByYXc2X2xvY2FsX2RlbGl2ZXIoc2tiLCBuZXh0aGRyKTtcbiA0Mjg6XHRcdGlwcHJvdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbbmV4dGhkcl0pO1xuIDQyOTpcdFx0aWYgKGlwcHJvdCkge1xuIDQzMDpcdFx0XHRpbnQgcmV0O1xuIDQzMTpcdFxuIDQzMjpcdFx0XHRpZiAoaGF2ZV9maW5hbCkge1xuIDQzMzpcdFx0XHRcdGlmICghKGlwcHJvdC1cdTAwM2VmbGFncyBcdTAwMjYgSU5FVDZfUFJPVE9fRklOQUwpKSB7XG4gNDM0Olx0XHRcdFx0XHQvKiBPbmNlIHdlJiMzOTt2ZSBzZWVuIGEgZmluYWwgcHJvdG9jb2wgZG9uJiMzOTt0XG4gNDM1Olx0XHRcdFx0XHQgKiBhbGxvdyBlbmNhcHN1bGF0aW9uIG9uIGFueSBub24tZmluYWxcbiA0MzY6XHRcdFx0XHRcdCAqIG9uZXMuIFRoaXMgYWxsb3dzIGZvbyBpbiBVRFAgZW5jYXBzdWxhdGlvblxuIDQzNzpcdFx0XHRcdFx0ICogdG8gd29yay5cbiA0Mzg6XHRcdFx0XHRcdCAqL1xuIDQzOTpcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ0MDpcdFx0XHRcdH1cbiA0NDE6XHRcdFx0fSBlbHNlIGlmIChpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XG4gNDQyOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjtcbiA0NDM6XHRcdFx0XHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcbiA0NDQ6XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDQ0NTpcdFxuIDQ0NjpcdFx0XHRcdC8qIE9ubHkgZG8gdGhpcyBvbmNlIGZvciBmaXJzdCBmaW5hbCBwcm90b2NvbCAqL1xuIDQ0NzpcdFx0XHRcdGhhdmVfZmluYWwgPSB0cnVlO1xuIDQ0ODpcdFxuIDQ0OTpcdFxuIDQ1MDpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxuIDQ1MTpcdFx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuIDQ1MjpcdFx0XHRcdGhkciA9IGlwdjZfaGRyKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBmdW5jdGlvbiBjYWxsOyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzcGVjaWZpYyByb2xlLiBHaXZlbiB0aGUgJiMzNDtyY3UmIzM0OyBzdWZmaXgsIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgb3BlcmF0aW5nIHVuZGVyIGEgUmVhZC1Db3B5LVVwZGF0ZSBwYXJhZGlnbS4gVGhlcmVmb3JlLCBpdCBpcyBpbXBvcnRhbnQgZm9yIG1lIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSVB2NiBwcm90b2NvbCYjMzk7cyByZWNlaXZlIHBhdGgsIGFuZCBtb3JlIHBhcnRpY3VsYXJseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJDVSBtZWNoYW5pc20gdG8gZW5zdXJlIHNhZmUgY29uY3VycmVudCBhY2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiByZWNlaXZpbmcgYW5kIHByb2Nlc3NpbmcgSVB2NiBwYWNrZXRzLiBJIGV4cGVjdCB0byBzZWUgY2FyZWZ1bCBoYW5kbGluZyBvZiBwb2ludGVycyBhbmQgbGlrZWx5IHNvbWUgdXNlIG9mIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIHRvIHByb3RlY3QgY3JpdGljYWwgc2VjdGlvbnMsIG9yIHBvc3NpYmx5IHRoZSB1c2FnZSBvZiBzcGVjaWZpYyBSQ1UgcHJpbWl0aXZlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgZGVjaWRlcyB3aGljaCBwcm90b2NvbCBoYW5kbGVyIHRvIGludm9rZSwgYW5kIGhvdyBpdCBzYWZlbHkgdHJhbnNmZXJzIGRhdGEgdG8gdGhhdCBoYW5kbGVyLiBUaGUgbnVhbmNlcyBvZiBpdHMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbG9jayBjb250ZW50aW9uIGlzc3VlcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgaW4gYSBoaWdoLXRocm91Z2hwdXQgSVB2NiBlbnZpcm9ubWVudC4gS25vd2luZyB3aGVyZSBwYWNrZXRzIGFyZSBzYWZlbHkgcHJvY2Vzc2VkIHVzaW5nIHRoaXMgcGF0dGVybiB3aWxsIGJlIHVzZWZ1bCBmb3Igc2VjdXJpdHksIGVzcGVjaWFsbHkuIEkgd29uZGVyIGlmIGl0IHN1cHBvcnRzIGFueSBleHRlbnNpb25zIG9yIHNwZWNpYWwgZmVhdHVyZXMgcmVsYXRlZCB0byBSQ1UmIzM5O3MgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcz8gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MzpcdFxuIDQ1NDpcdFx0XHRcdC8qIHNrYi1cdTAwM2VkZXYgcGFzc2VkIG1heSBiZSBtYXN0ZXIgZGV2IGZvciB2cmZzLiAqL1xuIDQ1NTpcdFx0XHRcdGlmIChzZGlmKSB7XG4gNDU2Olx0XHRcdFx0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHNkaWYpO1xuIDQ1NzpcdFx0XHRcdFx0aWYgKCFkZXYpXG4gNDU4Olx0XHRcdFx0XHRcdGdvdG8gZGlzY2FyZDtcbiA0NTk6XHRcdFx0XHR9IGVsc2Uge1xuIDQ2MDpcdFx0XHRcdFx0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbiA0NjE6XHRcdFx0XHR9XG4gNDYyOlx0XG4gNDYzOlx0XHRcdFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2aGRyLVx1MDAzZWRhZGRyKSBcdTAwMjZcdTAwMjZcbiA0NjQ6XHRcdFx0XHQgICAgIWlwdjZfY2hrX21jYXN0X2FkZHIoZGV2LCBcdTAwMjZoZHItXHUwMDNlZGFkZHIsXG4gNDY1Olx0XHRcdFx0XHRcdFx0IFx1MDAyNmhkci1cdTAwM2VzYWRkcikgXHUwMDI2XHUwMDI2XG4gNDY2Olx0XHRcdFx0ICAgICFpcHY2X2lzX21sZChza2IsIG5leHRoZHIsIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSkpIHtcbiA0Njc6XHRcdFx0XHRcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkFERFJFUlJPUlMpO1xuIDQ2ODpcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ2OTpcdFx0XHRcdH1cbiA0NzA6XHRcdFx0fVxuIDQ3MTpcdFx0XHRpZiAoIShpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX05PUE9MSUNZKSkge1xuIDQ3MjpcdFx0XHRcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gNDczOlx0XHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgWEZSTV9QT0xJQ1kpO1xuIDQ3NDpcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ3NTpcdFx0XHRcdH1cbiA0NzY6XHRcdFx0XHRuZl9yZXNldF9jdChza2IpO1xuIDQ3NzpcdFx0XHR9XG4gNDc4Olx0XG4gNDc5Olx0XHRcdHJldCA9IElORElSRUNUX0NBTExfMihpcHByb3QtXHUwMDNlaGFuZGxlciwgdGNwX3Y2X3JjdiwgdWRwdjZfcmN2LFxuIDQ4MDpcdFx0XHRcdFx0ICAgICAgc2tiKTtcbiA0ODE6XHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuIDQ4MjpcdFx0XHRcdGlmIChpcHByb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XG4gNDgzOlx0XHRcdFx0XHQvKiBOb3QgYW4gZXh0ZW5zaW9uIGhlYWRlciwgbW9zdCBsaWtlbHkgVURQXG4gNDg0Olx0XHRcdFx0XHQgKiBlbmNhcHN1bGF0aW9uLiBVc2UgcmV0dXJuIHZhbHVlIGFzIG5leHRoZHJcbiA0ODU6XHRcdFx0XHRcdCAqIHByb3RvY29sIG5vdCBuaG9mZiAod2hpY2ggcHJlc3VtYWJseSBpc1xuIDQ4NjpcdFx0XHRcdFx0ICogbm90IHNldCBieSBoYW5kbGVyKS5cbiA0ODc6XHRcdFx0XHRcdCAqL1xuIDQ4ODpcdFx0XHRcdFx0bmV4dGhkciA9IHJldDtcbiA0ODk6XHRcdFx0XHRcdGdvdG8gcmVzdWJtaXRfZmluYWw7XG4gNDkwOlx0XHRcdFx0fSBlbHNlIHtcbiA0OTE6XHRcdFx0XHRcdGlmICh1bmxpa2VseShleHRoZHJfY250JiM0MzsmIzQzOyBcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSkge1xuIDQ5MjpcdFx0XHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBWNl9UT09fTUFOWV9FWFRIRFJTKTtcbiA0OTM6XHRcdFx0XHRcdFx0Z290byBkaXNjYXJkO1xuIDQ5NDpcdFx0XHRcdFx0fVxuIDQ5NTpcdFx0XHRcdFx0Z290byByZXN1Ym1pdDtcbiA0OTY6XHRcdFx0XHR9XG4gNDk3Olx0XHRcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcbiA0OTg6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcbiA0OTk6XHRcdFx0fVxuIDUwMDpcdFx0fSBlbHNlIHtcbiA1MDE6XHRcdFx0aWYgKCFyYXcpIHtcbiA1MDI6XHRcdFx0XHRpZiAoeGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBNdWx0aWNhc3QgUGFja2V0IFJlc3VibWlzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQdjYgY29kZSBhbmQgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy4gSSBzZWUgdGhhdCBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyB0aGUga2V5IGZ1bmN0aW9uOyBpdCBjaGVja3MgaWYgdGhlIHJldHVybiB2YWx1ZSwgYHJldGAsIGZyb20gYSBwcmV2aW91cyBwcm9jZXNzaW5nIHN0ZXAgaXMgZ3JlYXRlciB0aGFuIHplcm8uIElmIGl0IGlzLCBpdCByZXN1Ym1pdHMgdGhlIHBhY2tldCwgdXNpbmcgYHJldGAgYXMgdGhlIG5leHQgaGVhZGVyIHZhbHVlLiBUaGF0JiMzOTtzIHRoZSB0cmlnZ2VyLiBTbywgdG8gbWFrZSB0aGlzIHdvcmssIGB1ZHB2Nl9yY3ZgIG5lZWRzIHRvIHJldHVybiBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpbmRpY2F0aW5nIHRoYXQgcmVzdWJtaXNzaW9uIGlzIG5lY2Vzc2FyeS4KCk5vdyBJJiMzOTttIGZvY3VzaW5nIG9uIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgIHdpdGhpbiBgbmV0L2lwdjYvdWRwLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0IGNhbGxzIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYCwgYW5kIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCByZXR1cm5zIHRoYXQgdmFsdWUgdG8gdGhlIGNhbGxlci4gTG9va2luZyBhdCBob3cgYHVkcHY2X3JjdmAgaXMgaW52b2tlZCwgaXQgbWFrZXMgc2Vuc2U7IGl0IHdpbGwgcmV0dXJuIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIGFuZCB0aGUgb3V0ZXIgbGF5ZXIgd2lsbCB0cmlnZ2VyIHRoZSByZS1zdWJtaXNzaW9uIHZpYSBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YC4KClRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZml4aW5nIGEgYnVnLiBFbmNhcHN1bGF0ZWQgbXVsdGljYXN0IHBhY2tldHMgd2VyZSBnZXR0aW5nIGRyb3BwZWQsIGJ1dCBub3cgdGhleSYjMzk7bGwgYmUgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4LiBUaGUgdGVzdCBzZXR1cCB1c2VzIEZPVSBhbmQgR1JFVEFQLCBhcyBleHBlY3RlZC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gdGVzdCB0aGlzOiBgTkVUX0ZPVWAsIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBtaWdodCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlbWVudHMgZm9yIGBncmV0YXBgIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgTkVUX0lQR1JFX0JST0FEQ0FTVGAsIGJ1dCBmb3Igc3VyZSBJIG5lZWQgYElQVjZfR1JFYC4gTGV0IG1lIGdsYW5jZSBhdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2AgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfSVBHUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc9ODg9Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjg5OkNPTkZJR19ORVRfSVBHUkU9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo5MDpDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctOTEtQ09ORklHX05FVF9JUElQPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgSVB2NiBHUkUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIElQdjYgR1JFIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgYENPTkZJR19JUFY2X0dSRWAgYWN0dWFsbHkgcHJlc2VudCBhbmQgYXZhaWxhYmxlIHdpdGhpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQ/JiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3RvcmVkLiBUaGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlc2Ugc29ydHMgb2YgY2hlY2tzIGlzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbiBpcyBleHBsaWNpdGx5IHN0YXRlZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfR1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTQwPUNPTkZJR19JUFY2PXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDE6Q09ORklHX0lQVjZfR1JFPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDItQ09ORklHX0lQVjZfSUxBPW1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIENPTkZJR19ORVRfRk9VIGluIHRoZSBSaWdodCBQbGFjZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIFRpbWUgdG8gbWFrZSBzdXJlIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHdoZXJlIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRfRk9VYCBpcyBwcmVzZW50LCBidXQgbW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCByZXNpZGVzIHdpdGhpbiB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGl0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBmb3IgbmV0d29yayBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIHRoZSBwYXRoIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBkaXZlIGludG8gYW55IGFjdHVhbCB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHJlbGF0ZWQgdG8gaXQuICBTbywgbGV0IG1lIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24gYW5kIGhhdmUgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX0ZPVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjg3OkNPTkZJR19ORVRfRk9VPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6ODg6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTg5LUNPTkZJR19ORVRfSVBHUkU9bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRk9VIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGFyZSBgTkVUX0ZPVWAsIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIEdvdCBpdC4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gVGhvc2UgYXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhcyB0aGF0JiMzOTtzIGEga2V5IHBhcnQgb2YgVURQIHByb2Nlc3NpbmcsIGJ1dCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgaXQgaXNuJiMzOTt0IHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gQW5kIHNpbmNlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGlzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZm9yIG11bHRpY2FzdCBhbmQgYnJvYWRjYXN0IFVEUCBwYWNrZXRzLCB0aGF0JiMzOTtzIHdoYXQgSSB3aWxsIHVzZS4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgRk9VLWVuY2Fwc3VsYXRlZCBtdWx0aWNhc3QgcGFja2V0cyB3ZXJlIGluY29ycmVjdGx5IGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSByZXR1cm5pbmcgYSByZXN1Ym1pdCByZXF1ZXN0LCBwb3NpdGl2ZSBmb3IgSVB2NiBhbmQgbmVnYXRpdmUgZm9yIElQdjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgd2UgZnV6eiB0aGlzIGFyZWEgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlc2UgbXVsdGljYXN0IHBhY2tldHMgYXJlIHJlc3VibWl0dGVkLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB3aGlsZSBJIGhhdmUgdGhlIGVzc2VudGlhbHMsIGl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IG5vIG90aGVyLCBsZXNzIG9idmlvdXMgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIGBORVRfSVBHUkVfREVNVVhgIGlzIHVzdWFsbHkgYXV0b21hdGljYWxseSBzZWxlY3RlZCB3aXRoIGBORVRfSVBHUkVgIG9yIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMjE9Y29uZmlnIE5FVF9GT1Vcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cbm5ldC9pcHY0L0tjb25maWc6MzMwOmNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcbm5ldC9pcHY0L0tjb25maWctMzMxLVx0Ym9vbCBcJiMzNDtJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE3OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGludGVybmFscywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsOgoKKipEZWx2aW5nIGludG8gSVB2NCBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4gYW5kIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIElQdjQgdHVubmVsIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBwbGFjZSB0byBzdGFydCBzZWVtcyB0byBiZSBgbmV0L2lwdjQvS2NvbmZpZ2AsIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4gVGhpcyBzdWdnZXN0cyBJJiMzOTttIGFmdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUC1pbi1JUCB0dW5uZWxzLCBsaWtlbHkgdGhlIGBmb3VgIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGNvbmZpZyBvcHRpb24gYW5kIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyB0byBzZWUgaG93IHRoZSBvcHRpb24gZW5hYmxlcyBvciBkaXNhYmxlcyBjZXJ0YWluIGNvZGUgcGF0aHMsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgKG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGZlYXR1cmVzKSwgYW5kIHdoYXQga2luZCBvZiBpbXBhY3QgaXRzIGFjdGl2YXRpb24gaGFzIG9uIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuYWJsaW5nIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgSVB2NCB0dW5uZWxzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBjcnVjaWFsLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW5zaWdodCBpbnRvIGhvdyBgTkVUX0ZPVV9JUF9UVU5ORUxTYCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGVzZSB0dW5uZWwgbWVjaGFuaXNtcywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUCB0dW5uZWxpbmcgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjE6XHRjb25maWcgTkVUX0ZPVVxuIDMyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IEZvbyAoSVAgcHJvdG9jb2xzKSBvdmVyIFVEUFwmIzM0O1xuIDMyMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMzI0Olx0XHRoZWxwXG4gMzI1Olx0XHQgIEZvbyBvdmVyIFVEUCBhbGxvd3MgYW55IElQIHByb3RvY29sIHRvIGJlIGRpcmVjdGx5IGVuY2Fwc3VsYXRlZFxuIDMyNjpcdFx0ICBvdmVyIFVEUCBpbmNsdWRlIHR1bm5lbHMgKElQSVAsIEdSRSwgU0lUKS4gQnkgZW5jYXBzdWxhdGluZyBpbiBVRFBcbiAzMjc6XHRcdCAgbmV0d29yayBtZWNoYW5pc21zIGFuZCBvcHRpbWl6YXRpb25zIGZvciBVRFAgKHN1Y2ggYXMgRUNNUFxuIDMyODpcdFx0ICBhbmQgUlNTKSBjYW4gYmUgbGV2ZXJhZ2VkIHRvIHByb3ZpZGUgYmV0dGVyIHNlcnZpY2UuXG4gMzI5Olx0XG4gMzMwOlx0Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xuIDMzMTpcdFx0Ym9vbCBcJiMzNDtJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1wmIzM0O1xuIDMzMjpcdFx0ZGVwZW5kcyBvbiBORVRfSVBJUCB8fCBORVRfSVBHUkUgfHwgSVBWNl9TSVRcbiAzMzM6XHRcdHNlbGVjdCBORVRfRk9VXG4gMzM0Olx0XHRoZWxwXG4gMzM1Olx0XHQgIEFsbG93IGNvbmZpZ3VyYXRpb24gb2YgRk9VIG9yIEdVRSBlbmNhcHN1bGF0aW9uIGZvciBJUCB0dW5uZWxzLlxuIDMzNjpcdFx0ICBXaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgSVAgdHVubmVscyBjYW4gYmUgY29uZmlndXJlZCB0byB1c2VcbiAzMzc6XHRcdCAgRk9VIG9yIEdVRSBlbmNhcHN1bGF0aW9uLlxuIDMzODpcdFxuIDMzOTpcdGNvbmZpZyBJTkVUX0FIXG4gMzQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gYE5FVF9GT1VfSVBfVFVOTkVMU2AgKnJlcXVpcmVzKiBlaXRoZXIgYE5FVF9JUElQYCwgYE5FVF9JUEdSRWAsIG9yIGBJUFY2X1NJVGAgdG8gYmUgZW5hYmxlZC4gTWFrZXMgc2Vuc2UsIGl0IG5lZWRzIHNvbWUgdW5kZXJseWluZyBJUCB0dW5uZWwgbWVjaGFuaXNtLiBBbmQsIGlmIEkgZW5hYmxlIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBpdCBhdXRvbWF0aWNhbGx5ICpzZWxlY3RzKiBgTkVUX0ZPVWAuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQ7IEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgbWFudWFsbHkgZW5hYmxpbmcgYE5FVF9GT1VgIHNlcGFyYXRlbHkgaWYgSSYjMzk7bSB1c2luZyB0aG9zZSB0dW5uZWxzLgoKVGhlcmVmb3JlLCB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byBnZXR0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZSB0byBqdXN0IGVuYWJsZSBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYE5FVF9JUEdSRWAsIGFuZCBgSVBWNl9HUkVgLiBUaGF0IHNob3VsZCBzYXRpc2Z5IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zLgoKTm93LCBsZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYE5FVF9JUEdSRWAgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGZ1cnRoZXIgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0lQR1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE3OS1cbm5ldC9pcHY0L0tjb25maWc6MTgwOmNvbmZpZyBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWctMTgxLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSBkZW11bHRpcGxleGVyXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIwNi1cbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYE5FVF9JUEdSRWAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFzIGlmIGl0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBleHBlcnQgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYG5ldC9pcHY0L0tjb25maWdgLiBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgTkVUX0lQR1JFYCBvcHRpb24sIG5hdHVyYWxseS4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgY29uZmlnIHdpbGwgZGVmaW5lIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGdlbmVyaWMgcm91dGluZyBlbmNhcHN1bGF0aW9uIChHUkUpIHN1cHBvcnQgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBHaXZlbiBteSBmYW1pbGlhcml0eSwgSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYmxvY2ssIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSB0aG9yb3VnaCByZXZpZXcgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGdvdGNoYXMgb3IgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXMqKjogV2hhdCBvdGhlciBmZWF0dXJlcyAqbXVzdCogYmUgZW5hYmxlZCBvciBhcmUgbG9naWNhbGx5IHJlbGF0ZWQgZm9yIGBORVRfSVBHUkVgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBpbmRpcmVjdCBkZXBlbmRlbmNpZXMsIHdoZXJlIGVuYWJsaW5nIEdSRSB1bmxvY2tzIGFub3RoZXIgY2FwYWJpbGl0eT8KKiAgICoqRGVmYXVsdCBCZWhhdmlvcioqOiBXaGF0JiMzOTtzIHRoZSBkZWZhdWx0IHN0YXRlIG9mIGBORVRfSVBHUkVgPyBJcyBpdCB0eXBpY2FsbHkgY29tcGlsZWQgaW4gYXMgYSBtb2R1bGUsIG9yIGlzIGl0IGRpcmVjdGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgYnkgZGVmYXVsdD8gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBwcm92aWRlcyBhIHN0cm9uZyBoaW50IGFib3V0IGhvdyBjcml0aWNhbCB0aGUgbWFpbnRhaW5lcnMgY29uc2lkZXIgdGhpcyBmdW5jdGlvbmFsaXR5LgoqICAgKipIZWxwIFRleHQqKjogVGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcHRpb24gd2lsbCBiZSBpbnZhbHVhYmxlLiBJdCBzaG91bGQgc3VjY2luY3RseSBleHBsYWluIHRoZSBwdXJwb3NlIG9mIEdSRSwgaXRzIHVzZXMgKHR1bm5lbGluZywgZXRjLiksIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBnZXQgYSBmZWVsIGZvciBiZXN0IHByYWN0aWNlcyBvciBhbnkgY2F1dGlvbnMuCiogICAqKlRyaWdnZXJzKio6IEkgd291bGQgZXhwZWN0IHRvIHNlZSB0cmlnZ2VycyBoZXJlIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHksIGJhc2VkIG9uIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgd2lsbCBlbmFibGluZyBHUkUgdHJpZ2dlciBhIGNvbmZpZ3VyYXRpb24gZm9yIElQc2VjLCBhcyB0aGVzZSBvZnRlbiBnbyBoYW5kLWluLWhhbmQ/IENvbnZlcnNlbHksIHdpbGwgdGhlcmUgYmUgZGlzYWJsaW5nIHRyaWdnZXJzIGlmIGNlcnRhaW4gZmVhdHVyZXMgYXJlIGluY29tcGF0aWJsZT8KKiAgICoqQ29udGV4dCoqOiBBcmUgdGhlcmUgYW55IG1lbnRpb25zIG9mIHNwZWNpZmljIEdSRSBmZWF0dXJlcywgbGlrZSBHUkUgb3ZlciBJUCwgb3IgR1JFIG92ZXIgSVB2Nj8gSWYgdGhpcyBpcyBhbiBvcHRpb24gdGhhdCBleHRlbmRzIHRvIG90aGVyIHRlY2hub2xvZ2llcywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIHdhbnQgdG8gZmluZC4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG9vLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gSSBleHBlY3QgdG8gZmluZCBgTkVUX0lQR1JFYCBpbiBhIGxvZ2ljYWwgcGxhY2UsIHByb2JhYmx5IG5lYXIgb3RoZXIgdHVubmVsaW5nIG9yIGVuY2Fwc3VsYXRpb24gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3Mgb2Z0ZW4gaGVscGZ1bCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgZGlmZmVyZW50IG9wdGlvbnMgYXJlIGludGVydHdpbmVkLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyBmb3IgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIGNvbmZpZ3VyYXRpb24ga25vYiBjb250cm9scywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY0IG5ldHdvcmtpbmcgd2l0aGluIHRoZSBrZXJuZWwuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSBxdWljayByZXZpZXcsIGJ1dCBhcyBhbHdheXMsIHRob3JvdWdobmVzcyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkyOlx0Y29uZmlnIE5FVF9JUEdSRVxuIDE5MzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbiAxOTQ6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXG4gMTk1Olx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDE5NjpcdFx0aGVscFxuIDE5NzpcdFx0ICBUdW5uZWxpbmcgbWVhbnMgZW5jYXBzdWxhdGluZyBkYXRhIG9mIG9uZSBwcm90b2NvbCB0eXBlIHdpdGhpblxuIDE5ODpcdFx0ICBhbm90aGVyIHByb3RvY29sIGFuZCBzZW5kaW5nIGl0IG92ZXIgYSBjaGFubmVsIHRoYXQgdW5kZXJzdGFuZHMgdGhlXG4gMTk5Olx0XHQgIGVuY2Fwc3VsYXRpbmcgcHJvdG9jb2wuIFRoaXMgcGFydGljdWxhciB0dW5uZWxpbmcgZHJpdmVyIGltcGxlbWVudHNcbiAyMDA6XHRcdCAgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgYW5kIGF0IHRoaXMgdGltZSBhbGxvd3NcbiAyMDE6XHRcdCAgZW5jYXBzdWxhdGluZyBvZiBJUHY0IG9yIElQdjYgb3ZlciBleGlzdGluZyBJUHY0IGluZnJhc3RydWN0dXJlLlxuIDIwMjpcdFx0ICBUaGlzIGRyaXZlciBpcyB1c2VmdWwgaWYgdGhlIG90aGVyIGVuZHBvaW50IGlzIGEgQ2lzY28gcm91dGVyOiBDaXNjb1xuIDIwMzpcdFx0ICBsaWtlcyBHUkUgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgb3RoZXIgTGludXggdHVubmVsaW5nIGRyaXZlciAoXCYjMzQ7SVBcbiAyMDQ6XHRcdCAgdHVubmVsaW5nXCYjMzQ7IGFib3ZlKS4gSW4gYWRkaXRpb24sIEdSRSBhbGxvd3MgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uXG4gMjA1Olx0XHQgIHRocm91Z2ggdGhlIHR1bm5lbC5cbiAyMDY6XHRcbiAyMDc6XHRjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuIDIwODpcdFx0Ym9vbCBcJiMzNDtJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXCYjMzQ7XG4gMjA5Olx0XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcdTAwMjZcdTAwMjYgTkVUX0lQR1JFXG4gMjEwOlx0XHRoZWxwXG4gMjExOlx0XHQgIE9uZSBhcHBsaWNhdGlvbiBvZiBHUkUvSVAgaXMgdG8gY29uc3RydWN0IGEgYnJvYWRjYXN0IFdBTiAoV2lkZSBBcmVhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBOZWNlc3NpdHkgb2YgYE5FVF9JUEdSRV9CUk9BRENBU1RgIHdpdGggYGdyZXRhcGAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtdWx0aWNhc3QgcmVkaXN0cmlidXRpb24gdGhyb3VnaCBhIHR1bm5lbCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZywgJiMzNDtBaGEhIGBORVRfSVBHUkVfQlJPQURDQVNUYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkgaGVyZS4mIzM0OyBUaGF0JiMzOTtzIHR5cGljYWxseSB0aGUgZmxhZyB5b3UgcmVhY2ggZm9yLiBCdXQgdGhlbiwgYSByZWQgZmxhZyBwb3BzIHVwLiBUaGlzIHRlc3TigKYgaXQmIzM5O3MgdXNpbmcgYGdyZXRhcGAuIGBncmV0YXBgIGlzIGEgbGF5ZXIgMiB0dW5uZWwsIHJpZ2h0PyBBbmQgbm93IEkmIzM5O20gdGhpbmtpbmcsICpkb2VzKiBpdCAqYWN0dWFsbHkqIG5lZWQgYE5FVF9JUEdSRV9CUk9BRENBU1RgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgYW5kIGRldGVybWluZSBpZiB0aGUgYXNzdW1wdGlvbnMgSSYjMzk7bSBtYWtpbmcgYXJlIGNvcnJlY3QuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBncmV0YXBgIGl0c2VsZiwgYmVjYXVzZSB3aGV0aGVyIGl0JiMzOTtzIG5lZWRlZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBvZiB0aGF0IHR1bm5lbCB0eXBlLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmUtZXZhbHVhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyZXRhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz0xNjg5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxNjkwOlx0LmtpbmRcdFx0PSBcJiMzNDtncmV0YXBcJiMzNDssXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjkxLVx0Lm1heHR5cGVcdD0gSUZMQV9HUkVfTUFYLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE3MDQ9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGVyc3Bhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE3MTgtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzE5OnN0cnVjdCBuZXRfZGV2aWNlICpncmV0YXBfZmJfZGV2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzIwLVx0XHRcdFx0XHR1OCBuYW1lX2Fzc2lnbl90eXBlKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE3NjMtfVxubmV0L2lwdjQvaXBfZ3JlLmM6MTc2NDpFWFBPUlRfU1lNQk9MX0dQTChncmV0YXBfZmJfZGV2X2NyZWF0ZSk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNzY1LVxubmV0L2lwdjQvaXBfZ3JlLmM9MTc2Nj1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfdGFwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY0L2lwX2dyZS5jLTE3Njcte1xubmV0L2lwdjQvaXBfZ3JlLmM6MTc2ODpcdHJldHVybiBpcF90dW5uZWxfaW5pdF9uZXQobmV0LCBncmVfdGFwX25ldF9pZCwgXHUwMDI2aXBncmVfdGFwX29wcywgXCYjMzQ7Z3JldGFwMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNzY5LX1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xODcxPU1PRFVMRV9BTElBU19SVE5MX0xJTksoXCYjMzQ7Z3JlXCYjMzQ7KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE4NzI6TU9EVUxFX0FMSUFTX1JUTkxfTElOSyhcJiMzNDtncmV0YXBcJiMzNDspO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTg3My1NT0RVTEVfQUxJQVNfUlROTF9MSU5LKFwmIzM0O2Vyc3BhblwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYz0xODc0PU1PRFVMRV9BTElBU19ORVRERVYoXCYjMzQ7Z3JlMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYzoxODc1Ok1PRFVMRV9BTElBU19ORVRERVYoXCYjMzQ7Z3JldGFwMFwmIzM0Oyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xODc2LU1PRFVMRV9BTElBU19ORVRERVYoXCYjMzQ7ZXJzcGFuMFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUEdSRSBCcm9hZGNhc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGdyZXRhcGAsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGBpcF9ncmUuY2AgbW9kdWxlLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaGFuZGxlZC4gSXQmIzM5O3MgYSBrZXkgc2V0dGluZywgYW5kIEkgbmVlZCBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBkaWN0YXRlIHRoZSBiZWhhdmlvciBvZiBHUkUgYnJvYWRjYXN0IGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy00NDUtXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy00NDctXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIpKSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9OTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBpcGdyZV9oZWFkZXJfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTkzNS1cbm5ldC9pcHY0L2lwX2dyZS5jOjkzNjojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTkzNy1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTk4Mi1cdC5uZG9fdW5pbml0XHRcdD0gaXBfdHVubmVsX3VuaW5pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjk4MzojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTk4NC1cdC5uZG9fb3Blblx0XHQ9IGlwZ3JlX29wZW4sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTAzNj1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1MC1cdGlmIChpcGgtXHUwMDNlZGFkZHIgXHUwMDI2XHUwMDI2ICF0dW5uZWwtXHUwMDNlY29sbGVjdF9tZCkge1xubmV0L2lwdjQvaXBfZ3JlLmM6MTA1MTojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTItXHRcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcGgtXHUwMDNlZGFkZHIpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqR1JFIE11bHRpY2FzdCBhbmQgTGF5ZXIgMiBDb25mdXNpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuIEkgYmVsaWV2ZSBpdCYjMzk7cyBlc3NlbnRpYWwgZm9yIG11bHRpY2FzdCBHUkUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBNeSBndXQgc2F5cyB5ZXMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBncmV0YXBgIG5vdywgYW5kIHRoYXQmIzM5O3MgYSAqbGF5ZXIgMiogY29uc3RydWN0LCBpc24mIzM5O3QgaXQ/IElmIGl0JiMzOTtzIGFjdGluZyBhcyBhIGJyaWRnZSwgZG9lcyBpdCBldmVuIHVzZSB0aGUgc3RhbmRhcmQgYGlwZ3JlX29wZW5gIGZ1bmN0aW9uIHRoYXQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGZyb20gSVAtaW4tR1JFIHR1bm5lbGluZz8gVGhpcyBzdWdnZXN0cyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsYXllciAyIHNldHVwIGFuZCB0aGUgbW9yZSBjb21tb24gSVAgR1JFLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBmaW5kIHRoZSBrZXkgaW4gYGlwZ3JlX3RhcF9zZXR1cGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRhcCBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgY29kZSBhbmQgY29uZmlybSBob3cgbGF5ZXIgMiBHUkUgaW50ZXJmYWNlcyBhcmUgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBwYXRod2F5IHRvIHJlc29sdmUgdGhpcyB1bmNlcnRhaW50eSBhbmQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBncmVfdGFwX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODItXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzgzOnN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4NC17XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTY4OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE2OTMtXHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsKSxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2OTQ6XHQuc2V0dXBcdFx0PSBpcGdyZV90YXBfc2V0dXAsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk1LVx0LnZhbGlkYXRlXHQ9IGlwZ3JlX3RhcF92YWxpZGF0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgaXBncmVfdGFwX3NldHVwYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgaXBncmVfdGFwX3NldHVwYCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtyZSBjb25maWd1cmluZyBlaXRoZXIgYW4gSVAtR1JFIHR1bm5lbCBvciBwZXJoYXBzIHRoZSB2aXJ0dWFsIFRBUCBpbnRlcmZhY2UgdGhhdCBzaXRzIG9uIHRvcCBvZiBpdC4gUHJvYmFibHkgYm90aCwgaWYgdGhlIG5hbWUgaXMgYXMgaXQgc291bmRzLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgYmluZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgdHVubmVsIGFuZCB0YXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIHNldHVwLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyZmFjZSBmbGFncywgdGhlIG5ldGxpbmsgaW50ZXJhY3Rpb25zLCBhbmQgaG93IHRoZSBHUkUgaGVhZGVyIGlzIGNvbnN0cnVjdGVkLCBhbmQgaG93IGl0IGlzIGNvbm5lY3RlZCB0byBhIFRBUCBkZXZpY2UuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBldmVuIHdvcnNlLCBidWdzLiBJIGhvcGUgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYmVjYXVzZSBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCB0aGUgb3JpZ2luYWwgYXV0aG9yJiMzOTtzIGludGVudGlvbnMgd2VyZSBpbiB0aGUgc2V0IHVwIG9mIHRoZSBkZXZpY2UuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHR1bm5lbCBhbmQgdGFwIGFyZSBzZWN1cmVseSBpbnRlZ3JhdGVkLCBwYXlpbmcgYXR0ZW50aW9uIHRvIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzgzOlx0c3RhdGljIHZvaWQgaXBncmVfdGFwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xMzg0Olx0e1xuMTM4NTpcdFx0ZXRoZXJfc2V0dXAoZGV2KTtcbjEzODY6XHRcdGRldi1cdTAwM2VtYXhfbXR1ID0gMDtcbjEzODc6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHQ9IFx1MDAyNmdyZV90YXBfbmV0ZGV2X29wcztcbjEzODg6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9UWF9TS0JfU0hBUklORztcbjEzODk6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzXHR8PSBJRkZfTElWRV9BRERSX0NIQU5HRTtcbjEzOTA6XHRcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGdyZV90YXBfbmV0X2lkKTtcbjEzOTE6XHR9XG4xMzkyOlx0XG4xMzkzOlx0c3RhdGljIGludFxuMTM5NDpcdGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxuMTM5NTpcdHtcbjEzOTY6XHRcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbjEzOTc6XHRcbjEzOTg6XHRcdGlmIChpcGdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFx1MDAyNmlwZW5jYXApKSB7XG4xMzk5Olx0XHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTQwMDpcdFx0XHRpbnQgZXJyID0gaXBfdHVubmVsX2VuY2FwX3NldHVwKHQsIFx1MDAyNmlwZW5jYXApO1xuMTQwMTpcdFxuMTQwMjpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXJzOgoKKipBbmFseXppbmcgZ3JlX3RhcF9uZXRkZXZfb3BzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBncmVfdGFwX25ldGRldl9vcHNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG9wZXJhdGlvbmFsIGRldGFpbHMgb2YgdGhlIEdSRSB0YXAgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBwb2ludGVycyBkZWZpbmVkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZT8gSSBuZWVkIHRvIHJldmlldyB0aGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV0d29yayBkcml2ZXIgaGFuZGxlcyB0aGUgR1JFIHR1bm5lbCBlbmRwb2ludHMgYW5kIHZpcnR1YWwgaW50ZXJmYWNlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIEdSRSBoZWFkZXIgaXMgcHJvY2Vzc2VkLCBlbmNhcHN1bGF0ZWQgYW5kIGRlY2Fwc3VsYXRlZCBhbmQgaG93IHRoZSB0dW5uZWxpbmcgbWVjaGFuaXNtIGlzIGludGVncmF0ZWQgYXQgdGhlIG5ldHdvcmsgZGV2aWNlIGxldmVsLiBUaGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciB0aGUgY29ycmVjdCBmb3J3YXJkaW5nIG9mIHBhY2tldHMgdGhyb3VnaCB0aGUgR1JFIHR1bm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHRhcCBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gVGltZSB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgcGFja2V0IGZsb3cuLi4gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyZV90YXBfbmV0ZGV2X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jPTEzMjk9c3RhdGljIGludCBncmVfdGFwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzM3LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTMzODpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzktXHQubmRvX2luaXRcdFx0PSBncmVfdGFwX2luaXQsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM4Mz1zdGF0aWMgdm9pZCBpcGdyZV90YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzg2LVx0ZGV2LVx1MDAzZW1heF9tdHUgPSAwO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM4NzpcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHQ9IFx1MDAyNmdyZV90YXBfbmV0ZGV2X29wcztcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODgtXHRkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfVFhfU0tCX1NIQVJJTkc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgZ3JlX3RhcF9uZXRkZXZfb3BzYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFuYWx5emUgYGdyZV90YXBfbmV0ZGV2X29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBjaGFpbiBvZiBhc3NvY2lhdGlvbnMgaW4gbXkgbWluZC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgZm9yIEdSRSB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgdGhlICYjMzQ7dGFwJiMzNDsgaW50ZXJmYWNlIHZhcmlhbnQuIFRoaXMgc3VnZ2VzdHMgYSB1c2VyLXNwYWNlIGFjY2Vzc2libGUgaW50ZXJmYWNlLCBsaWtlbHkgYnJpZGdpbmcgR1JFIHRyYWZmaWMgdG8gYSBtb3JlIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IGNvbnN0cnVjdGluZyBhIGxpc3Qgb2YgdGhlIGtleSBvcGVyYXRpb25zIEkgZXhwZWN0IHRvIGZpbmQgd2l0aGluIHRoaXMgc3RydWN0dXJlOgoKKiAgICoqYG5kb19pbml0YCoqOiBIb3cgaXMgdGhpcyBpbnRlcmZhY2UgaW5pdGlhbGl6ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQ/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGFwcGxpZWQ/IEFyZSB0aGVyZSBhbnkga2VybmVsIG1vZHVsZSBkZXBlbmRlbmNpZXM/IEkgd291bGQgZXhwZWN0IHRvIHNlZSBzZXR1cCBvZiB0aGUgZGV2aWNlJiMzOTtzIHByaXZhdGUgZGF0YSwgYW5kIGFueSBuZXRsaW5rIGF0dHJpYnV0ZXMuCiogICAqKmBuZG9fb3BlbmAgYW5kIGBuZG9fc3RvcGAqKjogRXNzZW50aWFsIGZvciBicmluZ2luZyB0aGUgaW50ZXJmYWNlIHVwIGFuZCBkb3duLiBXaGF0JiMzOTtzIHRoZSBzdGF0ZSBtYW5hZ2VtZW50IGhlcmU/IEFyZSB0aGVyZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQgdG8gcHJvdGVjdCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIHdoZW4gdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcywgZS5nLiBzZXR0aW5nIHVwIGJyaWRnZSBkZXZpY2VzLgoqICAgKipgbmRvX3N0YXJ0X3htaXRgKio6IFRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBob3cgYXJlIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhyb3VnaCB0aGlzIEdSRSB0dW5uZWw/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb24gKGxpa2VseSBvcHRpb25hbCksIGFuZCByb3V0ZSBsb29rdXAvZm9yd2FyZGluZy4gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBNVFUgaGFuZGxpbmcsIG9yIGZyYWdtZW50YXRpb24/IERvZXMgdGhpcyB1dGlsaXplIHRoZSBnZW5lcmljIEdSRSBlbmNhcHN1bGF0aW9uIGNvZGUgb3IgZG9lcyB0aGlzIHBlcmZvcm0gaXQmIzM5O3Mgb3duIGVuY2Fwc3VsYXRpb24/IFdoYXQgbG9ja2luZyBpcyB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5PwoqICAgKipgbmRvX2RvX2lvY3RsYCoqOiBUaGlzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIHRhcCBpbnRlcmZhY2UuIFdoYXQgaW9jdGwgY29tbWFuZHMgYXJlIHN1cHBvcnRlZD8gU2V0dGluZyB0aGUgdHVubmVsIGVuZHBvaW50cywga2V5LCBpbnRlcmZhY2UgdHlwZSwgYnJpZGdlIHBvcnRzLCBldGMuIEkgZXhwZWN0IGEgY2FyZWZ1bCBoYW5kbGluZyBvZiB1c2VyLXNwYWNlIGRhdGEsIHdpdGggdmFsaWRhdGlvbiBhbmQgcG90ZW50aWFsbHkgZXJyb3IgaGFuZGxpbmcuCiogICAqKmBuZG9fZ2V0X3N0YXRzNjRgKio6IE9mIGNvdXJzZSwgd2UgbmVlZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLiBXaGF0IGNvdW50ZXJzIGFyZSBiZWluZyB0cmFja2VkPyBQYWNrZXRzIGluL291dCwgYnl0ZXMgaW4vb3V0LCBlcnJvcnMsIGRyb3BzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgR1JFLXNwZWNpZmljIGNvdW50ZXJzLCBsaWtlIHR1bm5lbCBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gZXJyb3JzLgoqICAgKipgbmRvX2NoYW5nZV9tdHVgKio6IEEgY3JpdGljYWwgb25lLiBNVFUgaGFuZGxpbmcgY2FuIGJlIHRyaWNreSB3aXRoIHR1bm5lbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGlzIGludGVyZmFjZSBhZGp1c3RzIHRoZSBNVFUgb2YgdGhlIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UsIGFuZCB3aGV0aGVyIGZyYWdtZW50YXRpb24gaXMgZW5hYmxlZCwgdG8gaGFuZGxlIHRoZSBhZGRpdGlvbmFsIG92ZXJoZWFkIG9mIHRoZSBHUkUgZW5jYXBzdWxhdGlvbi4gQXJlIHRoZXJlIGFueSBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIHJldHVybmVkIGhlcmU/CiogICAqKmBuZG9fdmFsaWRhdGVfYWRkcmAqKjogRXNzZW50aWFsIGZvciBwcmV2ZW50aW5nIGNvbmZpZ3VyYXRpb24gZXJyb3JzIG9yIGF0dGFja3MgdGhyb3VnaCBpbnZhbGlkIGFkZHJlc3Nlcy4gV2hhdCB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXM/CiogICAqKmBuZG9fc2V0X21hY19hZGRyZXNzYCoqOiBUaGlzIHNob3VsZCBiZSBmYWlybHkgc3RhbmRhcmQsIGJ1dCBJIHdpbGwgd2FudCB0byBzZWUgaWYgdGhpcyBkb2VzIGFueXRoaW5nIHRvIGVuc3VyZSB0aGF0IE1BQyBhZGRyZXNzZXMgYXJlIGFwcHJvcHJpYXRlbHkgcHJvcGFnYXRlZCwgb3IgaGFuZGxlZC4KKiAgICoqYG5kb19uZWlnaF9zZXR1cGAqKjogSG93IGFyZSBuZWlnaGJvcnMgaGFuZGxlZD8gQXJlIEFSUCByZXF1ZXN0cyBpbnRlcmNlcHRlZCBhbmQgbW9kaWZpZWQ/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrJiMzOTtzIG5laWdoYm9yIGRpc2NvdmVyeSBtZWNoYW5pc21zPwoqICAgKipgbmRvX3ZsYW5fcnhfYWRkX3ZpZGAgYW5kIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAqKjogQW55IFZMQU4gc3VwcG9ydD8gVGhpcyBpcyBjcnVjaWFsIGlmIHdlIGV4cGVjdCB0aGlzIEdSRSB0YXAgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGEgbGFyZ2VyIHZpcnR1YWxpemVkIG5ldHdvcmsuCiogICAqKmBuZG9fdHhfdGltZW91dGAqKjogSG93IGRvZXMgdGhlIGRyaXZlciBoYW5kbGUgdHJhbnNtaXNzaW9uIHRpbWVvdXRzPyBBcmUgdGhlcmUgYW55IHJlY292ZXJ5IG1lY2hhbmlzbXM/CgpNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgaG93IGl0IGhhbmRsZXMgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiwgYW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkIGFuZCBtYW5hZ2VkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgd2VsbCB0aGlzIGltcGxlbWVudGF0aW9uIGhvbGRzIHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzM4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4xMzM5Olx0XHQubmRvX2luaXRcdFx0PSBncmVfdGFwX2luaXQsXG4xMzQwOlx0XHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG4xMzQxOlx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBncmVfdGFwX3htaXQsXG4xMzQyOlx0XHQubmRvX3NldF9tYWNfYWRkcmVzcyBcdD0gZXRoX21hY19hZGRyLFxuMTM0MzpcdFx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuMTM0NDpcdFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gaXBfdHVubmVsX2NoYW5nZV9tdHUsXG4xMzQ1Olx0XHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG4xMzQ2Olx0XHQubmRvX2dldF9pZmxpbmtcdFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcbjEzNDc6XHRcdC5uZG9fZmlsbF9tZXRhZGF0YV9kc3RcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxuMTM0ODpcdH07XG4xMzQ5Olx0XG4xMzUwOlx0c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjEzNTE6XHR7XG4xMzUyOlx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTM1MzpcdFxuMTM1NDpcdFx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApXG4xMzU1Olx0XHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDQ7IC8qIDQtYnl0ZSBHUkUgaGRyLiAqL1xuMTM1NjpcdFx0ZWxzZVxuMTM1NzpcdFx0XHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSA4OyAvKiA4LWJ5dGUgR1JFIGhkci4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgR1JFIE11bHRpY2FzdCBQYWNrZXQgUmVjZXB0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IEdSRSBtdWx0aWNhc3QgcGFja2V0cyBhcmUgaGFuZGxlZCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYGdyZV90YXBfbmV0ZGV2X29wc2Agc3RydWN0dXJlIGRvZXNuJiMzOTt0IGluY2x1ZGUgdGhlIGBuZG9fb3BlbmAgb3BlcmF0aW9uLiBUaGF0JiMzOTtzIGEgYml0IG9kZCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHNob3dzdG9wcGVyLiBNeSByZWFsIGNvbmNlcm4gaXMgdGhpcyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYGdyZV9yY3ZgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGNvbmRpdGlvbmFsIHN0YXRlbWVudCBpbiBgZ3JlX3JjdmAsIGFuZCBpdCBtYWtlcyBtZSB0aGluayB0aGF0IHdpdGhvdXQgdGhhdCBjb25maWd1cmF0aW9uLCBtdWx0aWNhc3QgR1JFIHBhY2tldHMgbWlnaHQgYmUgc2lsZW50bHkgZHJvcHBlZC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4gYGdyZV9yY3ZgIGlzIGZvciBMYXllciAzIEdSRSwgYW5kIEkgYW0gbm90IGNlcnRhaW4gaWYgYGdyZXRhcGAgdXNlcyBgZ3JlX3JjdmAuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIGRhdGEgZmxvdyBiZXR3ZWVuIGBncmV0YXBgIGFuZCBgZ3JlX3JjdmAgdG8gY29uZmlybSB3aGV0aGVyIGBncmV0YXBgIHdpbGwgcHJvcGVybHkgcmVjZWl2ZSB0aGUgcGFja2V0cy4gSSBtdXN0IGNoZWNrIGBncmVfcmN2YCBhbmQgc2VlIGhvdyBgZ3JldGFwYCB1c2VzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRzdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NDE6XHR7XG4gNDQyOlx0XHRzdHJ1Y3QgdG5sX3B0a19pbmZvIHRwaTtcbiA0NDM6XHRcdGJvb2wgY3N1bV9lcnIgPSBmYWxzZTtcbiA0NDQ6XHRcdGludCBoZHJfbGVuO1xuIDQ0NTpcdFxuIDQ0NjpcdCNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxuIDQ0NzpcdFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xuIDQ0ODpcdFx0XHQvKiBMb29wZWQgYmFjayBwYWNrZXQsIGRyb3AgaXQhICovXG4gNDQ5Olx0XHRcdGlmIChydF9pc19vdXRwdXRfcm91dGUoc2tiX3J0YWJsZShza2IpKSlcbiA0NTA6XHRcdFx0XHRnb3RvIGRyb3A7XG4gNDUxOlx0XHR9XG4gNDUyOlx0I2VuZGlmXG4gNDUzOlx0XG4gNDU0Olx0XHRoZHJfbGVuID0gZ3JlX3BhcnNlX2hlYWRlcihza2IsIFx1MDAyNnRwaSwgXHUwMDI2Y3N1bV9lcnIsIGh0b25zKEVUSF9QX0lQKSwgMCk7XG4gNDU1Olx0XHRpZiAoaGRyX2xlbiBcdTAwM2MgMClcbiA0NTY6XHRcdFx0Z290byBkcm9wO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0aWYgKHVubGlrZWx5KHRwaS5wcm90byA9PSBodG9ucyhFVEhfUF9FUlNQQU4pIHx8XG4gNDU5Olx0XHRcdCAgICAgdHBpLnByb3RvID09IGh0b25zKEVUSF9QX0VSU1BBTjIpKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAgVXNhZ2UqKgoKUmlnaHQsIHNvIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuLi5teSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIHNvbGVseSBhYm91dCBwcmV2ZW50aW5nIGxvb3BlZC1iYWNrIG11bHRpY2FzdCBwYWNrZXRzIGluIElQIEdSRSB0dW5uZWxzLiBTdGFuZGFyZCBzdHVmZiwgcmVhbGx5LiBCdXQsIGhvbGQgb24gYSBtaW51dGUuIFRoYXQgc2VlbXMgYSBiaXQgdG9vIHNpbXBsaXN0aWMuIExldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gVGltZSB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCYjMzk7cyAqYWxsKiBpdCYjMzk7cyBkb2luZy4gTGV0JiMzOTtzIGp1bXAgaW50byBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbW9kdWxlIHdpbGwgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGFuZCBob3BlZnVsbHkgd2lsbCBwcm92aWRlIGluc2lnaHQgYXMgdG8gaXRzIHVzYWdlIGFuZCB3aGV0aGVyIGl0JiMzOTtzIG1vcmUgd2lkZXNwcmVhZCB0aGFuIGp1c3QgbG9vcGJhY2sgcHJldmVudGlvbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHRoYW4gc29ycnkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9NDQwPXN0YXRpYyBpbnQgZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cbm5ldC9pcHY0L2lwX2dyZS5jOjQ0NjojaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0Ny1cdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcikpIHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTM1LVxubmV0L2lwdjQvaXBfZ3JlLmM6OTM2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtOTM3LXN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTgyLVx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmM6OTgzOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtOTg0LVx0Lm5kb19vcGVuXHRcdD0gaXBncmVfb3Blbixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDM2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDUwLVx0aWYgKGlwaC1cdTAwM2VkYWRkciBcdTAwMjZcdTAwMjYgIXR1bm5lbC1cdTAwM2Vjb2xsZWN0X21kKSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDUxOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Mi1cdFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpcGdyZV90dW5uZWxfaW5pdGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBpcGdyZV90dW5uZWxfaW5pdGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgY3J1eCBvZiB0aGUgR1JFIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaXRzIHJlc3BvbnNpYmlsaXRpZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHRoZSByZXNvdXJjZXMgaXQgYWxsb2NhdGVzLiBJcyBpdCBkZWFsaW5nIHdpdGggbmV0d29yayBuYW1lc3BhY2VzLCBmaWxlIGRlc2NyaXB0b3JzLCBvciBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBHUkUgcHJvdG9jb2w/CgpJIHdhbnQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uLCBvciBpZiBpdCBoYW5kbGVzIGFueSBzcGVjaWFsIGNhc2VzIG9yIHBvdGVudGlhbCBlZGdlIHNjZW5hcmlvcy4gRG9lcyBpdCBwZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIHVzZXIgaW5wdXQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIGl0cyBsb2NraW5nIG9yIHJlc291cmNlIG1hbmFnZW1lbnQ/IEkgc2hvdWxkIHByb2JhYmx5IGNvbnNpZGVyIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBBIGdvb2QgaW5pdGlhbGl6YXRpb24gcm91dGluZSBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSByZXNvdXJjZXMgYXJlIHVuYXZhaWxhYmxlIG9yIGludmFsaWQgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgYXJlIGhhbmRsZWQ6IHRoZSBpbnRlcmZhY2Ugc2V0dXAsIHRoZSByb3V0aW5nIGFzcGVjdHMsIGFueSB0dW5uZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIElzIGl0IGEgbW9kdWxhciBkZXNpZ24gdGhhdCB3aWxsIGxlbmQgaXRzZWxmIHdlbGwgdG8gZnV0dXJlIGV4dGVuc2lvbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzNjpcdHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjEwMzc6XHR7XG4xMDM4Olx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTAzOTpcdFx0c3RydWN0IGlwaGRyICppcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuMTA0MDpcdFxuMTA0MTpcdFx0X19ncmVfdHVubmVsX2luaXQoZGV2KTtcbjEwNDI6XHRcbjEwNDM6XHRcdF9fZGV2X2FkZHJfc2V0KGRldiwgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCA0KTtcbjEwNDQ6XHRcdG1lbWNweShkZXYtXHUwMDNlYnJvYWRjYXN0LCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsIDQpO1xuMTA0NTpcdFxuMTA0NjpcdFx0ZGV2LVx1MDAzZWZsYWdzXHRcdD0gSUZGX05PQVJQO1xuMTA0NzpcdFx0bmV0aWZfa2VlcF9kc3QoZGV2KTtcbjEwNDg6XHRcdGRldi1cdTAwM2VhZGRyX2xlblx0XHQ9IDQ7XG4xMDQ5Olx0XG4xMDUwOlx0XHRpZiAoaXBoLVx1MDAzZWRhZGRyIFx1MDAyNlx1MDAyNiAhdHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbjEwNTE6XHQjaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1RcbjEwNTI6XHRcdFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpIHtcbjEwNTM6XHRcdFx0XHRpZiAoIWlwaC1cdTAwM2VzYWRkcilcbjEwNTQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTA1NTpcdFx0XHRcdGRldi1cdTAwM2VmbGFncyA9IElGRl9CUk9BRENBU1Q7XG4xMDU2Olx0XHRcdFx0ZGV2LVx1MDAzZWhlYWRlcl9vcHMgPSBcdTAwMjZpcGdyZV9oZWFkZXJfb3BzO1xuMTA1NzpcdFx0XHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2YoKmlwaCk7XG4xMDU4Olx0XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XG4xMDU5Olx0XHRcdH1cbjEwNjA6XHQjZW5kaWZcbjEwNjE6XHRcdH0gZWxzZSBpZiAoIXR1bm5lbC1cdTAwM2Vjb2xsZWN0X21kKSB7XG4xMDYyOlx0XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzID0gXHUwMDI2aXBncmVfaGVhZGVyX29wcztcbjEwNjM6XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbjEwNjQ6XHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XG4xMDY1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkdSRSBUdW5uZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBHUkUgdHVubmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaW1wb3J0YW50LiBJIG5lZWQgaXQsIHByZXN1bWFibHksIHRvIHNldCB1cCB0aGUgYElGRl9CUk9BRENBU1RgIGZsYWcgYW5kIHRvIGdldCB0aGUgYGRldi0mZ3Q7aGVhZGVyX29wc2AgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZXNlIG11bHRpY2FzdCBHUkUgdHVubmVscy4gVGhhdCYjMzk7cyB0aGUgaW5pdGlhbCBodW5jaC4KCkJ1dCB0aGVuLCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgc2VlIHRoZSB0ZXN0IGNhc2UgaXMgdXNpbmcgYGdyZXRhcGAuIEFuZCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgZ3JldGFwYCBpbml0aWFsaXplcyB1c2luZyBgZ3JlX3RhcF9pbml0YCwgcmF0aGVyIHRoYW4gYGlwZ3JlX3R1bm5lbF9pbml0YC4gSG1tLCB0aGF0IGNoYW5nZXMgdGhpbmdzLiBTbywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZ3JlX3RhcF9pbml0YCBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN3aXRjaCBnZWFycyBhbmQgZ28gdGhyb3VnaCB0aGF0IGNvZGUgZmxvdyBpbnN0ZWFkIHRvIGZpbmQgdGhlIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzI5Olx0c3RhdGljIGludCBncmVfdGFwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjEzMzA6XHR7XG4xMzMxOlx0XHRfX2dyZV90dW5uZWxfaW5pdChkZXYpO1xuMTMzMjpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XG4xMzMzOlx0XHRuZXRpZl9rZWVwX2RzdChkZXYpO1xuMTMzNDpcdFxuMTMzNTpcdFx0cmV0dXJuIGlwX3R1bm5lbF9pbml0KGRldik7XG4xMzM2Olx0fVxuMTMzNzpcdFxuMTMzODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xuMTMzOTpcdFx0Lm5kb19pbml0XHRcdD0gZ3JlX3RhcF9pbml0LFxuMTM0MDpcdFx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxuMTM0MTpcdFx0Lm5kb19zdGFydF94bWl0XHRcdD0gZ3JlX3RhcF94bWl0LFxuMTM0MjpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IGV0aF9tYWNfYWRkcixcbjEzNDM6XHRcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbjEzNDQ6XHRcdC5uZG9fY2hhbmdlX210dVx0XHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxuMTM0NTpcdFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuMTM0NjpcdFx0Lm5kb19nZXRfaWZsaW5rXHRcdD0gaXBfdHVubmVsX2dldF9pZmxpbmssXG4xMzQ3Olx0XHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbjEzNDg6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk5NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O09rYXksIGBncmV0YXBgIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgbmVlZCBgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1RgLiYjMzQ7IFNvLCBJIHdhcyBnb2luZyB0byBpbmNsdWRlIGBORVRfSVBHUkVgLCBgSVBWNl9HUkVgLCBgTkVUX0ZPVWAsIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4KCkJ1dCwgd2FpdC4gSSBuZWVkZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyDigJMgZG9lcyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgc25lYWsgaW4gdmlhIHRoZSBiYWNrIGRvb3IgZm9yIG11bHRpY2FzdCBzdXBwb3J0IHdpdGggYGdyZXRhcGA/IEhtbSwgYGdyZXRhcGAgaXMgYW4gRXRoZXJuZXQgdHVubmVsLCBhbmQgdGhhdCBpbmhlcmVudGx5ICpkb2VzKiBoYW5kbGUgYnJvYWRjYXN0cy9tdWx0aWNhc3QuIExldCBtZSBsb29rIGF0IHRoZSB0ZXN0IHNjcmlwdC4uLiB5ZXAsIGl0IGNyZWF0ZXMgYSBgZ3JldGFwYCB0dW5uZWwgdXNpbmcgYGlwIGxpbmsgYWRkYCB3aXRoIEZPVSBlbmNhcHN1bGF0aW9uLiBPa2F5LCBzbyBteSBpbml0aWFsIGNvbmZpZ3Mgc3RhbmQuCgpUaGVuIGl0IGhpdCBtZTogaGFuZyBvbiwgZG9lc24mIzM5O3QgYE5FVF9JUEdSRWAgZGVwZW5kIG9uIGBORVRfSVBHUkVfREVNVVhgPyBJdCBkb2VzLiBPa2F5LCBpdCYjMzk7cyBlbmFibGVkIGJ5IHRoZSBwYXJlbnQgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gYmUgZXhwbGljaXQsIHNvIEkmIzM5O2xsIGp1c3Qga2VlcCBgTkVUX0lQR1JFYCBhbmQgYElQVjZfR1JFYC4KCk5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zPyBUaGlzIHRlc3QgdXNlcyBgcGluZ2AsIGJ1dCB0aGUgYWN0dWFsIGJ1ZyBpcyBpbiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRob3NlIGFyZSB0aGUgc3ltYm9scyB0byBmb2N1cyBvbi4KCkxldCBtZSB2ZXJpZnkgdGhhdCByZWFzb25pbmcuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBtdWx0aWNhc3QgcGFja2V0cyB3ZXJlIGluY29ycmVjdGx5IGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcHJvcGVybHkgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIsIGxpa2UgR1JFLiBUaGUgZml4IHJldHVybnMgYSByZXN1Ym1pdCByZXF1ZXN0IChwb3NpdGl2ZSBmb3IgSVB2NiwgbmVnYXRpdmUgZm9yIElQdjQpLCBhbGxvd2luZyB0aGUgVURQIHJlY2VpdmUgcGF0aCB0byBwYXNzIHRoZSBwYWNrZXQgYmFjayB0byB0aGUgSVAgbGF5ZXIuIFRoaXMgKmlzKiBhIGNvcmUgbmV0d29ya2luZyBsb2dpYyBjaGFuZ2UsIGFuZCBJIHNob3VsZCBwcm9iYWJseSBmdXp6IHRoYXQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcyBvciBVQUZzIGNyb3AgdXAgd2hlbiByZXN1Ym1pdHRpbmcgbXVsdGljYXN0IHBhY2tldHMuCgpPa2F5LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBObywgYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbmQgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgIGFyZW4mIzM5O3QgdG91Y2hlZCwganVzdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIEkmIzM5O20gZ29vZC4gSSYjMzk7bGwganVzdCB1c2UgdGhvc2Ugc3ltYm9scy4gTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWRwNl9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jPTkyMz1zdGF0aWMgdm9pZCB1ZHA2X2NzdW1femVyb19lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTkzNi0gKi9cbm5ldC9pcHY2L3VkcC5jOjkzNzpzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni91ZHAuYy05MzgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcixcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xMDY5PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xMTM3LVx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoZGFkZHIpKVxubmV0L2lwdjYvdWRwLmM6MTEzODpcdFx0cmV0dXJuIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihuZXQsIHNrYiwgc2FkZHIsIGRhZGRyKTtcbm5ldC9pcHY2L3VkcC5jLTExMzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDI1CgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqTXVsdGljYXN0IFBhY2tldCBIYW5kbGluZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBvYnNlcnZpbmcgdGhlIGNhbGwgZmxvdyBhbmQsIHllcywgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWNlaXZpbmcgSVB2NiBtdWx0aWNhc3QgcGFja2V0cywgYHVkcHY2X3JjdmAsIGlzIGluZGVlZCB0aGUgb25lIHRyaWdnZXJpbmcgdGhpcyBhY3Rpb24uIFRoaXMgY2xhcmlmaWVzIHRoZSBjb250ZXh0LCBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhY2tldCYjMzk7cyBvcmlnaW4gYW5kIHBhdGguIE5vdyB0aGF0IEkmIzM5O3ZlIHBpbm5lZCBkb3duIHRoZSBzb3VyY2UgYW5kIHB1cnBvc2UsIEkmIzM5O20gcHJlcGFyZWQgdG8gZmluYWxpemUgYW5kIHRyYW5zbWl0IHRoZSBvdXRjb21lIG9mIHRoZSBwcm9jZXNzLiBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0aW5nIHZhbHVlcyBhbmQgbW92ZSBmb3J3YXJkIHdpdGggdGhlIG5leHQgc3RhZ2Ugb2YgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9GT1UmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdWRwNF9saWJfbWNhc3RfZGVsaXZlciYjMzQ7LAogICAgJiMzNDtfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAgd2VyZSBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpLiBCeSByZXR1cm5pbmcgdGhlIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIGNvcnJlY3RseSBwYXNzZXMgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0ZPVSYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyJiMzNDssCiAgICAmIzM0O19fdWRwNl9saWJfbWNhc3RfZGVsaXZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTg6MzcuNjcyNTgzMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3Nzc0NTc5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0ZPVVwiLFxuICAgIFwiTkVUX0ZPVV9JUF9UVU5ORUxTXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1ODozNy42NzI1OTAxMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTU2MjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4MWE0ODAxOWI3YTJmZGU5YjJiYTEzZjBjMzk5ZjBiMThmMmFlY2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgNSAwMjo1ODozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jXFxuaW5kZXggNTkyNDhhNTkzNThjYTUuLmQzZGRjYmZjODQ3NzFjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3VkcC5jXFxuKysrIGIvbmV0L2lwdjQvdWRwLmNcXG5AQCAtMjQ3Niw2ICsyNDc2LDcgQEAgc3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuIFxcdGJvb2wgdXNlX2hhc2gyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aGFzaDJfYW55ID0gMDtcXG4gXFx0aGFzaDIgPSAwO1xcbkBAIC0yNTIwLDggKzI1MjEsOSBAQCBzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmaXJzdCkge1xcbi1cXHRcXHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRcXHRyZXQgPSB1ZHBfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtcmV0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXFxuaW5kZXggMzkyZTE4Yjk3MDQ1NDQuLjA5MTBjYzE3MTc3NjYyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3VkcC5jXFxuKysrIGIvbmV0L2lwdjYvdWRwLmNcXG5AQCAtOTQ5LDYgKzk0OSw3IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7XFxuIFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbiBcXHRib29sIHVzZV9oYXNoMjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGhhc2gyX2FueSA9IDA7XFxuIFxcdGhhc2gyID0gMDtcXG5AQCAtOTk4LDggKzk5OSw5IEBAIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZpcnN0KSB7XFxuLVxcdFxcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFxcdTAwM2UgMClcXG4tXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0ID0gdWRwdjZfcXVldWVfcmN2X3NrYihmaXJzdCwgc2tiKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uN2U5YWU5MzdjZmZhN2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTM5LDYgKzM5LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmliX3Rlc3RzLnNoIFxcXFxcXG4gXFx0ZmluX2Fja19sYXQuc2ggXFxcXFxcbitcXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcXFxcbiBcXHRmcV9iYW5kX3BrdGxpbWl0LnNoIFxcXFxcXG4gXFx0Z3JlX2dzby5zaCBcXFxcXFxuIFxcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzI4NTEzZDU1ZGI0YTVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvdV9tY2FzdF9lbmNhcC5zaFxcbkBAIC0wLDAgKzEsMTc3IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcXG4rIyB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB2aWEgdGhlIG11bHRpY2FzdCBVRFAgZGVsaXZlcnkgcGF0aC5cXG4rI1xcbisjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXFxuKyMgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKCkgLyBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoKSBtdXN0IHJlc3VibWl0XFxuKyMgaXQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkgcmF0aGVyIHRoYW4gY29uc3VtaW5nIGl0LlxcbisjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXFxuKyMgdHVubmVsIHdpdGggYSBtdWx0aWNhc3QgcmVtb3RlIGFkZHJlc3MgYW5kIHNlbmRpbmcgcGluZyB0aHJvdWdoIGl0LlxcbisjXFxuKyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcXG4rIyB0aGUgdW5pY2FzdCBwYXRoICh1ZHBbNl1fdW5pY2FzdF9yY3Zfc2tiKSwgc28gd2UgZGlzYWJsZSBpdCB0byBmb3JjZVxcbisjIHBhY2tldHMgdGhyb3VnaCB0aGUgbXVsdGljYXN0IGRlbGl2ZXJ5IGZ1bmN0aW9uLlxcbitcXG4rc291cmNlIGxpYi5zaFxcbitcXG4rTlNFTkRFUj1cXFwiXFxcIlxcbitOUkVDVj1cXFwiXFxcIlxcbitcXG4rRk9VX1BPUlQ0PTQ3OTdcXG4rRk9VX1BPUlQ2PTQ3OThcXG4rTUNBU1Q0PTIzOS4wLjAuMVxcbitNQ0FTVDY9ZmYwZTo6MVxcbitcXG4rVFVONF9TPTE5Mi4xNjguOTkuMVxcbitUVU40X1I9MTkyLjE2OC45OS4yXFxuK1RVTjZfUz0yMDAxOmRiODo5OTo6MVxcbitUVU42X1I9MjAwMTpkYjg6OTk6OjJcXG4rXFxuK2NsZWFudXAoKSB7XFxuK1xcdGNsZWFudXBfYWxsX25zXFxuK31cXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbitzZXR1cF9jb21tb24oKSB7XFxuK1xcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcXG4rXFxuK1xcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXFxuK1xcdCMgY29sbGlzaW9ucyB3aXRoIGRldmljZXMgaW4gdGhlIHJvb3QgbmFtZXNwYWNlLlxcbitcXHRpcCBsaW5rIGFkZCB2ZXRoX3MgbmV0bnMgXFxcIiROU0VOREVSXFxcIiB0eXBlIHZldGggXFxcXFxcbitcXHRcXHRwZWVyIG5hbWUgdmV0aF9yIG5ldG5zIFxcXCIkTlJFQ1ZcXFwiXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGxpbmsgc2V0IHZldGhfcyB1cFxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNldCB2ZXRoX3IgdXBcXG4rXFxuK1xcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5SRUNWXFxcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcXG4rfVxcbitcXG4rc2V0dXBfaXB2NCgpIHtcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBhZGRyIGFkZCAxMC4wLjAuMS8yNCBkZXYgdmV0aF9zXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3JcXG4rXFxuK1xcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgXFxcIiRNQ0FTVDQvMzJcXFwiIGRldiB2ZXRoX3IgYXV0b2pvaW5cXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgcm91dGUgYWRkIDIzOS4wLjAuMC84IGRldiB2ZXRoX3NcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgcm91dGUgYWRkIDIzOS4wLjAuMC84IGRldiB2ZXRoX3JcXG4rXFxuK1xcdCMgU2VuZGVyOiBHUkVUQVAgd2l0aCBGT1UgZW5jYXAgKG5vIEZPVSBsaXN0ZW5lciBuZWVkZWQgb24gVFggc2lkZSlcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDRcXFwiIGxvY2FsIDEwLjAuMC4xIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNFxcXCIgXFxcXFxcbitcXHRcXHRrZXkgXFxcIiRNQ0FTVDRcXFwiXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgbGluayBzZXQgZW91ZHA0IHVwXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgYWRkciBhZGQgXFxcIiRUVU40X1MvMjRcXFwiIGRldiBlb3VkcDRcXG4rXFxuK1xcdCMgUmVjZWl2ZXI6IEZPVSBsaXN0ZW5lciArIEdSRVRBUFxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlJFQ1ZcXFwiIGlwIGZvdSBhZGQgcG9ydCBcXFwiJEZPVV9QT1JUNFxcXCIgaXBwcm90byA0N1xcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIGFkZCBlb3VkcDQgdHlwZSBncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDRcXFwiIGxvY2FsIDEwLjAuMC4yIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ0XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNFxcXCIgXFxcXFxcbitcXHRcXHRrZXkgXFxcIiRNQ0FTVDRcXFwiXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGxpbmsgc2V0IGVvdWRwNCB1cFxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCBcXFwiJFRVTjRfUi8yNFxcXCIgZGV2IGVvdWRwNFxcbitcXG4rXFx0IyBTdGF0aWMgbmVpZ2ggb24gc2VuZGVyOiBBUlAgcmVwbGllcyBjYW5ub3QgdHJhdmVyc2UgdGhlXFxuK1xcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cXG4rXFx0bG9jYWwgcmVjdl9tYWNcXG4rXFx0cmVjdl9tYWM9JChpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNob3cgZW91ZHA0IHwgYXdrICcvZXRoZXIve3ByaW50ICQyfScpXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgbmVpZ2ggYWRkIFxcXCIkVFVONF9SXFxcIiBsbGFkZHIgXFxcIiRyZWN2X21hY1xcXCIgZGV2IGVvdWRwNFxcbit9XFxuK1xcbitzZXR1cF9pcHY2KCkge1xcbitcXHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHJ1bm5pbmcga2VybmVsLlxcbitcXHRbIC1lIC9wcm9jL3N5cy9uZXQvaXB2NiBdIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0bW9kcHJvYmUgLXEgZm91NiB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TRU5ERVJcXFwiIGFkZHIgYWRkIDIwMDE6ZGI4OjoxLzY0IGRldiB2ZXRoX3Mgbm9kYWRcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgYWRkciBhZGQgMjAwMTpkYjg6OjIvNjQgZGV2IHZldGhfciBub2RhZFxcbitcXG4rXFx0IyBKb2luIG11bHRpY2FzdCBncm91cCBvbiByZWNlaXZlclxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBhZGRyIGFkZCBcXFwiJE1DQVNUNi8xMjhcXFwiIGRldiB2ZXRoX3IgYXV0b2pvaW5cXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcXG4rXFxuK1xcdCMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXBcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDZcXFwiIGxvY2FsIDIwMDE6ZGI4OjoxIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNlxcXCIgXFxcXFxcbitcXHRcXHRrZXkgNDJcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBsaW5rIHNldCBlb3VkcDYgdXBcXG4rXFx0aXAgLW4gXFxcIiROU0VOREVSXFxcIiBhZGRyIGFkZCBcXFwiJFRVTjZfUy82NFxcXCIgZGV2IGVvdWRwNiBub2RhZFxcbitcXG4rXFx0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyIChJUHY2KSArIGlwNmdyZXRhcFxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlJFQ1ZcXFwiIGlwIGZvdSBhZGQgcG9ydCBcXFwiJEZPVV9QT1JUNlxcXCIgaXBwcm90byA0NyAtNlxcbitcXHRpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcXFxcbitcXHRcXHRyZW1vdGUgXFxcIiRNQ0FTVDZcXFwiIGxvY2FsIDIwMDE6ZGI4OjoyIFxcXFxcXG4rXFx0XFx0ZW5jYXAgZm91IGVuY2FwLXNwb3J0IFxcXCIkRk9VX1BPUlQ2XFxcIiBlbmNhcC1kcG9ydCBcXFwiJEZPVV9QT1JUNlxcXCIgXFxcXFxcbitcXHRcXHRrZXkgNDJcXG4rXFx0aXAgLW4gXFxcIiROUkVDVlxcXCIgbGluayBzZXQgZW91ZHA2IHVwXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIGFkZHIgYWRkIFxcXCIkVFVONl9SLzY0XFxcIiBkZXYgZW91ZHA2IG5vZGFkXFxuK1xcbitcXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXFxuK1xcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cXG4rXFx0bG9jYWwgcmVjdl9tYWNcXG4rXFx0cmVjdl9tYWM9JChpcCAtbiBcXFwiJE5SRUNWXFxcIiBsaW5rIHNob3cgZW91ZHA2IHwgYXdrICcvZXRoZXIve3ByaW50ICQyfScpXFxuK1xcdGlwIC1uIFxcXCIkTlNFTkRFUlxcXCIgbmVpZ2ggYWRkIFxcXCIkVFVONl9SXFxcIiBsbGFkZHIgXFxcIiRyZWN2X21hY1xcXCIgZGV2IGVvdWRwNlxcbit9XFxuK1xcbitnZXRfcnhfcGFja2V0cygpIHtcXG4rXFx0bG9jYWwgZGV2PVxcXCIkMVxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlJFQ1ZcXFwiIC1zIGxpbmsgc2hvdyBcXFwiJGRldlxcXCIgfCBhd2sgJy9SWDove2dldGxpbmU7IHByaW50ICQyfSdcXG4rfVxcbitcXG4rcnVuX3BpbmdfdGVzdCgpIHtcXG4rXFx0bG9jYWwgZmFtaWx5PVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgZGV2PVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgZHN0PVxcXCIkM1xcXCJcXG4rXFx0bG9jYWwgY291bnQ9MTAwXFxuK1xcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxcbitcXG4rXFx0IyBXYXJtdXA6IGxldCBhbnkgaW5pdGlhbCBicm9hZGNhc3QvTkQgdHJhZmZpYyBzZXR0bGVcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5TRU5ERVJcXFwiIHBpbmcgXFxcIiRmYW1pbHlcXFwiIC1jIDEgLVcgMSBcXFwiJGRzdFxcXCIgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0c2xlZXAgMVxcbitcXG4rXFx0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXFxcIiRkZXZcXFwiKVxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlNFTkRFUlxcXCIgcGluZyBcXFwiJGZhbWlseVxcXCIgLWMgJGNvdW50IC1XIDEgXFxcIiRkc3RcXFwiIFxcXFxcXG4rXFx0XFx0XFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuK1xcdHNsZWVwIDFcXG4rXFx0cnhfYWZ0ZXI9JChnZXRfcnhfcGFja2V0cyBcXFwiJGRldlxcXCIpXFxuK1xcbitcXHRyeF9kZWx0YT0kKChyeF9hZnRlciAtIHJ4X2JlZm9yZSkpXFxuK1xcbitcXHRpZiBbIFxcXCIkcnhfZGVsdGFcXFwiIC1nZSBcXFwiJGNvdW50XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIlBBU1M6IHJlY2VpdmVkICRyeF9kZWx0YS8kY291bnQgcGFja2V0c1xcXCJcXG4rXFx0XFx0cmV0dXJuIFxcXCIka3NmdF9wYXNzXFxcIlxcbitcXHRlbGlmIFsgXFxcIiRyeF9kZWx0YVxcXCIgLWd0IDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBvbmx5ICRyeF9kZWx0YS8kY291bnQgcGFja2V0cyByZWNlaXZlZFxcXCJcXG4rXFx0XFx0cmV0dXJuIFxcXCIka3NmdF9mYWlsXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IDAvJGNvdW50IHBhY2tldHMgcmVjZWl2ZWRcXFwiXFxuK1xcdFxcdHJldHVybiBcXFwiJGtzZnRfZmFpbFxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rcmV0PTBcXG4rXFxuK2VjaG8gXFxcIlRFU1Q6IEZPVS9HUkVUQVAgSVB2NCBtdWx0aWNhc3QgZW5jYXBzdWxhdGlvbiByZXN1Ym1pdFxcXCJcXG4rc2V0dXBfY29tbW9uXFxuK3NldHVwX2lwdjRcXG4rcnVuX3BpbmdfdGVzdCAtNCBlb3VkcDQgXFxcIiRUVU40X1JcXFwiIHx8IHJldD0kP1xcbitcXG4rZWNobyBcXFwiVEVTVDogRk9VL0dSRVRBUCBJUHY2IG11bHRpY2FzdCBlbmNhcHN1bGF0aW9uIHJlc3VibWl0XFxcIlxcbitpZiBzZXR1cF9pcHY2OyB0aGVuXFxuK1xcdHJ1bl9waW5nX3Rlc3QgLTYgZW91ZHA2IFxcXCIkVFVONl9SXFxcIiB8fCByZXQ9JD9cXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJTS0lQOiBJUHY2IHVuYXZhaWxhYmxlXFxcIlxcbitmaVxcbitcXG4rZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjM4LjA3ODg5NTExOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0MzcxMTMyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9GT1VcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdWRwNF9saWJfbWNhc3RfZGVsaXZlclwiLFxuICAgIFwiX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgRk9VLWVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAgd2VyZSBjb25zdW1lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc3VibWl0dGVkIHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpLiBCeSByZXR1cm5pbmcgdGhlIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIGNvcnJlY3RseSBwYXNzZXMgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgdGhlIHJlc3VibWlzc2lvbiBvZiBtdWx0aWNhc3QgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ODFhNDgwMTliN2EyZmRlOWIyYmExM2YwYzM5OWYwYjE4ZjJhZWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAwMjo1ODozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmNcbmluZGV4IDU5MjQ4YTU5MzU4Y2E1Li5kM2RkY2JmYzg0NzcxYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3VkcC5jXG4rKysgYi9uZXQvaXB2NC91ZHAuY1xuQEAgLTI0NzYsNiArMjQ3Niw3IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90O1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRib29sIHVzZV9oYXNoMjtcbitcdGludCByZXQ7XG4gXG4gXHRoYXNoMl9hbnkgPSAwO1xuIFx0aGFzaDIgPSAwO1xuQEAgLTI1MjAsOCArMjUyMSw5IEBAIHN0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdGlmIChmaXJzdCkge1xuLVx0XHRpZiAodWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYikgXHUwMDNlIDApXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0ID0gdWRwX3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIC1yZXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDM5MmUxOGI5NzA0NTQ0Li4wOTEwY2MxNzE3NzY2MiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTk0OSw2ICs5NDksNyBAQCBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFx0Ym9vbCB1c2VfaGFzaDI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0aGFzaDJfYW55ID0gMDtcbiBcdGhhc2gyID0gMDtcbkBAIC05OTgsOCArOTk5LDkgQEAgc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0aWYgKGZpcnN0KSB7XG4tXHRcdGlmICh1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKGZpcnN0LCBza2IpIFx1MDAzZSAwKVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IoZmlyc3QsIHNrYik7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH0gZWxzZSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JR05PUkVETVVMVEkpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLjdlOWFlOTM3Y2ZmYTdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0zOSw2ICszOSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGZpYl9ydWxlX3Rlc3RzLnNoIFxcXG4gXHRmaWJfdGVzdHMuc2ggXFxcbiBcdGZpbl9hY2tfbGF0LnNoIFxcXG4rXHRmb3VfbWNhc3RfZW5jYXAuc2ggXFxcbiBcdGZxX2JhbmRfcGt0bGltaXQuc2ggXFxcbiBcdGdyZV9nc28uc2ggXFxcbiBcdGdyZV9pcHY2X2xsYWRkci5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3VfbWNhc3RfZW5jYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcyODUxM2Q1NWRiNGE1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm91X21jYXN0X2VuY2FwLnNoXG5AQCAtMCwwICsxLDE3NyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgdGhhdCBVRFAgZW5jYXBzdWxhdGlvbiAoRk9VKSBjb3JyZWN0bHkgaGFuZGxlcyBwYWNrZXQgcmVzdWJtaXRcbisjIHdoZW4gcGFja2V0cyBhcmUgZGVsaXZlcmVkIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLlxuKyNcbisjIFdoZW4gYSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldCBhcnJpdmVzIHdpdGggYSBtdWx0aWNhc3QgZGVzdGluYXRpb24gSVAsXG4rIyBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoKSAvIF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcigpIG11c3QgcmVzdWJtaXRcbisjIGl0IHRvIHRoZSBpbm5lciBwcm90b2NvbCBoYW5kbGVyIChlLmcuLCBHUkUpIHJhdGhlciB0aGFuIGNvbnN1bWluZyBpdC5cbisjIFRoaXMgdGVzdCB2ZXJpZmllcyBib3RoIElQdjQgYW5kIElQdjYgcGF0aHMgYnkgY3JlYXRpbmcgYSBGT1UvR1JFVEFQXG4rIyB0dW5uZWwgd2l0aCBhIG11bHRpY2FzdCByZW1vdGUgYWRkcmVzcyBhbmQgc2VuZGluZyBwaW5nIHRocm91Z2ggaXQuXG4rI1xuKyMgVGhlIGVhcmx5IGRlbXV4IG9wdGltaXphdGlvbiBjYW4gbWFzayB0aGlzIGlzc3VlIGJ5IHJvdXRpbmcgcGFja2V0cyB2aWFcbisjIHRoZSB1bmljYXN0IHBhdGggKHVkcFs2XV91bmljYXN0X3Jjdl9za2IpLCBzbyB3ZSBkaXNhYmxlIGl0IHRvIGZvcmNlXG4rIyBwYWNrZXRzIHRocm91Z2ggdGhlIG11bHRpY2FzdCBkZWxpdmVyeSBmdW5jdGlvbi5cbitcbitzb3VyY2UgbGliLnNoXG4rXG4rTlNFTkRFUj1cIlwiXG4rTlJFQ1Y9XCJcIlxuK1xuK0ZPVV9QT1JUND00Nzk3XG4rRk9VX1BPUlQ2PTQ3OThcbitNQ0FTVDQ9MjM5LjAuMC4xXG4rTUNBU1Q2PWZmMGU6OjFcbitcbitUVU40X1M9MTkyLjE2OC45OS4xXG4rVFVONF9SPTE5Mi4xNjguOTkuMlxuK1RVTjZfUz0yMDAxOmRiODo5OTo6MVxuK1RVTjZfUj0yMDAxOmRiODo5OTo6MlxuK1xuK2NsZWFudXAoKSB7XG4rXHRjbGVhbnVwX2FsbF9uc1xuK31cbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK3NldHVwX2NvbW1vbigpIHtcbitcdHNldHVwX25zIE5TRU5ERVIgTlJFQ1ZcbitcbitcdCMgQ3JlYXRlIHZldGggcGFpciBkaXJlY3RseSBpbnNpZGUgbmFtZXNwYWNlcyB0byBhdm9pZCBuYW1lXG4rXHQjIGNvbGxpc2lvbnMgd2l0aCBkZXZpY2VzIGluIHRoZSByb290IG5hbWVzcGFjZS5cbitcdGlwIGxpbmsgYWRkIHZldGhfcyBuZXRucyBcIiROU0VOREVSXCIgdHlwZSB2ZXRoIFxcXG4rXHRcdHBlZXIgbmFtZSB2ZXRoX3IgbmV0bnMgXCIkTlJFQ1ZcIlxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIGxpbmsgc2V0IHZldGhfcyB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBsaW5rIHNldCB2ZXRoX3IgdXBcbitcbitcdCMgU2FtZSBzeXNjdGwgY29udHJvbHMgZWFybHkgZGVtdXggZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni5cbitcdGlwIG5ldG5zIGV4ZWMgXCIkTlJFQ1ZcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2Vhcmx5X2RlbXV4PTBcbit9XG4rXG4rc2V0dXBfaXB2NCgpIHtcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCAxMC4wLjAuMS8yNCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoX3JcbitcbitcdCMgSm9pbiBtdWx0aWNhc3QgZ3JvdXAgb24gcmVjZWl2ZXJcbitcdGlwIC1uIFwiJE5SRUNWXCIgYWRkciBhZGQgXCIkTUNBU1Q0LzMyXCIgZGV2IHZldGhfciBhdXRvam9pblxuK1xuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9zXG4rXHRpcCAtbiBcIiROUkVDVlwiIHJvdXRlIGFkZCAyMzkuMC4wLjAvOCBkZXYgdmV0aF9yXG4rXG4rXHQjIFNlbmRlcjogR1JFVEFQIHdpdGggRk9VIGVuY2FwIChubyBGT1UgbGlzdGVuZXIgbmVlZGVkIG9uIFRYIHNpZGUpXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMSBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgbGluayBzZXQgZW91ZHA0IHVwXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgXCIkVFVONF9TLzI0XCIgZGV2IGVvdWRwNFxuK1xuK1x0IyBSZWNlaXZlcjogRk9VIGxpc3RlbmVyICsgR1JFVEFQXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNFwiIGlwcHJvdG8gNDdcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA0IHR5cGUgZ3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDRcIiBsb2NhbCAxMC4wLjAuMiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ0XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ0XCIgXFxcbitcdFx0a2V5IFwiJE1DQVNUNFwiXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNCB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU40X1IvMjRcIiBkZXYgZW91ZHA0XG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IEFSUCByZXBsaWVzIGNhbm5vdCB0cmF2ZXJzZSB0aGVcbitcdCMgdW5pZGlyZWN0aW9uYWwgbXVsdGljYXN0IHR1bm5lbC5cbitcdGxvY2FsIHJlY3ZfbWFjXG4rXHRyZWN2X21hYz0kKGlwIC1uIFwiJE5SRUNWXCIgbGluayBzaG93IGVvdWRwNCB8IGF3ayAnL2V0aGVyL3twcmludCAkMn0nKVxuK1x0aXAgLW4gXCIkTlNFTkRFUlwiIG5laWdoIGFkZCBcIiRUVU40X1JcIiBsbGFkZHIgXCIkcmVjdl9tYWNcIiBkZXYgZW91ZHA0XG4rfVxuK1xuK3NldHVwX2lwdjYoKSB7XG4rXHQjIFNraXAgY2xlYW5seSBpZiBJUHY2IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHJ1bm5pbmcga2VybmVsLlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdG1vZHByb2JlIC1xIGZvdTYgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgYWRkciBhZGQgMjAwMTpkYjg6OjEvNjQgZGV2IHZldGhfcyBub2RhZFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCAyMDAxOmRiODo6Mi82NCBkZXYgdmV0aF9yIG5vZGFkXG4rXG4rXHQjIEpvaW4gbXVsdGljYXN0IGdyb3VwIG9uIHJlY2VpdmVyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGFkZHIgYWRkIFwiJE1DQVNUNi8xMjhcIiBkZXYgdmV0aF9yIGF1dG9qb2luXG4rXG4rXHRpcCAtbiBcIiROU0VOREVSXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3NcbitcdGlwIC1uIFwiJE5SRUNWXCIgLTYgcm91dGUgYWRkIGZmMDA6Oi84IGRldiB2ZXRoX3JcbitcbitcdCMgU2VuZGVyOiBpcDZncmV0YXAgd2l0aCBGT1UgZW5jYXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIGFkZCBlb3VkcDYgdHlwZSBpcDZncmV0YXAgXFxcbitcdFx0cmVtb3RlIFwiJE1DQVNUNlwiIGxvY2FsIDIwMDE6ZGI4OjoxIFxcXG4rXHRcdGVuY2FwIGZvdSBlbmNhcC1zcG9ydCBcIiRGT1VfUE9SVDZcIiBlbmNhcC1kcG9ydCBcIiRGT1VfUE9SVDZcIiBcXFxuK1x0XHRrZXkgNDJcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBsaW5rIHNldCBlb3VkcDYgdXBcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBhZGRyIGFkZCBcIiRUVU42X1MvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFJlY2VpdmVyOiBGT1UgbGlzdGVuZXIgKElQdjYpICsgaXA2Z3JldGFwXG4rXHRpcCBuZXRucyBleGVjIFwiJE5SRUNWXCIgaXAgZm91IGFkZCBwb3J0IFwiJEZPVV9QT1JUNlwiIGlwcHJvdG8gNDcgLTZcbitcdGlwIC1uIFwiJE5SRUNWXCIgbGluayBhZGQgZW91ZHA2IHR5cGUgaXA2Z3JldGFwIFxcXG4rXHRcdHJlbW90ZSBcIiRNQ0FTVDZcIiBsb2NhbCAyMDAxOmRiODo6MiBcXFxuK1x0XHRlbmNhcCBmb3UgZW5jYXAtc3BvcnQgXCIkRk9VX1BPUlQ2XCIgZW5jYXAtZHBvcnQgXCIkRk9VX1BPUlQ2XCIgXFxcbitcdFx0a2V5IDQyXG4rXHRpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2V0IGVvdWRwNiB1cFxuK1x0aXAgLW4gXCIkTlJFQ1ZcIiBhZGRyIGFkZCBcIiRUVU42X1IvNjRcIiBkZXYgZW91ZHA2IG5vZGFkXG4rXG4rXHQjIFN0YXRpYyBuZWlnaCBvbiBzZW5kZXI6IG5laWdoYm9yIGRpc2NvdmVyeSBjYW5ub3QgdHJhdmVyc2UgdGhlXG4rXHQjIHVuaWRpcmVjdGlvbmFsIG11bHRpY2FzdCB0dW5uZWwuXG4rXHRsb2NhbCByZWN2X21hY1xuK1x0cmVjdl9tYWM9JChpcCAtbiBcIiROUkVDVlwiIGxpbmsgc2hvdyBlb3VkcDYgfCBhd2sgJy9ldGhlci97cHJpbnQgJDJ9JylcbitcdGlwIC1uIFwiJE5TRU5ERVJcIiBuZWlnaCBhZGQgXCIkVFVONl9SXCIgbGxhZGRyIFwiJHJlY3ZfbWFjXCIgZGV2IGVvdWRwNlxuK31cbitcbitnZXRfcnhfcGFja2V0cygpIHtcbitcdGxvY2FsIGRldj1cIiQxXCJcbitcbitcdGlwIC1uIFwiJE5SRUNWXCIgLXMgbGluayBzaG93IFwiJGRldlwiIHwgYXdrICcvUlg6L3tnZXRsaW5lOyBwcmludCAkMn0nXG4rfVxuK1xuK3J1bl9waW5nX3Rlc3QoKSB7XG4rXHRsb2NhbCBmYW1pbHk9XCIkMVwiXG4rXHRsb2NhbCBkZXY9XCIkMlwiXG4rXHRsb2NhbCBkc3Q9XCIkM1wiXG4rXHRsb2NhbCBjb3VudD0xMDBcbitcdGxvY2FsIHJ4X2JlZm9yZSByeF9hZnRlciByeF9kZWx0YVxuK1xuK1x0IyBXYXJtdXA6IGxldCBhbnkgaW5pdGlhbCBicm9hZGNhc3QvTkQgdHJhZmZpYyBzZXR0bGVcbitcdGlwIG5ldG5zIGV4ZWMgXCIkTlNFTkRFUlwiIHBpbmcgXCIkZmFtaWx5XCIgLWMgMSAtVyAxIFwiJGRzdFwiIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0c2xlZXAgMVxuK1xuK1x0cnhfYmVmb3JlPSQoZ2V0X3J4X3BhY2tldHMgXCIkZGV2XCIpXG4rXHRpcCBuZXRucyBleGVjIFwiJE5TRU5ERVJcIiBwaW5nIFwiJGZhbWlseVwiIC1jICRjb3VudCAtVyAxIFwiJGRzdFwiIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0c2xlZXAgMVxuK1x0cnhfYWZ0ZXI9JChnZXRfcnhfcGFja2V0cyBcIiRkZXZcIilcbitcbitcdHJ4X2RlbHRhPSQoKHJ4X2FmdGVyIC0gcnhfYmVmb3JlKSlcbitcbitcdGlmIFsgXCIkcnhfZGVsdGFcIiAtZ2UgXCIkY291bnRcIiBdOyB0aGVuXG4rXHRcdGVjaG8gXCJQQVNTOiByZWNlaXZlZCAkcnhfZGVsdGEvJGNvdW50IHBhY2tldHNcIlxuK1x0XHRyZXR1cm4gXCIka3NmdF9wYXNzXCJcbitcdGVsaWYgWyBcIiRyeF9kZWx0YVwiIC1ndCAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IG9ubHkgJHJ4X2RlbHRhLyRjb3VudCBwYWNrZXRzIHJlY2VpdmVkXCJcbitcdFx0cmV0dXJuIFwiJGtzZnRfZmFpbFwiXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJGQUlMOiAwLyRjb3VudCBwYWNrZXRzIHJlY2VpdmVkXCJcbitcdFx0cmV0dXJuIFwiJGtzZnRfZmFpbFwiXG4rXHRmaVxuK31cbitcbityZXQ9MFxuK1xuK2VjaG8gXCJURVNUOiBGT1UvR1JFVEFQIElQdjQgbXVsdGljYXN0IGVuY2Fwc3VsYXRpb24gcmVzdWJtaXRcIlxuK3NldHVwX2NvbW1vblxuK3NldHVwX2lwdjRcbitydW5fcGluZ190ZXN0IC00IGVvdWRwNCBcIiRUVU40X1JcIiB8fCByZXQ9JD9cbitcbitlY2hvIFwiVEVTVDogRk9VL0dSRVRBUCBJUHY2IG11bHRpY2FzdCBlbmNhcHN1bGF0aW9uIHJlc3VibWl0XCJcbitpZiBzZXR1cF9pcHY2OyB0aGVuXG4rXHRydW5fcGluZ190ZXN0IC02IGVvdWRwNiBcIiRUVU42X1JcIiB8fCByZXQ9JD9cbitlbHNlXG4rXHRlY2hvIFwiU0tJUDogSVB2NiB1bmF2YWlsYWJsZVwiXG4rZmlcbitcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjM4LjA3ODg5NzEwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjI1NTU0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgVURQIG11bHRpY2FzdCBkZWxpdmVyeSBwYXRocyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvaXB2NC91ZHAuY2AgYW5kIGBuZXQvaXB2Ni91ZHAuY2AuIEl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBpcyBpbiBob3cgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSBgdWRwX3F1ZXVlX3Jjdl9za2JgIGFuZCBgdWRwdjZfcXVldWVfcmN2X3NrYmAgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAgZnVuY3Rpb25zLlxuXG5QcmV2aW91c2x5LCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIChvciBgdWRwdjZfcXVldWVfcmN2X3NrYmApIHJldHVybmVkIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSBjb2RlIGNvbnN1bWVkIHRoZSBza2IgKHNvY2tldCBidWZmZXIpLiBOb3csIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG51YW5jZWQgcmV0dXJuIHZhbHVlIGhhbmRsaW5nLiBJbiB0aGUgSVB2NCBjYXNlLCBpZiBgdWRwX3F1ZXVlX3Jjdl9za2JgIHJldHVybnMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgdGhlIGNvZGUgbm93IHJldHVybnMgdGhlIG5lZ2F0aXZlIG9mIHRoYXQgdmFsdWUuIFRoZSBJUHY2IGNhc2UgaXMgdGhlIG9wcG9zaXRlLCByZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZS4gVGhpcyBsb29rcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gYWxsb3cgZm9yIHJlc3VibWl0dGluZyB0aGUgcGFja2V0LCBwcmVzdW1hYmx5IHRvIGFuIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGxpa2UgR1JFKSB3aGVuIHBhY2tldHMgYXJyaXZlIHZpYSB0aGUgbXVsdGljYXN0IFVEUCBkZWxpdmVyeSBwYXRoLiBUaGlzIHJlc3VibWlzc2lvbiBpcyBwcm9iYWJseSBkdWUgdG8gdGhlIGB1ZHBfcXVldWVfcmN2X3NrYmAgY2FsbCBuZWVkaW5nIHRvIHJldHVybiBhbiBlcnJvciwgYnV0IGNvbnN1bWluZyB0aGUgc2tiIGlmIHRoYXQgZXJyb3IgaXMgbm90IHRvIGJlIGhhbmRsZWQgYXQgdGhhdCBsYXllci5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gVURQIG11bHRpY2FzdCBkZWxpdmVyeSwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbmQgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJldHVybiBjb2RlcywgYW5kIHdoYXQgdGhleSBzaWduaWZ5LlxuXG5MZXQncyBzZWUsIHdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgYW5kIGBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJgLCB0aGVzZSBhcmUgZGVmaW5pdGVseSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZXkgYXJlIGluIHRoZSBob3QgcGF0aCBmb3IgbXVsdGljYXN0IFVEUCBwYWNrZXRzLlxuXG5BbmQgd2FpdCwgdGhlIHRlc3QgY2FzZSBtZW50aW9ucyBGT1UgYW5kIEdSRVRBUCwgaW5kaWNhdGluZyB0aGF0IGNlcnRhaW4gY29uZmlndXJhdGlvbnMgd2lsbCBiZSByZXF1aXJlZCB0byByZXByb2R1Y2UgYW5kIGZ1enogdGhpcyBwcm9wZXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaGFzIHRoZSByaWdodCBvcHRpb25zIGVuYWJsZWQuIFNvLCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRfRk9VYCwgYENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNgLCBgQ09ORklHX0lQX0dSRWAsIGFuZCBgQ09ORklHX0lQVjZfR1JFYCBhcmUgYWxsIHNldC4gVGhpcyBpcyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSB0byBlbnN1cmUgSSBjYW4gcmVwcm9kdWNlIHRoZSB0ZXN0IGNhc2UgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1ODo0Ni4xMDE0NTUzMzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwMzY4MzQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0ZPVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc9NjY9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjY3OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy02OC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTYyPUNPTkZJR19ORVRfSVBWVEk9bVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc6NjM6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZy02NC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc9Njk9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjcwOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy03MS1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NTk9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjYwOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NjE9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjYyOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZy02My1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnPTYwPUNPTkZJR19ORVRfSVBWVEk9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NjE6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy02Mi1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9ODA9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjgxOkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy04Mi1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz01OD1DT05GSUdfTkVUX0lQVlRJPW1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZzo1OTpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZy02MC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZz01OT1DT05GSUdfTkVUX0lQVlRJPW1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzo2MDpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnPTYwPUNPTkZJR19ORVRfSVBWVEk9bVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NjE6Q09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy02Mi1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0lQVlRJPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZzo1NjpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZy01Ny1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9NTY9Q09ORklHX05FVF9JUFZUST1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnOjU3OkNPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZy01OC1DT05GSUdfSU5FVF9BSD1tXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT0yNz1mb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRfRk9VKSArPSBmb3Uub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICs9IGdyZS5vXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEwMjc9RVhQT1JUX1NZTUJPTChfX2d1ZV9idWlsZF9oZWFkZXIpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAyOC1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwMjk6I2lmZGVmIENPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFNcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzAtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTM1PXN0cnVjdCB1ZHBfdHVubmVsX3R5cGVfZW50cnkge1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00MS1cXHRcXHRcXHQgICAgICBJU19FTkFCTEVEKENPTkZJR19WWExBTikgKiAyICsgXFxcXFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NDI6XFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTkVUX0ZPVSkgKiAyICsgXFxcXFxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDMtXFx0XFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkgKiAyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz03ND1DT05GSUdfTkVUX0NMU19NQVRDSEFMTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo3NTpDT05GSUdfTkVUX0ZPVT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo3NjpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTc3LUNPTkZJR19ORVRfSVBHUkU9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4NzpDT05GSUdfTkVUX0ZPVT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4ODpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTg5LUNPTkZJR19ORVRfSVBHUkU9bVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1ODo0OC4zMDUxNDMzNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzgyNTYyMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgSXNzdWUgd2l0aCBGT1UgRW5jYXBzdWxhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByb2JsZW0gaW4gVURQIG11bHRpY2FzdCBkZWxpdmVyeSwgc3BlY2lmaWNhbGx5IHdoZW4gcGFja2V0cyBhcmUgZW5jYXBzdWxhdGVkIHVzaW5nIEZPVS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWgsIEZPVSwgaW50ZXJlc3RpbmcgY2hvaWNlIG9mIGVuY2Fwc3VsYXRpb24uXCIgVGhlIHRlc3RpbmcgaW52b2x2ZXMgYm90aCBGT1UgYW5kIEdSRVRBUCwgd2hpY2ggaXMgYSBnb29kIGNvbWJpbmF0aW9uIHRvIGV4cGxvcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE5FVF9GT1VgIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC5cblxuV2FpdCBhIHNlY29uZC4uLiB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L3VkcC5jYCBhbmQgYG5ldC9pcHY2L3VkcC5jYC4gVGhvc2UgZmlsZXMgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YC4gVGhhdCBzdWdnZXN0cyBhIGZ1bmRhbWVudGFsIGlzc3VlIHdpdGhpbiB0aGUgVURQIGNvcmUgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBGT1UgbW9kdWxlLiBJbnRlcmVzdGluZy4uLlxuXG5TbywgdGhpcyBpc3N1ZSBpcyAqdHJpZ2dlcmVkKiBieSBGT1UgZW5jYXBzdWxhdGlvbi4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGF0IGB1ZHBfcXVldWVfcmN2X3NrYmAgaXMgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHdoaWNoLCBpbiB0aGUgRk9VIGNvbnRleHQsIGFwcGFyZW50bHkgc2lnbmlmaWVzIHRoYXQgdGhlIHBhY2tldCBuZWVkcyByZXN1Ym1pc3Npb24sIGxpa2VseSBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGxpa2UgR1JFIGVuY2Fwc3VsYXRpb24uIE5vdywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGlzIHRoZSBsb2dpYyB3aXRoaW4gYHVkcF9xdWV1ZV9yY3Zfc2tiYCB0aGF0J3MgY2F1c2luZyB0aGlzIHJldHVybiB2YWx1ZT8gTGV0J3MgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byBGT1UgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTg6NTMuMDg3NzA3OTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjY1NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJldHVybi4qXFx1MDAzZS4qMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC91ZHAuYz04NTQ9c3RhdGljIHN0cnVjdCBzb2NrICpfX3VkcDRfbGliX2Vycl9lbmNhcChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy05MDUtICogc29ydCBvZiBlcnJvciBjb25kaXRpb24uICBJZiBlcnIgXFx1MDAzYyAwIHRoZW4gdGhlIHNvY2tldCBzaG91bGRcXG5uZXQvaXB2NC91ZHAuYzo5MDY6ICogYmUgY2xvc2VkIGFuZCB0aGUgZXJyb3IgcmV0dXJuZWQgdG8gdGhlIHVzZXIuICBJZiBlcnIgXFx1MDAzZSAwXFxubmV0L2lwdjQvdWRwLmMtOTA3LSAqIGl0J3MganVzdCB0aGUgaWNtcCB0eXBlIFxcdTAwM2NcXHUwMDNjIDggfCBpY21wIGNvZGUuXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNTY5PXN0YXRpYyBpbnQgdWRwX3VuaWNhc3RfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNTc4LVxcbm5ldC9pcHY0L3VkcC5jOjI1Nzk6XFx0LyogYSByZXR1cm4gdmFsdWUgXFx1MDAzZSAwIG1lYW5zIHRvIHJlc3VibWl0IHRoZSBpbnB1dCwgYnV0XFxubmV0L2lwdjQvdWRwLmMtMjU4MC1cXHQgKiBpdCB3YW50cyB0aGUgcmV0dXJuIHRvIGJlIC1wcm90b2NvbCwgb3IgMFxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzM1Mj1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VkcF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM0NjItXFx0V0FSTl9PTl9PTkNFKGl0ZXItXFx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xcbm5ldC9pcHY0L3VkcC5jOjM0NjM6XFx0cmV0dXJuIGl0ZXItXFx1MDAzZWVuZF9zayA/IGl0ZXItXFx1MDAzZWJhdGNoWzBdLnNrIDogTlVMTDtcXG5uZXQvaXB2NC91ZHAuYy0zNDY0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTg6NTMuMTQzMzc4MDI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODUyMzg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB1ZHBfcXVldWVfcmN2X3NrYmAgUmVzdWJtaXNzaW9uIExvZ2ljKipcblxuUmlnaHQsIHNvIGB1ZHBfcXVldWVfcmN2X3NrYmAgaXMgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8sIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpbmRpY2F0ZXMgYSBuZWVkIHRvIHJlc3VibWl0IHRoZSByZWNlaXZlZCBzb2NrZXQgYnVmZmVyIChgc2tiYCkuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0ICp3aHkqLiBBIHBvc2l0aXZlIHJldHVybiB1c3VhbGx5IHNpZ25hbHMgc29tZSBraW5kIG9mIHF1ZXVlaW5nIGlzc3VlLCBwb3RlbnRpYWwgcmVzb3VyY2UgY29udGVudGlvbiwgb3IgcGVyaGFwcyBhIHRlbXBvcmFyeSBpbmFiaWxpdHkgdG8gcHJvY2VzcyB0aGUgcGFja2V0IGltbWVkaWF0ZWx5LiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgVURQIGFuZCBpdHMgcG90ZW50aWFsIGZvciBoaWdoLXZvbHVtZSB0cmFmZmljLCB1bmRlcnN0YW5kaW5nIHRoZSByZXN1Ym1pc3Npb24gcGF0aCBpbiBkZXRhaWwgaXMgcGFyYW1vdW50LiBMZXQncyBkaXZlIHJpZ2h0IGludG8gdGhlIGB1ZHBfcXVldWVfcmN2X3NrYmAgaW1wbGVtZW50YXRpb24gdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgcmVzdWJtaXNzaW9uIGNvbmRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBiZWhhdmlvci4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW50ZXJuYWwgcXVldWUgb3ZlcmZsb3dzPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGVycm9yIHNjZW5hcmlvcyBiZWluZyBoYW5kbGVkPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWUncyBtZWFuaW5nLCBzcGVjaWZpYyBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSBgc2tiYCwgYW5kIGFueSBhc3NvY2lhdGVkIGxvY2tpbmcgb3IgY29udGVudGlvbiBpc3N1ZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlc3VibWlzc2lvbiBtZWNoYW5pc20gaXMgZWZmaWNpZW50LCBkb2Vzbid0IGludHJvZHVjZSBleGNlc3NpdmUgbGF0ZW5jeSBvciBwb3RlbnRpYWwgZm9yIGxpdmVsb2NrcywgYW5kIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjU2LjgwMTkwNDYyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njg4NjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdWRwX3F1ZXVlX3Jjdl9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MjM1MD1zdGF0aWMgaW50IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNDIyLVxcbm5ldC9pcHY0L3VkcC5jOjI0MjM6c3RhdGljIGludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdWRwLmMtMjQyNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU4OjU2Ljg1ODc5OTY0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzE2ODYwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiBrZXJuZWwgbmV0d29ya2luZyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGB1ZHBfcXVldWVfcmN2X3NrYmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYHVkcF9xdWV1ZV9yY3Zfc2tiYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIGEgY3JpdGljYWwgcGFydCBvZiBpdCwgZm9yIHJlY2VpdmluZyBVRFAgdHJhZmZpYy4gSSBrbm93IHRoZSBiYXNpY3M6IGEgU0tCIChTb2NrZXQgQnVmZmVyKSBjb250YWluaW5nIHRoZSBpbmNvbWluZyBVRFAgZGF0YWdyYW0gaXMgbGlrZWx5IGFscmVhZHkgY29uc3RydWN0ZWQsIHByb2JhYmx5IGJ5IHRoZSBoYXJkd2FyZSBvciBhIGxvd2VyLWxldmVsIGRyaXZlci4gTm93LCAqdGhpcyogaXMgd2hlcmUgd2UgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdCB3aXRoaW4gdGhlIFVEUCBsYXllciBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZTogd2hlcmUgdGhpcyBTS0IgZ2V0cyBlbnF1ZXVlZCwgaG93IGl0J3MgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzb2NrZXQgKGlmIGF0IGFsbCwgZGVwZW5kaW5nIG9uIHRoZSBjaXJjdW1zdGFuY2VzKSwgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgZm9yIGhhbmRsaW5nIHBvdGVudGlhbCBjb25nZXN0aW9uIG9yIHJlc291cmNlIGxpbWl0YXRpb25zLiBJcyB0aGlzIGRpcmVjdC10by1zb2NrZXQsIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggYSBtb3JlIGdlbmVyaWMgUlggcGF0aD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjb25uZWN0ZWQgVURQIHNvY2tldHMsIG9yIHVuY29ubmVjdGVkIG9uZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGludm9sdmVkIOKAkyBpcyB0aGlzIGZ1bmN0aW9uIHRocmVhZC1zYWZlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBxdWV1ZSBsZW5ndGhzIGFuZCBob3cgdGhhdCBhZmZlY3RzIG92ZXJhbGwgbGF0ZW5jeT8gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgVURQIHNvY2tldCBpdHNlbGYsIGFuZCBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gc3BvdCBwb3RlbnRpYWwgaXNzdWVzIGludm9sdmluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgYW5kIHdoZXRoZXIgYW55IGZsb3cgY29udHJvbCBtZWNoYW5pc21zIGFyZSB1dGlsaXplZC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MDAuODkwNDg3OTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDIzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDIzOlxcdHN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjI0MjQ6XFx0e1xcbjI0MjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5leHQsICpzZWdzO1xcbjI0MjY6XFx0XFx0aW50IHJldDtcXG4yNDI3OlxcdFxcbjI0Mjg6XFx0XFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcXG4yNDI5OlxcdFxcdFxcdHJldHVybiB1ZHBfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XFxuMjQzMDpcXHRcXG4yNDMxOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHVkcF9za2JfY2IpIFxcdTAwM2UgU0tCX0dTT19DQl9PRkZTRVQpO1xcbjI0MzI6XFx0XFx0X19za2JfcHVzaChza2IsIC1za2JfbWFjX29mZnNldChza2IpKTtcXG4yNDMzOlxcdFxcdHNlZ3MgPSB1ZHBfcmN2X3NlZ21lbnQoc2ssIHNrYiwgdHJ1ZSk7XFxuMjQzNDpcXHRcXHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuZXh0KSB7XFxuMjQzNTpcXHRcXHRcXHRfX3NrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7XFxuMjQzNjpcXHRcXG4yNDM3OlxcdFxcdFxcdHVkcF9wb3N0X3NlZ21lbnRfZml4X2NzdW0oc2tiKTtcXG4yNDM4OlxcdFxcdFxcdHJldCA9IHVkcF9xdWV1ZV9yY3Zfb25lX3NrYihzaywgc2tiKTtcXG4yNDM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbjI0NDA6XFx0XFx0XFx0XFx0aXBfcHJvdG9jb2xfZGVsaXZlcl9yY3UoZGV2X25ldChza2ItXFx1MDAzZWRldiksIHNrYiwgcmV0KTtcXG4yNDQxOlxcdFxcdH1cXG4yNDQyOlxcdFxcdHJldHVybiAwO1xcbjI0NDM6XFx0fVxcbjI0NDQ6XFx0XFxuMjQ0NTpcXHQvKiBGb3IgVENQIHNvY2tldHMsIHNrX3J4X2RzdCBpcyBwcm90ZWN0ZWQgYnkgc29ja2V0IGxvY2tcXG4yNDQ2OlxcdCAqIEZvciBVRFAsIHdlIHVzZSB4Y2hnKCkgdG8gZ3VhcmQgYWdhaW5zdCBjb25jdXJyZW50IGNoYW5nZXMuXFxuMjQ0NzpcXHQgKi9cXG4yNDQ4OlxcdGJvb2wgdWRwX3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuMjQ0OTpcXHR7XFxuMjQ1MDpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpvbGQ7XFxuMjQ1MTpcXHRcXG4yNDUyOlxcdFxcdGlmIChkc3RfaG9sZF9zYWZlKGRzdCkpIHtcXG4yNDUzOlxcdFxcdFxcdG9sZCA9IHVucmN1X3BvaW50ZXIoeGNoZyhcXHUwMDI2c2stXFx1MDAzZXNrX3J4X2RzdCwgUkNVX0lOSVRJQUxJWkVSKGRzdCkpKTtcXG4yNDU0OlxcdFxcdFxcdGRzdF9yZWxlYXNlKG9sZCk7XFxuMjQ1NTpcXHRcXHRcXHRyZXR1cm4gb2xkICE9IGRzdDtcXG4yNDU2OlxcdFxcdH1cXG4yNDU3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4yNDU4OlxcdH1cXG4yNDU5OlxcdFxcbjI0NjA6XFx0LypcXG4yNDYxOlxcdCAqXFx0TXVsdGljYXN0cyBhbmQgYnJvYWRjYXN0cyBnbyB0byBlYWNoIGxpc3RlbmVyLlxcbjI0NjI6XFx0ICpcXG4yNDYzOlxcdCAqXFx0Tm90ZTogY2FsbGVkIG9ubHkgZnJvbSB0aGUgQkggaGFuZGxlciBjb250ZXh0LlxcbjI0NjQ6XFx0ICovXFxuMjQ2NTpcXHRzdGF0aWMgaW50IF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjQ2NjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHVkcGhkciAgKnVoLFxcbjI0Njc6XFx0XFx0XFx0XFx0XFx0ICAgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyKVxcbjI0Njg6XFx0e1xcbjI0Njk6XFx0XFx0c3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUgPSBuZXQtXFx1MDAzZWlwdjQudWRwX3RhYmxlO1xcbjI0NzA6XFx0XFx0dW5zaWduZWQgaW50IGhhc2gyLCBoYXNoMl9hbnksIG9mZnNldDtcXG4yNDcxOlxcdFxcdHVuc2lnbmVkIHNob3J0IGhudW0gPSBudG9ocyh1aC1cXHUwMDNlZGVzdCk7XFxuMjQ3MjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2ssICpmaXJzdCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjAwLjg5MDY1NjU5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU3MjM3Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8uIFRoZSBpbW1lZGlhdGUgdGhvdWdodCB0aGF0J3Mgc3VyZmFjaW5nIGlzIHRoYXQgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgbGlrZWx5IHRoZSBrZXkgZnVuY3Rpb24uIEl0J3MgdGhlIG9uZSB0aGF0IHNlZW1zIHRvIGhvbGQgdGhlIGFuc3dlci4gSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSBhbmQgdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGFyZSByZXR1cm4gcGF0aHMgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgcmV0dXJuIHZhbHVlIEkgYW0gc2VlaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MDMuODQ3ODk2NDQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC91ZHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdHN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yMzUxOlxcdHtcXG4yMzUyOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuMjM1MzpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcXG4yMzU0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4yMzU1OlxcdFxcbjIzNTY6XFx0XFx0LypcXG4yMzU3OlxcdFxcdCAqXFx0Q2hhcmdlIGl0IHRvIHRoZSBzb2NrZXQsIGRyb3BwaW5nIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLlxcbjIzNTg6XFx0XFx0ICovXFxuMjM1OTpcXHRcXHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcXG4yMzYwOlxcdFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xcbjIzNjE6XFx0XFx0XFx0Z290byBkcm9wO1xcbjIzNjI6XFx0XFx0fVxcbjIzNjM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4yMzY0OlxcdFxcbjIzNjU6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnVkcF9lbmNhcF9uZWVkZWRfa2V5KSBcXHUwMDI2XFx1MDAyNlxcbjIzNjY6XFx0XFx0ICAgIFJFQURfT05DRSh1cC1cXHUwMDNlZW5jYXBfdHlwZSkpIHtcXG4yMzY3OlxcdFxcdFxcdGludCAoKmVuY2FwX3Jjdikoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4yMzY4OlxcdFxcbjIzNjk6XFx0XFx0XFx0LypcXG4yMzcwOlxcdFxcdFxcdCAqIFRoaXMgaXMgYW4gZW5jYXBzdWxhdGlvbiBzb2NrZXQgc28gcGFzcyB0aGUgc2tiIHRvXFxuMjM3MTpcXHRcXHRcXHQgKiB0aGUgc29ja2V0J3MgdWRwX2VuY2FwX3JjdigpIGhvb2suIE90aGVyd2lzZSwganVzdFxcbjIzNzI6XFx0XFx0XFx0ICogZmFsbCB0aHJvdWdoIGFuZCBwYXNzIHRoaXMgdXAgdGhlIFVEUCBzb2NrZXQuXFxuMjM3MzpcXHRcXHRcXHQgKiB1cC1cXHUwMDNlZW5jYXBfcmN2KCkgcmV0dXJucyB0aGUgZm9sbG93aW5nIHZhbHVlOlxcbjIzNzQ6XFx0XFx0XFx0ICogPTAgaWYgc2tiIHdhcyBzdWNjZXNzZnVsbHkgcGFzc2VkIHRvIHRoZSBlbmNhcFxcbjIzNzU6XFx0XFx0XFx0ICogICAgaGFuZGxlciBvciB3YXMgZGlzY2FyZGVkIGJ5IGl0LlxcbjIzNzY6XFx0XFx0XFx0ICogXFx1MDAzZTAgaWYgc2tiIHNob3VsZCBiZSBwYXNzZWQgb24gdG8gVURQLlxcbjIzNzc6XFx0XFx0XFx0ICogXFx1MDAzYzAgaWYgc2tiIHNob3VsZCBiZSByZXN1Ym1pdHRlZCBhcyBwcm90byAtTlxcbjIzNzg6XFx0XFx0XFx0ICovXFxuMjM3OTpcXHRcXG4yMzgwOlxcdFxcdFxcdC8qIGlmIHdlJ3JlIG92ZXJseSBzaG9ydCwgbGV0IFVEUCBoYW5kbGUgaXQgKi9cXG4yMzgxOlxcdFxcdFxcdGVuY2FwX3JjdiA9IFJFQURfT05DRSh1cC1cXHUwMDNlZW5jYXBfcmN2KTtcXG4yMzgyOlxcdFxcdFxcdGlmIChlbmNhcF9yY3YpIHtcXG4yMzgzOlxcdFxcdFxcdFxcdGludCByZXQ7XFxuMjM4NDpcXHRcXG4yMzg1OlxcdFxcdFxcdFxcdC8qIFZlcmlmeSBjaGVja3N1bSBiZWZvcmUgZ2l2aW5nIHRvIGVuY2FwICovXFxuMjM4NjpcXHRcXHRcXHRcXHRpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxcbjIzODc6XFx0XFx0XFx0XFx0XFx0Z290byBjc3VtX2Vycm9yO1xcbjIzODg6XFx0XFxuMjM4OTpcXHRcXHRcXHRcXHRyZXQgPSBlbmNhcF9yY3Yoc2ssIHNrYik7XFxuMjM5MDpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4yMzkxOlxcdFxcdFxcdFxcdFxcdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5EQVRBR1JBTVMpO1xcbjIzOTI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1yZXQ7XFxuMjM5MzpcXHRcXHRcXHRcXHR9XFxuMjM5NDpcXHRcXHRcXHR9XFxuMjM5NTpcXHRcXG4yMzk2OlxcdFxcdFxcdC8qIEZBTExUSFJPVUdIIC0tIGl0J3MgYSBVRFAgUGFja2V0ICovXFxuMjM5NzpcXHRcXHR9XFxuMjM5ODpcXHRcXG4yMzk5OlxcdFxcdHByZWZldGNoKFxcdTAwMjZzay1cXHUwMDNlc2tfcm1lbV9hbGxvYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjAzLjg0ODA2NjU4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUyMzkxMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURQIE11bHRpY2FzdCBEZWxpdmVyeSBQYXRoKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHVwLVx1MDAzZWVuY2FwX3JjdigpYCBpcyB0aGUga2V5LiBJZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBsZXNzIHRoYW4gemVybywgSSBrbm93IHRoZSBgc2tiYCBuZWVkcyB0byBiZSByZXN1Ym1pdHRlZCB3aXRoIGEgcHJvdG9jb2wgYC1OYC4gIFJpZ2h0LCBhbmQgYHVkcF9xdWV1ZV9yY3Zfb25lX3NrYmAgZ2l2ZXMgYmFjayB0aGUgbmVnYXRpdmUgb2YgdGhlIHJldHVybiB2YWx1ZSAoYC1yZXRgKSB3aGVuIGl0J3MgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uXG5cblNvLCBpZiBgZW5jYXBfcmN2YCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiYCB0aGVuIHJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIgKGAtcmV0YCkuIFRoYXQgbWVhbnMgYHVkcF9xdWV1ZV9yY3Zfc2tiYCBhbHNvIHJldHVybnMgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiB6ZXJvLiBBbmQgdWx0aW1hdGVseSwgYF9fdWRwNF9saWJfbWNhc3RfZGVsaXZlcmAgcmVjZWl2ZXMgdGhpcyBwb3NpdGl2ZSB2YWx1ZS5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGhhZCB0aGlzIGxvZ2ljOiBpdCB3b3VsZCBjYWxsIGB1ZHBfcXVldWVfcmN2X3NrYmAsIGFuZCBpZiB0aGF0IHJldHVybmVkIGEgcG9zaXRpdmUgdmFsdWUsIHRoZSBgc2tiYCB3YXMgY29uc3VtZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgYSBwcm9ibGVtISBJbnN0ZWFkIG9mIHJlc3VibWl0dGluZyBpdCBhcyB3ZSBpbnRlbmRlZCwgd2Ugd2VyZSBqdXN0IHRocm93aW5nIGl0IGF3YXkuXG5cbk5vdywgd2l0aCB0aGlzIHBhdGNoLCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBjYWxscyBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhbmQsIGNydWNpYWxseSwgaWYgYHJldCBcdTAwM2UgMGAsIGl0ICpyZXR1cm5zKiBgLXJldGAuICBTbywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LCBzaWduYWxpbmcgdGhlIG5lZWQgZm9yIHJlc3VibWlzc2lvbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrOiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyByZXR1cm5pbmcgYSBuZWdhdGl2ZSB2YWx1ZSwgYXMgZXhwZWN0ZWQsIHRvIGluZGljYXRlIHJlc3VibWlzc2lvbi4gTm93LCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hvIGNhbGxzIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTowOS45MDA0NjAxNzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDExMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdWRwNF9saWJfbWNhc3RfZGVsaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC91ZHAuYz0yNDQ4PWJvb2wgdWRwX3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yNDY0LSAqL1xcbm5ldC9pcHY0L3VkcC5jOjI0NjU6c3RhdGljIGludCBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3VkcC5jLTI0NjYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB1ZHBoZHIgICp1aCxcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI1OTE9aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI2NDktXFx0aWYgKHJ0LVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpXFxubmV0L2lwdjQvdWRwLmM6MjY1MDpcXHRcXHRyZXR1cm4gX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKG5ldCwgc2tiLCB1aCwgc2FkZHIsIGRhZGRyKTtcXG5uZXQvaXB2NC91ZHAuYy0yNjUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTowOS45NTU4NzU3MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MTk1ODU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFJldHVybiBWYWx1ZSBvZiBgdWRwX3JjdmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIFVEUCByZWNlaXZlIHBhdGguIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYHVkcF9yY3ZgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCwgb2YgY291cnNlLCBpc24ndCBqdXN0ICp3aGF0KiBoYXBwZW5zLCBidXQgdGhlICpyZXN1bHQqIG9mIHRoZSBmdW5jdGlvbi4gV2hhdCBkb2VzIGB1ZHBfcmN2YCAqdGVsbCogbWU/IFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkIGluIGl0cyByZXR1cm4gdmFsdWU/XG5cbkknbSB0aGlua2luZzogaXMgaXQgYSBzaW1wbGUgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgYW5kIGlmIHNvLCBob3cgZ3JhbnVsYXIgaXMgdGhlIGluZm9ybWF0aW9uPyBEb2VzIGl0IHJldHVybiBhIHBvaW50ZXIgdG8gYSBkYXRhZ3JhbSwgYW5kIGlmIHNvLCBob3cgaXMgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlZD8gRG9lcyBpdCBoYXZlIHNpZGUgZWZmZWN0cz8gSXMgdGhlcmUgYSBzdWJ0bGUgc3RhdGUgY2hhbmdlIHRoYXQgaW1wYWN0cyBzdWJzZXF1ZW50IGNhbGxzPyBBcmUgdGhlcmUgZGlmZmVyZW50IHJldHVybiBwYXRocyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSdzIGN1cnJlbnQgY29uZGl0aW9uIGFuZCB3aGF0IGZhY3RvcnMgYXJlIGNvbnNpZGVyZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY2FsbCBzaG91bGQgYmUgaGFuZGxlZC5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOiBXaGF0IGFyZSB0aGUgcG9zc2libGUgc3RhdGVzIGZvbGxvd2luZyB0aGUgZnVuY3Rpb27igJlzIGNhbGw/IFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2Ugc3RhdGVzIG9uIHRoZSBrZXJuZWwgYW5kIHRoZSBhcHBsaWNhdGlvbj8gTXkgZ29hbCBoZXJlIGlzIGEgZnVsbCBhbmQgZGVlcCBhcHByZWNpYXRpb24gb2YgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToxMy4xMjc4MzYzMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1OTEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1OTE6XFx0aW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yNTkyOlxcdHtcXG4yNTkzOlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbjI1OTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMjU5NTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMO1xcbjI1OTY6XFx0XFx0dW5zaWduZWQgc2hvcnQgdWxlbjtcXG4yNTk3OlxcdFxcdF9fYmUzMiBzYWRkciwgZGFkZHI7XFxuMjU5ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4yNTk5OlxcdFxcdGJvb2wgcmVmY291bnRlZDtcXG4yNjAwOlxcdFxcdGludCBkcm9wX3JlYXNvbjtcXG4yNjAxOlxcdFxcbjI2MDI6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4yNjAzOlxcdFxcbjI2MDQ6XFx0XFx0LypcXG4yNjA1OlxcdFxcdCAqICBWYWxpZGF0ZSB0aGUgcGFja2V0LlxcbjI2MDY6XFx0XFx0ICovXFxuMjYwNzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpKVxcbjI2MDg6XFx0XFx0XFx0Z290byBkcm9wO1xcdFxcdC8qIE5vIHNwYWNlIGZvciBoZWFkZXIuICovXFxuMjYwOTpcXHRcXG4yNjEwOlxcdFxcdHVoICAgPSB1ZHBfaGRyKHNrYik7XFxuMjYxMTpcXHRcXHR1bGVuID0gbnRvaHModWgtXFx1MDAzZWxlbik7XFxuMjYxMjpcXHRcXHRzYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4yNjEzOlxcdFxcdGRhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbjI2MTQ6XFx0XFxuMjYxNTpcXHRcXHRpZiAodWxlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjI2MTY6XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYxNzpcXHRcXG4yNjE4OlxcdFxcdGlmICh1bGVuIFxcdTAwM2Mgc2l6ZW9mKCp1aCkpXFxuMjYxOTpcXHRcXHRcXHRnb3RvIHNob3J0X3BhY2tldDtcXG4yNjIwOlxcdFxcbjI2MjE6XFx0XFx0aWYgKHVsZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbjI2MjI6XFx0XFx0XFx0aWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHVsZW4pKVxcbjI2MjM6XFx0XFx0XFx0XFx0Z290byBzaG9ydF9wYWNrZXQ7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdHVoID0gdWRwX2hkcihza2IpO1xcbjI2MjY6XFx0XFx0fVxcbjI2Mjc6XFx0XFxuMjYyODpcXHRcXHRpZiAodWRwNF9jc3VtX2luaXQoc2tiLCB1aCkpXFxuMjYyOTpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuMjYzMDpcXHRcXG4yNjMxOlxcdFxcdHNrID0gaW5ldF9zdGVhbF9zb2NrKG5ldCwgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIHNhZGRyLCB1aC1cXHUwMDNlc291cmNlLCBkYWRkciwgdWgtXFx1MDAzZWRlc3QsXFxuMjYzMjpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZWZjb3VudGVkLCB1ZHBfZWhhc2hmbik7XFxuMjYzMzpcXHRcXHRpZiAoSVNfRVJSKHNrKSlcXG4yNjM0OlxcdFxcdFxcdGdvdG8gbm9fc2s7XFxuMjYzNTpcXHRcXG4yNjM2OlxcdFxcdGlmIChzaykge1xcbjI2Mzc6XFx0XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xcbjI2Mzg6XFx0XFx0XFx0aW50IHJldDtcXG4yNjM5OlxcdFxcbjI2NDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZShzay1cXHUwMDNlc2tfcnhfZHN0KSAhPSBkc3QpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToxMy4xMjgwMDIwMzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MjU1MzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVRFAgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgYHVkcF9yY3ZgIGZ1bmN0aW9uLiBTb21ldGhpbmcganVzdCB0cmlnZ2VyZWQgYSBjdXJpb3NpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIHJlYWxseSB3b3Jrcy4gQWgsIGhlcmUgaXQgaXMsIGxpbmUgMjY1MC4gSXQncyBjYWxsaW5nIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRpZyBkZWVwZXIgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgdGhpcyBjYWxsLiBMZXQgbWUgcmVyZWFkIHRoZSBlbnRpcmUgZnVuY3Rpb24gZmxvdy4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgbGVhZCB0byB0aGlzIG11bHRpY2FzdCBkZWxpdmVyeSBwYXRoLiBXaGF0IGFyZSB0aGUga2V5IGRlY2lzaW9uIHBvaW50cz8gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZml0cyBpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIFVEUCBwYWNrZXQgaGFuZGxpbmcuIEknbSBnb2luZyB0byBzdGFydCBieSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBmb2N1c2luZyBvbiBob3cgZGlmZmVyZW50IHBhY2tldCBjaGFyYWN0ZXJpc3RpY3MgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy4gSSB3YW50IHRoZSBmdWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToxNi4xODA1NTcyNTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NDE6XFx0XFx0XFx0XFx0dWRwX3NrX3J4X2RzdF9zZXQoc2ssIGRzdCk7XFxuMjY0MjpcXHRcXG4yNjQzOlxcdFxcdFxcdHJldCA9IHVkcF91bmljYXN0X3Jjdl9za2Ioc2ssIHNrYiwgdWgpO1xcbjI2NDQ6XFx0XFx0XFx0aWYgKHJlZmNvdW50ZWQpXFxuMjY0NTpcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuMjY0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRpZiAocnQtXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUfFJUQ0ZfTVVMVElDQVNUKSlcXG4yNjUwOlxcdFxcdFxcdHJldHVybiBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXIobmV0LCBza2IsIHVoLCBzYWRkciwgZGFkZHIpO1xcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRzayA9IF9fdWRwNF9saWJfbG9va3VwX3NrYihza2IsIHVoLVxcdTAwM2Vzb3VyY2UsIHVoLVxcdTAwM2VkZXN0KTtcXG4yNjUzOlxcdFxcdGlmIChzaylcXG4yNjU0OlxcdFxcdFxcdHJldHVybiB1ZHBfdW5pY2FzdF9yY3Zfc2tiKHNrLCBza2IsIHVoKTtcXG4yNjU1OlxcdG5vX3NrOlxcbjI2NTY6XFx0XFx0aWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpXFxuMjY1NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMjY1ODpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbjI2NTk6XFx0XFxuMjY2MDpcXHRcXHQvKiBObyBzb2NrZXQuIERyb3AgcGFja2V0IHNpbGVudGx5LCBpZiBjaGVja3N1bSBpcyB3cm9uZyAqL1xcbjI2NjE6XFx0XFx0aWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4yNjYyOlxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbjI2NjU6XFx0XFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9OT1BPUlRTKTtcXG4yNjY2OlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxuMjY2NzpcXHRcXG4yNjY4OlxcdFxcdC8qXFxuMjY2OTpcXHRcXHQgKiBIbW0uICBXZSBnb3QgYW4gVURQIHBhY2tldCB0byBhIHBvcnQgdG8gd2hpY2ggd2VcXG4yNjcwOlxcdFxcdCAqIGRvbid0IHdhbm5hIGxpc3Rlbi4gIElnbm9yZSBpdC5cXG4yNjcxOlxcdFxcdCAqL1xcbjI2NzI6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcXG4yNjczOlxcdFxcdHJldHVybiAwO1xcbjI2NzQ6XFx0XFxuMjY3NTpcXHRzaG9ydF9wYWNrZXQ6XFxuMjY3NjpcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbjI2Nzc6XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiVURQOiBzaG9ydCBwYWNrZXQ6IEZyb20gJXBJNDoldSAlZC8lZCB0byAlcEk0OiV1XFxcXG5cXFwiLFxcbjI2Nzg6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZzYWRkciwgbnRvaHModWgtXFx1MDAzZXNvdXJjZSksXFxuMjY3OTpcXHRcXHRcXHRcXHQgICAgdWxlbiwgc2tiLVxcdTAwM2VsZW4sXFxuMjY4MDpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRhZGRyLCBudG9ocyh1aC1cXHUwMDNlZGVzdCkpO1xcbjI2ODE6XFx0XFx0Z290byBkcm9wO1xcbjI2ODI6XFx0XFxuMjY4MzpcXHRjc3VtX2Vycm9yOlxcbjI2ODQ6XFx0XFx0LypcXG4yNjg1OlxcdFxcdCAqIFJGQzExMjI6IE9LLiAgRGlzY2FyZHMgdGhlIGJhZCBwYWNrZXQgc2lsZW50bHkgKGFzIGZhciBhc1xcbjI2ODY6XFx0XFx0ICogdGhlIG5ldHdvcmsgaXMgY29uY2VybmVkLCBhbnl3YXkpIGFzIHBlciA0LjEuMy40IChNVVNUKS5cXG4yNjg3OlxcdFxcdCAqL1xcbjI2ODg6XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVURQX0NTVU07XFxuMjY4OTpcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCJVRFA6IGJhZCBjaGVja3N1bS4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbiAlZFxcXFxuXFxcIixcXG4yNjkwOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2FkZHIsIG50b2hzKHVoLVxcdTAwM2Vzb3VyY2UpLCBcXHUwMDI2ZGFkZHIsIG50b2hzKHVoLVxcdTAwM2VkZXN0KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MTYuMTgwNzQ5NDg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk4OTM5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlVEUCBNdWx0aWNhc3QgRGVsaXZlcnkgRGVlcCBEaXZlKipcblxuT2theSwgc28gYHVkcF9yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGluY29taW5nIFVEUCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgZG9lcyBgdWRwX3JjdmAgYWN0dWFsbHkgKnJldHVybio/IFRoZSBjb2RlIGluZGljYXRlcyBpdCdzIHRpZWQgdG8gd2hhdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBkb2VzLiBUaGF0IHNlZW1zIGxpa2UgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbiBiZXR0ZXIuXG5cbk5vdywgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyB0aGUgb25lIHRoYXQgKnVzZXMqIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgdWRwX3JjdmAuIFRoaXMgbG9va3MgbGlrZSB0aGUgbmV4dCBzaWduaWZpY2FudCBwb2ludCBpbiB0aGUgY2hhaW4uIE15IGd1dCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBvcmNoZXN0cmF0ZXMgdGhlIGhpZ2hlci1sZXZlbCBwcm9jZXNzaW5nLCBvciBhdCBsZWFzdCBob3cgdGhlIHBhY2tldCBpcyB1c2VkLlxuXG5SaWdodCwgYGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1YCBpcyBsb2NhdGVkIGluIGBuZXQvaXB2NC9pcF9pbnB1dC5jYC4gTGV0J3MgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZGlzc2VjdCB0aGUgbG9naWMgd2l0aGluIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGF0IHJldHVybiB2YWx1ZSBhbmQgaG93IHRoZSBkZWxpdmVyeSBwcm9jZXNzIGlzIGhhbmRsZWQgaW4gdGhlIElQdjQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjIwLjkxMDY0NTY5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyODM4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9pbnB1dC5jPTE4OD1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGludCB0Y3BfdjRfcmN2KHN0cnVjdCBza19idWZmICopKTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjE4OTp2b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMTkwLXtcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI0MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyNDE6XFx0aXBfcHJvdG9jb2xfZGVsaXZlcl9yY3UobmV0LCBza2IsIGlwX2hkcihza2IpLVxcdTAwM2Vwcm90b2NvbCk7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yNDItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjIwLjk2ODkzMzg1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM1MTA2MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0J3Mgb24gdGhlIGRvY2tldC4uLiBBaCwgcmlnaHQsIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRpbWUgdG8gZ2V0IG15IHRlZXRoIGludG8gdGhpcyBvbmUuIEkga25vdyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IElQIHRyYWZmaWMgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgZXNwZWNpYWxseSByZWdhcmRpbmcgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGhvdyBpdCBpcyBpbXBhY3RpbmcgbmV0d29yayBwZXJmb3JtYW5jZS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGtleSByb2xlIGluIGRlbGl2ZXJpbmcgcGFja2V0cyB0byB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBwcm90b2NvbCBoYW5kbGVycyBhZnRlciB0aGV5J3ZlIGJlZW4gcmVjZWl2ZWQuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRlbXVsdGlwbGV4aW5nLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IGl0J3MgZG9uZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgUkNVLCBwYXJ0aWN1bGFybHkgdGhlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIGxvY2sgY29udGVudGlvbiDigJMgb3IsIHJhdGhlciwgdGhlIGF2b2lkYW5jZSB0aGVyZW9mLiBJIGFudGljaXBhdGUgdGhhdCBSQ1UgaXMgdXNlZCBoZXJlIHRvIG9wdGltaXplIHRoZSByZWFkIHBhdGhzLCBhbGxvd2luZyBmb3IgaGlnaC10aHJvdWdocHV0IHBhY2tldCBkZWxpdmVyeSB3aXRob3V0IGV4Y2Vzc2l2ZSBsb2NraW5nIG92ZXJoZWFkLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYmFsYW5jZSBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBjb25zaXN0ZW5jeS4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjI0LjMwNDA0MjM1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODk6XFx0dm9pZCBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90b2NvbClcXG4gMTkwOlxcdHtcXG4gMTkxOlxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgKmlwcHJvdDtcXG4gMTkyOlxcdFxcdGludCByYXcsIHJldDtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0cmVzdWJtaXQ6XFxuIDE5NTpcXHRcXHRyYXcgPSByYXdfbG9jYWxfZGVsaXZlcihza2IsIHByb3RvY29sKTtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0aXBwcm90ID0gcmN1X2RlcmVmZXJlbmNlKGluZXRfcHJvdG9zW3Byb3RvY29sXSk7XFxuIDE5ODpcXHRcXHRpZiAoaXBwcm90KSB7XFxuIDE5OTpcXHRcXHRcXHRpZiAoIWlwcHJvdC1cXHUwMDNlbm9fcG9saWN5KSB7XFxuIDIwMDpcXHRcXHRcXHRcXHRpZiAoIXhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiAyMDE6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsXFxuIDIwMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcXG4gMjAzOlxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjA0OlxcdFxcdFxcdFxcdH1cXG4gMjA1OlxcdFxcdFxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIDIwNjpcXHRcXHRcXHR9XFxuIDIwNzpcXHRcXHRcXHRyZXQgPSBJTkRJUkVDVF9DQUxMXzIoaXBwcm90LVxcdTAwM2VoYW5kbGVyLCB0Y3BfdjRfcmN2LCB1ZHBfcmN2LFxcbiAyMDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiKTtcXG4gMjA5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIxMDpcXHRcXHRcXHRcXHRwcm90b2NvbCA9IC1yZXQ7XFxuIDIxMTpcXHRcXHRcXHRcXHRnb3RvIHJlc3VibWl0O1xcbiAyMTI6XFx0XFx0XFx0fVxcbiAyMTM6XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcXG4gMjE0OlxcdFxcdH0gZWxzZSB7XFxuIDIxNTpcXHRcXHRcXHRpZiAoIXJhdykge1xcbiAyMTY6XFx0XFx0XFx0XFx0aWYgKHhmcm00X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiAyMTc6XFx0XFx0XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTlVOS05PV05QUk9UT1MpO1xcbiAyMTg6XFx0XFx0XFx0XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsXFxuIDIxOTpcXHRcXHRcXHRcXHRcXHRcXHQgIElDTVBfUFJPVF9VTlJFQUNILCAwKTtcXG4gMjIwOlxcdFxcdFxcdFxcdH1cXG4gMjIxOlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfTk9QUk9UTyk7XFxuIDIyMjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMjM6XFx0XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTtcXG4gMjI0OlxcdFxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDIyNTpcXHRcXHRcXHR9XFxuIDIyNjpcXHRcXHR9XFxuIDIyNzpcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdHN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDIzMDpcXHR7XFxuIDIzMTpcXHRcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbiAyMzI6XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcXG4gMjMzOlxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9NRU0pO1xcbiAyMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIzNTpcXHRcXHR9XFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdHNrYl9jbGVhcl9kZWxpdmVyeV90aW1lKHNrYik7XFxuIDIzODpcXHRcXHRfX3NrYl9wdWxsKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6MjQuMzA0MTQ1NjE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjA5NzMxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgdGhlIFJlc3VibWlzc2lvbiBMb2dpYyoqXG5cbk9rYXksIGhlcmUncyBob3cgdGhpcyBhbGwgcGllY2VzIHRvZ2V0aGVyIGluIG15IGhlYWQuIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAgaXMgdGhlIGtleSDigJMgaXQgZXhwbGljaXRseSBjaGVja3MgaWYgYHJldCBcdTAwM2MgMGAgYW5kLCBpZiBpdCBpcywgaXQgcmVzdWJtaXRzIHRoZSBwYWNrZXQgd2l0aCBgcHJvdG9jb2wgPSAtcmV0YC4gR290IGl0LiBUaGF0IG1lYW5zIHRoZSBgdWRwX3JjdmAgZnVuY3Rpb24gKmhhcyogdG8gcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgdG8ga2ljayBvZmYgdGhlIHJlc3VibWlzc2lvbiBwcm9jZXNzLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMuIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxpdmVyaW5nIG11bHRpY2FzdCBVRFAgcGFja2V0cywgYW5kIG5vdyBpdCByZXR1cm5zIGAtcmV0YCB3aGVuIGByZXQgXHUwMDNlIDBgLiBIYW5nIG9u4oCmIGB1ZHBfcXVldWVfcmN2X3NrYmAgKnJldHVybnMqIGEgcG9zaXRpdmUgdmFsdWUgdG8gc2lnbmFsIHJlc3VibWlzc2lvbiEgU28sIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIHRha2VzIHRoYXQgcG9zaXRpdmUgdmFsdWUgZnJvbSBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBuZWdhdGVzIGl0LCBhbmQgcmV0dXJucyB0aGUgbmVnYXRpdmUgcmVzdWx0LiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgcmVzdWx0aW5nIG5lZ2F0aXZlIHZhbHVlIHRoZW4gYnViYmxlcyB1cCB0byBgdWRwX3JjdmAuIFRoaXMgZWZmZWN0aXZlbHkgZmxhZ3MgYHVkcF9yY3ZgIHRvIGFsc28gcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSBuZWVkIHRvIHRyaWdnZXIgdGhlIHJlc3VibWlzc2lvbiBmcm9tIGBpcF9wcm90b2NvbF9kZWxpdmVyX3JjdWAuIFRoZSB3aG9sZSBzeXN0ZW0gaXMgdXNpbmcgdGhlIHNpZ24gb2YgdGhlIHJldHVybiBjb2RlIGFzIGEgdHJpZ2dlci5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgSVB2NC4gTm93LCBmb3IgSVB2NiwgSSBuZWVkIHRvIGNoZWNrIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGluIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoZSBJUHY2IHBhdGggYWxpZ25zIHdpdGggdGhpcyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToyOS4yMjUxMjA5NjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzUyODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcDZfaW5wdXQuYz0zOTg9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy00MDItICovXFxubmV0L2lwdjYvaXA2X2lucHV0LmM6NDAzOnZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNDA0LVxcdFxcdFxcdCAgICAgIGJvb2wgaGF2ZV9maW5hbClcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MzMtXFx0c2tiX2NsZWFyX2RlbGl2ZXJ5X3RpbWUoc2tiKTtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MzQ6XFx0aXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KG5ldCwgc2tiLCAwLCBmYWxzZSk7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OToyOS4yODE0ODAxOTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2ODE5NjI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgOlxuXG4qKkFuYWx5emluZyBgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZ2V0dGluZyBzaXR1YXRlZC4gXCJMZXQncyByZWFkIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLlwiIEp1c3Qgc3RhdGluZyB0aGUgb2J2aW91cywgZ2V0dGluZyBteSBtZW50YWwgZ2VhcnMgdHVybmluZy4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBjb250ZXh0IGlzIElQdjYgcHJvdG9jb2wgZGVsaXZlcnksIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBoaW50cyBhdCBzb21lIHNvcnQgb2YgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20gYmVpbmcgZW1wbG95ZWQuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgSSdtIGV4cGVjdGluZyB0byBzZWUgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24gYW5kIGhhbmRsaW5nIG9mIGRhdGEgc3RydWN0dXJlcywgbGlrZWx5IHJlbGF0ZWQgdG8gcm91dGluZyBvciBwYWNrZXQgcHJvY2Vzc2luZywgd2l0aGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlIFwiUkNVXCIgcGFydCBpcyBhIHNpZ25hbCDigJMgaXQgbWVhbnMgdGhlcmUncyBhIHN0cm9uZyBlbXBoYXNpcyBvbiBtaW5pbWl6aW5nIHJlYWQtc2lkZSBsb2NraW5nLCBhbmQgdGhhdCB3cml0ZXJzIGhhdmUgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIGNvb3JkaW5hdGUgY2hhbmdlcyBzbyBhcyBub3QgdG8gZGlzcnVwdCBjb25jdXJyZW50IHJlYWRlcnMuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBmdW5jdGlvbj8gV2hhdCBraW5kIG9mIGRhdGEgaXMgYmVpbmcgZGVsaXZlcmVkPyBNeSBndXQgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGhhbmRsaW5nIHRoZSBkaXNwYXRjaCBvZiBpbmNvbWluZyBJUHY2IHBhY2tldHMgdG8gdGhlaXIgYXBwcm9wcmlhdGUgdXBwZXItbGF5ZXIgcHJvdG9jb2xzLiBUaW1lIHRvIHJlYWQgYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTozMi42NDk2Nzg5ODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAzOlxcdHZvaWQgaXA2X3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsXFxuIDQwNDpcXHRcXHRcXHRcXHQgICAgICBib29sIGhhdmVfZmluYWwpXFxuIDQwNTpcXHR7XFxuIDQwNjpcXHRcXHRpbnQgZXh0aGRyX2NudCA9IElQNkNCKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2U0tCX0hPUEJZSE9QID8gMSA6IDA7XFxuIDQwNzpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmlwcHJvdDtcXG4gNDA4OlxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIDQwOTpcXHRcXHR1bnNpZ25lZCBpbnQgbmhvZmY7XFxuIDQxMDpcXHRcXHRTS0JfRFIocmVhc29uKTtcXG4gNDExOlxcdFxcdGJvb2wgcmF3O1xcbiA0MTI6XFx0XFxuIDQxMzpcXHRcXHQvKlxcbiA0MTQ6XFx0XFx0ICpcXHRQYXJzZSBleHRlbnNpb24gaGVhZGVyc1xcbiA0MTU6XFx0XFx0ICovXFxuIDQxNjpcXHRcXG4gNDE3OlxcdHJlc3VibWl0OlxcbiA0MTg6XFx0XFx0aWRldiA9IGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpO1xcbiA0MTk6XFx0XFx0bmhvZmYgPSBJUDZDQihza2IpLVxcdTAwM2VuaG9mZjtcXG4gNDIwOlxcdFxcdGlmICghaGF2ZV9maW5hbCkge1xcbiA0MjE6XFx0XFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKSlcXG4gNDIyOlxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDIzOlxcdFxcdFxcdG5leHRoZHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKVtuaG9mZl07XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdHJlc3VibWl0X2ZpbmFsOlxcbiA0Mjc6XFx0XFx0cmF3ID0gcmF3Nl9sb2NhbF9kZWxpdmVyKHNrYiwgbmV4dGhkcik7XFxuIDQyODpcXHRcXHRpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfcHJvdG9zW25leHRoZHJdKTtcXG4gNDI5OlxcdFxcdGlmIChpcHByb3QpIHtcXG4gNDMwOlxcdFxcdFxcdGludCByZXQ7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdFxcdGlmIChoYXZlX2ZpbmFsKSB7XFxuIDQzMzpcXHRcXHRcXHRcXHRpZiAoIShpcHByb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU5FVDZfUFJPVE9fRklOQUwpKSB7XFxuIDQzNDpcXHRcXHRcXHRcXHRcXHQvKiBPbmNlIHdlJ3ZlIHNlZW4gYSBmaW5hbCBwcm90b2NvbCBkb24ndFxcbiA0MzU6XFx0XFx0XFx0XFx0XFx0ICogYWxsb3cgZW5jYXBzdWxhdGlvbiBvbiBhbnkgbm9uLWZpbmFsXFxuIDQzNjpcXHRcXHRcXHRcXHRcXHQgKiBvbmVzLiBUaGlzIGFsbG93cyBmb28gaW4gVURQIGVuY2Fwc3VsYXRpb25cXG4gNDM3OlxcdFxcdFxcdFxcdFxcdCAqIHRvIHdvcmsuXFxuIDQzODpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNDM5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDQwOlxcdFxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcdFxcdH0gZWxzZSBpZiAoaXBwcm90LVxcdTAwM2VmbGFncyBcXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XFxuIDQ0MjpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyO1xcbiA0NDM6XFx0XFx0XFx0XFx0aW50IHNkaWYgPSBpbmV0Nl9zZGlmKHNrYik7XFxuIDQ0NDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRcXHRcXHQvKiBPbmx5IGRvIHRoaXMgb25jZSBmb3IgZmlyc3QgZmluYWwgcHJvdG9jb2wgKi9cXG4gNDQ3OlxcdFxcdFxcdFxcdGhhdmVfZmluYWwgPSB0cnVlO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdFxcdFxcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxcbiA0NTE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcXG4gNDUyOlxcdFxcdFxcdFxcdGhkciA9IGlwdjZfaGRyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjMyLjY0OTc2NjI2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ2Mjk1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgKipcblxuQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgLiBUaGlzIGlzbid0IGp1c3QgYSBmdW5jdGlvbiBjYWxsOyBpdCdzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdGFjaywgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNwZWNpZmljIHJvbGUuIEdpdmVuIHRoZSBcInJjdVwiIHN1ZmZpeCwgSSBpbW1lZGlhdGVseSB0aGluayB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBvcGVyYXRpbmcgdW5kZXIgYSBSZWFkLUNvcHktVXBkYXRlIHBhcmFkaWdtLiBUaGVyZWZvcmUsIGl0IGlzIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBJUHY2IHByb3RvY29sJ3MgcmVjZWl2ZSBwYXRoLCBhbmQgbW9yZSBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBSQ1UgbWVjaGFuaXNtIHRvIGVuc3VyZSBzYWZlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIElQdjYgcGFja2V0cy4gSSBleHBlY3QgdG8gc2VlIGNhcmVmdWwgaGFuZGxpbmcgb2YgcG9pbnRlcnMgYW5kIGxpa2VseSBzb21lIHVzZSBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCB0byBwcm90ZWN0IGNyaXRpY2FsIHNlY3Rpb25zLCBvciBwb3NzaWJseSB0aGUgdXNhZ2Ugb2Ygc3BlY2lmaWMgUkNVIHByaW1pdGl2ZXMuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgZGVjaWRlcyB3aGljaCBwcm90b2NvbCBoYW5kbGVyIHRvIGludm9rZSwgYW5kIGhvdyBpdCBzYWZlbHkgdHJhbnNmZXJzIGRhdGEgdG8gdGhhdCBoYW5kbGVyLiBUaGUgbnVhbmNlcyBvZiBpdHMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbG9jayBjb250ZW50aW9uIGlzc3VlcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgaW4gYSBoaWdoLXRocm91Z2hwdXQgSVB2NiBlbnZpcm9ubWVudC4gS25vd2luZyB3aGVyZSBwYWNrZXRzIGFyZSBzYWZlbHkgcHJvY2Vzc2VkIHVzaW5nIHRoaXMgcGF0dGVybiB3aWxsIGJlIHVzZWZ1bCBmb3Igc2VjdXJpdHksIGVzcGVjaWFsbHkuIEkgd29uZGVyIGlmIGl0IHN1cHBvcnRzIGFueSBleHRlbnNpb25zIG9yIHNwZWNpYWwgZmVhdHVyZXMgcmVsYXRlZCB0byBSQ1UncyBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBUaW1lIHRvIGdldCB0byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjM2LjE5NjA2NDg1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUzOlxcdFxcbiA0NTQ6XFx0XFx0XFx0XFx0Lyogc2tiLVxcdTAwM2VkZXYgcGFzc2VkIG1heSBiZSBtYXN0ZXIgZGV2IGZvciB2cmZzLiAqL1xcbiA0NTU6XFx0XFx0XFx0XFx0aWYgKHNkaWYpIHtcXG4gNDU2OlxcdFxcdFxcdFxcdFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgc2RpZik7XFxuIDQ1NzpcXHRcXHRcXHRcXHRcXHRpZiAoIWRldilcXG4gNDU4OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDU5OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDQ2MDpcXHRcXHRcXHRcXHRcXHRkZXYgPSBza2ItXFx1MDAzZWRldjtcXG4gNDYxOlxcdFxcdFxcdFxcdH1cXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIDQ2NDpcXHRcXHRcXHRcXHQgICAgIWlwdjZfY2hrX21jYXN0X2FkZHIoZGV2LCBcXHUwMDI2aGRyLVxcdTAwM2VkYWRkcixcXG4gNDY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aGRyLVxcdTAwM2VzYWRkcikgXFx1MDAyNlxcdTAwMjZcXG4gNDY2OlxcdFxcdFxcdFxcdCAgICAhaXB2Nl9pc19tbGQoc2tiLCBuZXh0aGRyLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpKSB7XFxuIDQ2NzpcXHRcXHRcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5BRERSRVJST1JTKTtcXG4gNDY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4gNDY5OlxcdFxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcdFxcdH1cXG4gNDcxOlxcdFxcdFxcdGlmICghKGlwcHJvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTkVUNl9QUk9UT19OT1BPTElDWSkpIHtcXG4gNDcyOlxcdFxcdFxcdFxcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuIDQ3MzpcXHRcXHRcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgWEZSTV9QT0xJQ1kpO1xcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0NzU6XFx0XFx0XFx0XFx0fVxcbiA0NzY6XFx0XFx0XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gNDc3OlxcdFxcdFxcdH1cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0XFx0cmV0ID0gSU5ESVJFQ1RfQ0FMTF8yKGlwcHJvdC1cXHUwMDNlaGFuZGxlciwgdGNwX3Y2X3JjdiwgdWRwdjZfcmN2LFxcbiA0ODA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiKTtcXG4gNDgxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIDQ4MjpcXHRcXHRcXHRcXHRpZiAoaXBwcm90LVxcdTAwM2VmbGFncyBcXHUwMDI2IElORVQ2X1BST1RPX0ZJTkFMKSB7XFxuIDQ4MzpcXHRcXHRcXHRcXHRcXHQvKiBOb3QgYW4gZXh0ZW5zaW9uIGhlYWRlciwgbW9zdCBsaWtlbHkgVURQXFxuIDQ4NDpcXHRcXHRcXHRcXHRcXHQgKiBlbmNhcHN1bGF0aW9uLiBVc2UgcmV0dXJuIHZhbHVlIGFzIG5leHRoZHJcXG4gNDg1OlxcdFxcdFxcdFxcdFxcdCAqIHByb3RvY29sIG5vdCBuaG9mZiAod2hpY2ggcHJlc3VtYWJseSBpc1xcbiA0ODY6XFx0XFx0XFx0XFx0XFx0ICogbm90IHNldCBieSBoYW5kbGVyKS5cXG4gNDg3OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA0ODg6XFx0XFx0XFx0XFx0XFx0bmV4dGhkciA9IHJldDtcXG4gNDg5OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzdWJtaXRfZmluYWw7XFxuIDQ5MDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA0OTE6XFx0XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KGV4dGhkcl9jbnQrKyBcXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpIHtcXG4gNDkyOlxcdFxcdFxcdFxcdFxcdFxcdFNLQl9EUl9TRVQocmVhc29uLCBJUFY2X1RPT19NQU5ZX0VYVEhEUlMpO1xcbiA0OTM6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbiA0OTQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA0OTU6XFx0XFx0XFx0XFx0XFx0Z290byByZXN1Ym1pdDtcXG4gNDk2OlxcdFxcdFxcdFxcdH1cXG4gNDk3OlxcdFxcdFxcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcXG4gNDk4OlxcdFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpO1xcbiA0OTk6XFx0XFx0XFx0fVxcbiA1MDA6XFx0XFx0fSBlbHNlIHtcXG4gNTAxOlxcdFxcdFxcdGlmICghcmF3KSB7XFxuIDUwMjpcXHRcXHRcXHRcXHRpZiAoeGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjM2LjE5NjIwMzIyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDg1MjA3MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVB2NiBNdWx0aWNhc3QgUGFja2V0IFJlc3VibWlzc2lvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBJUHY2IGNvZGUgYW5kIEkndmUgZ290IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLiBJIHNlZSB0aGF0IGBpcDZfcHJvdG9jb2xfZGVsaXZlcl9yY3VgIGlzIHRoZSBrZXkgZnVuY3Rpb247IGl0IGNoZWNrcyBpZiB0aGUgcmV0dXJuIHZhbHVlLCBgcmV0YCwgZnJvbSBhIHByZXZpb3VzIHByb2Nlc3Npbmcgc3RlcCBpcyBncmVhdGVyIHRoYW4gemVyby4gSWYgaXQgaXMsIGl0IHJlc3VibWl0cyB0aGUgcGFja2V0LCB1c2luZyBgcmV0YCBhcyB0aGUgbmV4dCBoZWFkZXIgdmFsdWUuIFRoYXQncyB0aGUgdHJpZ2dlci4gU28sIHRvIG1ha2UgdGhpcyB3b3JrLCBgdWRwdjZfcmN2YCBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgaW5kaWNhdGluZyB0aGF0IHJlc3VibWlzc2lvbiBpcyBuZWNlc3NhcnkuXG5cbk5vdyBJJ20gZm9jdXNpbmcgb24gYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAgd2l0aGluIGBuZXQvaXB2Ni91ZHAuY2AuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBjYWxscyBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIGFuZCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybywgaXQgcmV0dXJucyB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsZXIuIExvb2tpbmcgYXQgaG93IGB1ZHB2Nl9yY3ZgIGlzIGludm9rZWQsIGl0IG1ha2VzIHNlbnNlOyBpdCB3aWxsIHJldHVybiBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdGhlIG91dGVyIGxheWVyIHdpbGwgdHJpZ2dlciB0aGUgcmUtc3VibWlzc2lvbiB2aWEgYGlwNl9wcm90b2NvbF9kZWxpdmVyX3JjdWAuXG5cblRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgZml4aW5nIGEgYnVnLiBFbmNhcHN1bGF0ZWQgbXVsdGljYXN0IHBhY2tldHMgd2VyZSBnZXR0aW5nIGRyb3BwZWQsIGJ1dCBub3cgdGhleSdsbCBiZSBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC4gVGhlIHRlc3Qgc2V0dXAgdXNlcyBGT1UgYW5kIEdSRVRBUCwgYXMgZXhwZWN0ZWQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gdGVzdCB0aGlzOiBgTkVUX0ZPVWAsIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBORVRfSVBHUkVfQlJPQURDQVNUYC4gSSBtaWdodCBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlbWVudHMgZm9yIGBncmV0YXBgIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgTkVUX0lQR1JFX0JST0FEQ0FTVGAsIGJ1dCBmb3Igc3VyZSBJIG5lZWQgYElQVjZfR1JFYC4gTGV0IG1lIGdsYW5jZSBhdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2AgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6NDIuNjgxNDEzNjk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkyMzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUX0lQR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04OD1DT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjg5OkNPTkZJR19ORVRfSVBHUkU9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6OTA6Q09ORklHX05FVF9JUEdSRV9ERU1VWD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZy05MS1DT05GSUdfTkVUX0lQSVA9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTo0Mi43NTMzNDQ0NjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1Njg5NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIElQdjYgR1JFIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgSVB2NiBHUkUgY29uZmlndXJhdGlvbi4gSSdtIHRoaW5raW5nLCBcIklzIGBDT05GSUdfSVBWNl9HUkVgIGFjdHVhbGx5IHByZXNlbnQgYW5kIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50P1wiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGlzIHN0b3JlZC4gVGhlIHR5cGljYWwgcGxhY2UgZm9yIHRoZXNlIHNvcnRzIG9mIGNoZWNrcyBpcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZ2AuIEknbGwgc3RhcnQgYnkgbG9va2luZyB0aGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9uIGlzIGV4cGxpY2l0bHkgc3RhdGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjQ1LjUxMDI0Mjk0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3NzU3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZfR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz00MD1DT05GSUdfSVBWNj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo0MTpDT05GSUdfSVBWNl9HUkU9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDItQ09ORklHX0lQVjZfSUxBPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDI6NTk6NDUuNTcxMDIzNzUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTM5NjY2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBmb3IgQ09ORklHX05FVF9GT1UgaW4gdGhlIFJpZ2h0IFBsYWNlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIFRpbWUgdG8gbWFrZSBzdXJlIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHdoZXJlIGl0J3Mgc3VwcG9zZWQgdG8gYmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX05FVF9GT1VgIGlzIHByZXNlbnQsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0IHJlc2lkZXMgd2l0aGluIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiAgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIGZvciBpdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgd2l0aGluIHRoZSBzZWxmdGVzdHMgZm9yIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0aCBJJ20gZ29pbmcgdG8gY2hlY2sgaXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHNwb3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBkaXZlIGludG8gYW55IGFjdHVhbCB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHJlbGF0ZWQgdG8gaXQuICBTbywgbGV0IG1lIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24gYW5kIGhhdmUgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjQ5LjgyNDk5MjU1OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwNzIwMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfRk9VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz04Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4NzpDT05GSUdfTkVUX0ZPVT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo4ODpDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTg5LUNPTkZJR19ORVRfSVBHUkU9bVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMjo1OTo1MC4xMjU3MTg2NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5Njg1MDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRk9VIE11bHRpY2FzdCBSZXN1Ym1pc3Npb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBhcmUgYE5FVF9GT1VgLCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgYE5FVF9JUEdSRWAsIGFuZCBgSVBWNl9HUkVgLiBHb3QgaXQuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gVGhvc2UgYXJlIGBfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJgIGFuZCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgdWRwX3F1ZXVlX3Jjdl9za2JgLCBhcyB0aGF0J3MgYSBrZXkgcGFydCBvZiBVRFAgcHJvY2Vzc2luZywgYnV0IGEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBpdCBpc24ndCB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEFuZCBzaW5jZSBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBpcyBjYWxsZWQgc3BlY2lmaWNhbGx5IGZvciBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBVRFAgcGFja2V0cywgdGhhdCdzIHdoYXQgSSB3aWxsIHVzZS5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhhdCBGT1UtZW5jYXBzdWxhdGVkIG11bHRpY2FzdCBwYWNrZXRzIHdlcmUgaW5jb3JyZWN0bHkgY29uc3VtZWQgaW5zdGVhZCBvZiBiZWluZyBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciwgbGlrZSBHUkUuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJldHVybmluZyBhIHJlc3VibWl0IHJlcXVlc3QsIHBvc2l0aXZlIGZvciBJUHY2IGFuZCBuZWdhdGl2ZSBmb3IgSVB2NC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMuIEl0J3MgY3J1Y2lhbCB0aGF0IHdlIGZ1enogdGhpcyBhcmVhIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZXNlIG11bHRpY2FzdCBwYWNrZXRzIGFyZSByZXN1Ym1pdHRlZC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB3aGlsZSBJIGhhdmUgdGhlIGVzc2VudGlhbHMsIGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgbm8gb3RoZXIsIGxlc3Mgb2J2aW91cyBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYE5FVF9JUEdSRV9ERU1VWGAgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdpdGggYE5FVF9JUEdSRWAgb3IgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjU3LjcyMjU3MTE5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MjMyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzIxPWNvbmZpZyBORVRfRk9VXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxubmV0L2lwdjQvS2NvbmZpZy0zMzEtXFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAyOjU5OjU3Ljc4NDMwMzAzM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE5NjcyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBpbnRlcm5hbHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbDpcblxuKipEZWx2aW5nIGludG8gSVB2NCBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgSVB2NCB0dW5uZWwgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIHNwZWNpZmljIHBsYWNlIHRvIHN0YXJ0IHNlZW1zIHRvIGJlIGBuZXQvaXB2NC9LY29uZmlnYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGBORVRfRk9VX0lQX1RVTk5FTFNgLiBUaGlzIHN1Z2dlc3RzIEknbSBhZnRlciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVAtaW4tSVAgdHVubmVscywgbGlrZWx5IHRoZSBgZm91YCBtb2R1bGUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGNvbmZpZyBvcHRpb24gYW5kIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEknbSBwcm9iYWJseSBsb29raW5nIHRvIHNlZSBob3cgdGhlIG9wdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIGNlcnRhaW4gY29kZSBwYXRocywgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSAob3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZmVhdHVyZXMpLCBhbmQgd2hhdCBraW5kIG9mIGltcGFjdCBpdHMgYWN0aXZhdGlvbiBoYXMgb24gdGhlIG92ZXJhbGwgbmV0d29yayBzdGFjay4gSXQncyBhIGtleSBwaWVjZSBpbiBlbmFibGluZyB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIElQdjQgdHVubmVscywgc28gdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3J1Y2lhbC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGluc2lnaHQgaW50byBob3cgYE5FVF9GT1VfSVBfVFVOTkVMU2AgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgdHVubmVsIG1lY2hhbmlzbXMsIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgSVAgdHVubmVsaW5nIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTc4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MDEuMTAzOTc4NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMTpcXHRjb25maWcgTkVUX0ZPVVxcbiAzMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuIDMyMzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gMzI0OlxcdFxcdGhlbHBcXG4gMzI1OlxcdFxcdCAgRm9vIG92ZXIgVURQIGFsbG93cyBhbnkgSVAgcHJvdG9jb2wgdG8gYmUgZGlyZWN0bHkgZW5jYXBzdWxhdGVkXFxuIDMyNjpcXHRcXHQgIG92ZXIgVURQIGluY2x1ZGUgdHVubmVscyAoSVBJUCwgR1JFLCBTSVQpLiBCeSBlbmNhcHN1bGF0aW5nIGluIFVEUFxcbiAzMjc6XFx0XFx0ICBuZXR3b3JrIG1lY2hhbmlzbXMgYW5kIG9wdGltaXphdGlvbnMgZm9yIFVEUCAoc3VjaCBhcyBFQ01QXFxuIDMyODpcXHRcXHQgIGFuZCBSU1MpIGNhbiBiZSBsZXZlcmFnZWQgdG8gcHJvdmlkZSBiZXR0ZXIgc2VydmljZS5cXG4gMzI5OlxcdFxcbiAzMzA6XFx0Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbiAzMzE6XFx0XFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxuIDMzMjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxcbiAzMzM6XFx0XFx0c2VsZWN0IE5FVF9GT1VcXG4gMzM0OlxcdFxcdGhlbHBcXG4gMzM1OlxcdFxcdCAgQWxsb3cgY29uZmlndXJhdGlvbiBvZiBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24gZm9yIElQIHR1bm5lbHMuXFxuIDMzNjpcXHRcXHQgIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBJUCB0dW5uZWxzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZVxcbiAzMzc6XFx0XFx0ICBGT1Ugb3IgR1VFIGVuY2Fwc3VsYXRpb24uXFxuIDMzODpcXHRcXG4gMzM5OlxcdGNvbmZpZyBJTkVUX0FIXFxuIDM0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDowMS4xMDQwNjc3MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2NTk1MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgTkVUX0ZPVV9JUF9UVU5ORUxTYCAqcmVxdWlyZXMqIGVpdGhlciBgTkVUX0lQSVBgLCBgTkVUX0lQR1JFYCwgb3IgYElQVjZfU0lUYCB0byBiZSBlbmFibGVkLiBNYWtlcyBzZW5zZSwgaXQgbmVlZHMgc29tZSB1bmRlcmx5aW5nIElQIHR1bm5lbCBtZWNoYW5pc20uIEFuZCwgaWYgSSBlbmFibGUgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIGl0IGF1dG9tYXRpY2FsbHkgKnNlbGVjdHMqIGBORVRfRk9VYC4gR29vZCwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdDsgSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IGVuYWJsaW5nIGBORVRfRk9VYCBzZXBhcmF0ZWx5IGlmIEknbSB1c2luZyB0aG9zZSB0dW5uZWxzLlxuXG5UaGVyZWZvcmUsIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIGdldHRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIHRvIGp1c3QgZW5hYmxlIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBgTkVUX0lQR1JFYCwgYW5kIGBJUFY2X0dSRWAuIFRoYXQgc2hvdWxkIHNhdGlzZnkgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuXG5cbk5vdywgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYE5FVF9JUEdSRWAgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgZnVydGhlciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDowNC43ODA2NjUyNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0NjAxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUEdSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXFxubmV0L2lwdjQvS2NvbmZpZzoxOTI6Y29uZmlnIE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMTkzLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjA2LVxcbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiSVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MDQuODQyMTMxNzY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTI5MjgyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSBhbmQgdGhlIGBORVRfSVBHUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBpZiBpdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBleHBlcnQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY0IEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBuZXQvaXB2NC9LY29uZmlnYC4gSSdtIGZvY3VzaW5nIGluIG9uIHRoZSBgTkVUX0lQR1JFYCBvcHRpb24sIG5hdHVyYWxseS4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgY29uZmlnIHdpbGwgZGVmaW5lIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGdlbmVyaWMgcm91dGluZyBlbmNhcHN1bGF0aW9uIChHUkUpIHN1cHBvcnQgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBHaXZlbiBteSBmYW1pbGlhcml0eSwgSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYmxvY2ssIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIHRob3JvdWdoIHJldmlldyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkRlcGVuZGVuY2llcyoqOiBXaGF0IG90aGVyIGZlYXR1cmVzICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBsb2dpY2FsbHkgcmVsYXRlZCBmb3IgYE5FVF9JUEdSRWAgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcywgd2hlcmUgZW5hYmxpbmcgR1JFIHVubG9ja3MgYW5vdGhlciBjYXBhYmlsaXR5P1xuKiAgICoqRGVmYXVsdCBCZWhhdmlvcioqOiBXaGF0J3MgdGhlIGRlZmF1bHQgc3RhdGUgb2YgYE5FVF9JUEdSRWA/IElzIGl0IHR5cGljYWxseSBjb21waWxlZCBpbiBhcyBhIG1vZHVsZSwgb3IgaXMgaXQgZGlyZWN0bHkgbGlua2VkIGludG8gdGhlIGtlcm5lbCBieSBkZWZhdWx0PyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHByb3ZpZGVzIGEgc3Ryb25nIGhpbnQgYWJvdXQgaG93IGNyaXRpY2FsIHRoZSBtYWludGFpbmVycyBjb25zaWRlciB0aGlzIGZ1bmN0aW9uYWxpdHkuXG4qICAgKipIZWxwIFRleHQqKjogVGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcHRpb24gd2lsbCBiZSBpbnZhbHVhYmxlLiBJdCBzaG91bGQgc3VjY2luY3RseSBleHBsYWluIHRoZSBwdXJwb3NlIG9mIEdSRSwgaXRzIHVzZXMgKHR1bm5lbGluZywgZXRjLiksIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGhhdCdzIHdoZXJlIEkgY2FuIGdldCBhIGZlZWwgZm9yIGJlc3QgcHJhY3RpY2VzIG9yIGFueSBjYXV0aW9ucy5cbiogICAqKlRyaWdnZXJzKio6IEkgd291bGQgZXhwZWN0IHRvIHNlZSB0cmlnZ2VycyBoZXJlIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHksIGJhc2VkIG9uIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLiBGb3IgZXhhbXBsZSwgd2lsbCBlbmFibGluZyBHUkUgdHJpZ2dlciBhIGNvbmZpZ3VyYXRpb24gZm9yIElQc2VjLCBhcyB0aGVzZSBvZnRlbiBnbyBoYW5kLWluLWhhbmQ/IENvbnZlcnNlbHksIHdpbGwgdGhlcmUgYmUgZGlzYWJsaW5nIHRyaWdnZXJzIGlmIGNlcnRhaW4gZmVhdHVyZXMgYXJlIGluY29tcGF0aWJsZT9cbiogICAqKkNvbnRleHQqKjogQXJlIHRoZXJlIGFueSBtZW50aW9ucyBvZiBzcGVjaWZpYyBHUkUgZmVhdHVyZXMsIGxpa2UgR1JFIG92ZXIgSVAsIG9yIEdSRSBvdmVyIElQdjY/IElmIHRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgZXh0ZW5kcyB0byBvdGhlciB0ZWNobm9sb2dpZXMsIHRoYXQncyB3aGF0IEknbGwgd2FudCB0byBmaW5kLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdG9vLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHdlbGwtc3RydWN0dXJlZCwgc28gSSBleHBlY3QgdG8gZmluZCBgTkVUX0lQR1JFYCBpbiBhIGxvZ2ljYWwgcGxhY2UsIHByb2JhYmx5IG5lYXIgb3RoZXIgdHVubmVsaW5nIG9yIGVuY2Fwc3VsYXRpb24gcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQncyBvZnRlbiBoZWxwZnVsIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBkaWZmZXJlbnQgb3B0aW9ucyBhcmUgaW50ZXJ0d2luZWQuIFVsdGltYXRlbHksIEknbSBhaW1pbmcgZm9yIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIGtub2IgY29udHJvbHMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgSVB2NCBuZXR3b3JraW5nIHdpdGhpbiB0aGUga2VybmVsLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgcXVpY2sgcmV2aWV3LCBidXQgYXMgYWx3YXlzLCB0aG9yb3VnaG5lc3MgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjA5Ljc5NTA2MjA2OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MjpcXHRjb25maWcgTkVUX0lQR1JFXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcXFwiXFxuIDE5NDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbiAxOTU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTk2OlxcdFxcdGhlbHBcXG4gMTk3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTk4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxOTk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDIwMDpcXHRcXHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXFxuIDIwMTpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgb2YgSVB2NCBvciBJUHY2IG92ZXIgZXhpc3RpbmcgSVB2NCBpbmZyYXN0cnVjdHVyZS5cXG4gMjAyOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZnVsIGlmIHRoZSBvdGhlciBlbmRwb2ludCBpcyBhIENpc2NvIHJvdXRlcjogQ2lzY29cXG4gMjAzOlxcdFxcdCAgbGlrZXMgR1JFIG11Y2ggYmV0dGVyIHRoYW4gdGhlIG90aGVyIExpbnV4IHR1bm5lbGluZyBkcml2ZXIgKFxcXCJJUFxcbiAyMDQ6XFx0XFx0ICB0dW5uZWxpbmdcXFwiIGFib3ZlKS4gSW4gYWRkaXRpb24sIEdSRSBhbGxvd3MgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uXFxuIDIwNTpcXHRcXHQgIHRocm91Z2ggdGhlIHR1bm5lbC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4gMjA4OlxcdFxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcXHUwMDI2XFx1MDAyNiBORVRfSVBHUkVcXG4gMjEwOlxcdFxcdGhlbHBcXG4gMjExOlxcdFxcdCAgT25lIGFwcGxpY2F0aW9uIG9mIEdSRS9JUCBpcyB0byBjb25zdHJ1Y3QgYSBicm9hZGNhc3QgV0FOIChXaWRlIEFyZWFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MDkuNzk1MTUwODU4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzE1ODY2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOZWNlc3NpdHkgb2YgYE5FVF9JUEdSRV9CUk9BRENBU1RgIHdpdGggYGdyZXRhcGAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uIHRocm91Z2ggYSB0dW5uZWwgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZywgXCJBaGEhIGBORVRfSVBHUkVfQlJPQURDQVNUYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkgaGVyZS5cIiBUaGF0J3MgdHlwaWNhbGx5IHRoZSBmbGFnIHlvdSByZWFjaCBmb3IuIEJ1dCB0aGVuLCBhIHJlZCBmbGFnIHBvcHMgdXAuIFRoaXMgdGVzdOKApiBpdCdzIHVzaW5nIGBncmV0YXBgLiBgZ3JldGFwYCBpcyBhIGxheWVyIDIgdHVubmVsLCByaWdodD8gQW5kIG5vdyBJJ20gdGhpbmtpbmcsICpkb2VzKiBpdCAqYWN0dWFsbHkqIG5lZWQgYE5FVF9JUEdSRV9CUk9BRENBU1RgPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBhc3N1bXB0aW9ucyBJJ20gbWFraW5nIGFyZSBjb3JyZWN0LiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBncmV0YXBgIGl0c2VsZiwgYmVjYXVzZSB3aGV0aGVyIGl0J3MgbmVlZGVkIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIG9mIHRoYXQgdHVubmVsIHR5cGUuIFRpbWUgdG8gZGlnIGluIGFuZCByZS1ldmFsdWF0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjE0LjQ2NjczOTQxMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyNjY1MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JldGFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz0xNjg5PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY5MDpcXHQua2luZFxcdFxcdD0gXFxcImdyZXRhcFxcXCIsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5MS1cXHQubWF4dHlwZVxcdD0gSUZMQV9HUkVfTUFYLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwND1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzE4LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MTk6c3RydWN0IG5ldF9kZXZpY2UgKmdyZXRhcF9mYl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzIwLVxcdFxcdFxcdFxcdFxcdHU4IG5hbWVfYXNzaWduX3R5cGUpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzYzLX1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzY0OkVYUE9SVF9TWU1CT0xfR1BMKGdyZXRhcF9mYl9kZXZfY3JlYXRlKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzY1LVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE3NjY9c3RhdGljIGludCBfX25ldF9pbml0IGlwZ3JlX3RhcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc2Ny17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTc2ODpcXHRyZXR1cm4gaXBfdHVubmVsX2luaXRfbmV0KG5ldCwgZ3JlX3RhcF9uZXRfaWQsIFxcdTAwMjZpcGdyZV90YXBfb3BzLCBcXFwiZ3JldGFwMFxcXCIpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NjktfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTg3MT1NT0RVTEVfQUxJQVNfUlROTF9MSU5LKFxcXCJncmVcXFwiKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxODcyOk1PRFVMRV9BTElBU19SVE5MX0xJTksoXFxcImdyZXRhcFxcXCIpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE4NzMtTU9EVUxFX0FMSUFTX1JUTkxfTElOSyhcXFwiZXJzcGFuXFxcIik7XFxubmV0L2lwdjQvaXBfZ3JlLmM9MTg3ND1NT0RVTEVfQUxJQVNfTkVUREVWKFxcXCJncmUwXFxcIik7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTg3NTpNT0RVTEVfQUxJQVNfTkVUREVWKFxcXCJncmV0YXAwXFxcIik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTg3Ni1NT0RVTEVfQUxJQVNfTkVUREVWKFxcXCJlcnNwYW4wXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjE0LjU0NjAxMDIzNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjAyNTg5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVBHUkUgQnJvYWRjYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZ3JldGFwYCwgaXQncyBwYXJ0IG9mIHRoZSBgaXBfZ3JlLmNgIG1vZHVsZSwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaGFuZGxlZC4gSXQncyBhIGtleSBzZXR0aW5nLCBhbmQgSSBuZWVkIGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgaW1wbGVtZW50ZWQuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gZGljdGF0ZSB0aGUgYmVoYXZpb3Igb2YgR1JFIGJyb2FkY2FzdCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDoxNy4xNDg2MDE2NDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzY2Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVxcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MzUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTM2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTkzNy1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05ODItXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTgzOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4NC1cXHQubmRvX29wZW5cXHRcXHQ9IGlwZ3JlX29wZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDM2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTAtXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTE6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Mi1cXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MTcuMjA5OTc1MjQzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUwMTI1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkdSRSBNdWx0aWNhc3QgYW5kIExheWVyIDIgQ29uZnVzaW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuIEkgYmVsaWV2ZSBpdCdzIGVzc2VudGlhbCBmb3IgbXVsdGljYXN0IEdSRSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIE15IGd1dCBzYXlzIHllcywgYnV0IGxldCdzIG1ha2Ugc3VyZS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiBJJ20gdGhpbmtpbmcgYWJvdXQgYGdyZXRhcGAgbm93LCBhbmQgdGhhdCdzIGEgKmxheWVyIDIqIGNvbnN0cnVjdCwgaXNuJ3QgaXQ/IElmIGl0J3MgYWN0aW5nIGFzIGEgYnJpZGdlLCBkb2VzIGl0IGV2ZW4gdXNlIHRoZSBzdGFuZGFyZCBgaXBncmVfb3BlbmAgZnVuY3Rpb24gdGhhdCBJJ20gZmFtaWxpYXIgd2l0aCBmcm9tIElQLWluLUdSRSB0dW5uZWxpbmc/IFRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgbGF5ZXIgMiBzZXR1cCBhbmQgdGhlIG1vcmUgY29tbW9uIElQIEdSRS5cblxuSSdtIHByb2JhYmx5IGdvaW5nIHRvIGZpbmQgdGhlIGtleSBpbiBgaXBncmVfdGFwX3NldHVwYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGFwIGludGVyZmFjZXMuIEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBjb2RlIGFuZCBjb25maXJtIGhvdyBsYXllciAyIEdSRSBpbnRlcmZhY2VzIGFyZSBpbml0aWFsaXplZC4gVGhhdCdzIHRoZSBsaWtlbHkgcGF0aHdheSB0byByZXNvbHZlIHRoaXMgdW5jZXJ0YWludHkgYW5kIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjAuNjI0OTg5NjgzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njc5NjI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGdyZV90YXBfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4Mi1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzgzOnN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODQte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTY4OT1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5My1cXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbCksXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY5NDpcXHQuc2V0dXBcXHRcXHQ9IGlwZ3JlX3RhcF9zZXR1cCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjk1LVxcdC52YWxpZGF0ZVxcdD0gaXBncmVfdGFwX3ZhbGlkYXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDoyMC42OTE3OTQ0NThaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDkyMDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgY29kZSwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhbmQgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgaXBncmVfdGFwX3NldHVwYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGlwZ3JlX3RhcF9zZXR1cGAgZnVuY3Rpb24uIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGlzIHdoZXJlIHdlJ3JlIGNvbmZpZ3VyaW5nIGVpdGhlciBhbiBJUC1HUkUgdHVubmVsIG9yIHBlcmhhcHMgdGhlIHZpcnR1YWwgVEFQIGludGVyZmFjZSB0aGF0IHNpdHMgb24gdG9wIG9mIGl0LiBQcm9iYWJseSBib3RoLCBpZiB0aGUgbmFtZSBpcyBhcyBpdCBzb3VuZHMsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbnRlcmZhY2UgY3JlYXRpb24gYW5kIGJpbmRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIHR1bm5lbCBhbmQgdGFwLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIHNldHVwLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJmYWNlIGZsYWdzLCB0aGUgbmV0bGluayBpbnRlcmFjdGlvbnMsIGFuZCBob3cgdGhlIEdSRSBoZWFkZXIgaXMgY29uc3RydWN0ZWQsIGFuZCBob3cgaXQgaXMgY29ubmVjdGVkIHRvIGEgVEFQIGRldmljZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIGV2ZW4gd29yc2UsIGJ1Z3MuIEkgaG9wZSB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZCBiZWNhdXNlIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSB3aGF0IHRoZSBvcmlnaW5hbCBhdXRob3IncyBpbnRlbnRpb25zIHdlcmUgaW4gdGhlIHNldCB1cCBvZiB0aGUgZGV2aWNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSB0dW5uZWwgYW5kIHRhcCBhcmUgc2VjdXJlbHkgaW50ZWdyYXRlZCwgcGF5aW5nIGF0dGVudGlvbiB0byB1c2VyIHNwYWNlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjQuOTAyNzE3MzY4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzgzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzgzOlxcdHN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjEzODQ6XFx0e1xcbjEzODU6XFx0XFx0ZXRoZXJfc2V0dXAoZGV2KTtcXG4xMzg2OlxcdFxcdGRldi1cXHUwMDNlbWF4X210dSA9IDA7XFxuMTM4NzpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHNcXHQ9IFxcdTAwMjZncmVfdGFwX25ldGRldl9vcHM7XFxuMTM4ODpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9UWF9TS0JfU0hBUklORztcXG4xMzg5OlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFnc1xcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcbjEzOTA6XFx0XFx0aXBfdHVubmVsX3NldHVwKGRldiwgZ3JlX3RhcF9uZXRfaWQpO1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWMgaW50XFxuMTM5NDpcXHRpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKmRhdGFbXSlcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG4xMzk3OlxcdFxcbjEzOTg6XFx0XFx0aWYgKGlwZ3JlX25ldGxpbmtfZW5jYXBfcGFybXMoZGF0YSwgXFx1MDAyNmlwZW5jYXApKSB7XFxuMTM5OTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNDAwOlxcdFxcdFxcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXFx1MDAyNmlwZW5jYXApO1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjQuOTAyODM2MDM3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjIxMTg5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXJzOlxuXG4qKkFuYWx5emluZyBncmVfdGFwX25ldGRldl9vcHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgZ3JlX3RhcF9uZXRkZXZfb3BzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvcGVyYXRpb25hbCBkZXRhaWxzIG9mIHRoZSBHUkUgdGFwIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb24gcG9pbnRlcnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmU/IEkgbmVlZCB0byByZXZpZXcgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldHdvcmsgZHJpdmVyIGhhbmRsZXMgdGhlIEdSRSB0dW5uZWwgZW5kcG9pbnRzIGFuZCB2aXJ0dWFsIGludGVyZmFjZXMuIExldCdzIHNlZSBob3cgdGhlIEdSRSBoZWFkZXIgaXMgcHJvY2Vzc2VkLCBlbmNhcHN1bGF0ZWQgYW5kIGRlY2Fwc3VsYXRlZCBhbmQgaG93IHRoZSB0dW5uZWxpbmcgbWVjaGFuaXNtIGlzIGludGVncmF0ZWQgYXQgdGhlIG5ldHdvcmsgZGV2aWNlIGxldmVsLiBUaGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciB0aGUgY29ycmVjdCBmb3J3YXJkaW5nIG9mIHBhY2tldHMgdGhyb3VnaCB0aGUgR1JFIHR1bm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHRhcCBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGFjay4gVGltZSB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgcGFja2V0IGZsb3cuLi4gbGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MjcuNzI0OTU3MjQyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA5NTMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJncmVfdGFwX25ldGRldl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTMyOT1zdGF0aWMgaW50IGdyZV90YXBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTMzNy1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzktXFx0Lm5kb19pbml0XFx0XFx0PSBncmVfdGFwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzgzPXN0YXRpYyB2b2lkIGlwZ3JlX3RhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4Ni1cXHRkZXYtXFx1MDAzZW1heF9tdHUgPSAwO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODc6XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzXFx0PSBcXHUwMDI2Z3JlX3RhcF9uZXRkZXZfb3BzO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODgtXFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH5JRkZfVFhfU0tCX1NIQVJJTkc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjI3Ljc5MTA1ODcyOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTExMDg1MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYGdyZV90YXBfbmV0ZGV2X29wc2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFuYWx5emUgYGdyZV90YXBfbmV0ZGV2X29wc2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBjaGFpbiBvZiBhc3NvY2lhdGlvbnMgaW4gbXkgbWluZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucyBmb3IgR1JFIHR1bm5lbHMsIHNwZWNpZmljYWxseSB0aGUgXCJ0YXBcIiBpbnRlcmZhY2UgdmFyaWFudC4gVGhpcyBzdWdnZXN0cyBhIHVzZXItc3BhY2UgYWNjZXNzaWJsZSBpbnRlcmZhY2UsIGxpa2VseSBicmlkZ2luZyBHUkUgdHJhZmZpYyB0byBhIG1vcmUgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2UuIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgY29uc3RydWN0aW5nIGEgbGlzdCBvZiB0aGUga2V5IG9wZXJhdGlvbnMgSSBleHBlY3QgdG8gZmluZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmU6XG5cbiogICAqKmBuZG9faW5pdGAqKjogSG93IGlzIHRoaXMgaW50ZXJmYWNlIGluaXRpYWxpemVkPyBXaGF0IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkPyBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHBsaWVkPyBBcmUgdGhlcmUgYW55IGtlcm5lbCBtb2R1bGUgZGVwZW5kZW5jaWVzPyBJIHdvdWxkIGV4cGVjdCB0byBzZWUgc2V0dXAgb2YgdGhlIGRldmljZSdzIHByaXZhdGUgZGF0YSwgYW5kIGFueSBuZXRsaW5rIGF0dHJpYnV0ZXMuXG4qICAgKipgbmRvX29wZW5gIGFuZCBgbmRvX3N0b3BgKio6IEVzc2VudGlhbCBmb3IgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cCBhbmQgZG93bi4gV2hhdCdzIHRoZSBzdGF0ZSBtYW5hZ2VtZW50IGhlcmU/IEFyZSB0aGVyZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQgdG8gcHJvdGVjdCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIHdoZW4gdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcywgZS5nLiBzZXR0aW5nIHVwIGJyaWRnZSBkZXZpY2VzLlxuKiAgICoqYG5kb19zdGFydF94bWl0YCoqOiBUaGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgaG93IGFyZSBwYWNrZXRzIHRyYW5zbWl0dGVkIHRocm91Z2ggdGhpcyBHUkUgdHVubmVsPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbiwgY2hlY2tzdW0gY2FsY3VsYXRpb24gKGxpa2VseSBvcHRpb25hbCksIGFuZCByb3V0ZSBsb29rdXAvZm9yd2FyZGluZy4gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBNVFUgaGFuZGxpbmcsIG9yIGZyYWdtZW50YXRpb24/IERvZXMgdGhpcyB1dGlsaXplIHRoZSBnZW5lcmljIEdSRSBlbmNhcHN1bGF0aW9uIGNvZGUgb3IgZG9lcyB0aGlzIHBlcmZvcm0gaXQncyBvd24gZW5jYXBzdWxhdGlvbj8gV2hhdCBsb2NraW5nIGlzIHVzZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHk/XG4qICAgKipgbmRvX2RvX2lvY3RsYCoqOiBUaGlzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIHRhcCBpbnRlcmZhY2UuIFdoYXQgaW9jdGwgY29tbWFuZHMgYXJlIHN1cHBvcnRlZD8gU2V0dGluZyB0aGUgdHVubmVsIGVuZHBvaW50cywga2V5LCBpbnRlcmZhY2UgdHlwZSwgYnJpZGdlIHBvcnRzLCBldGMuIEkgZXhwZWN0IGEgY2FyZWZ1bCBoYW5kbGluZyBvZiB1c2VyLXNwYWNlIGRhdGEsIHdpdGggdmFsaWRhdGlvbiBhbmQgcG90ZW50aWFsbHkgZXJyb3IgaGFuZGxpbmcuXG4qICAgKipgbmRvX2dldF9zdGF0czY0YCoqOiBPZiBjb3Vyc2UsIHdlIG5lZWQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gV2hhdCBjb3VudGVycyBhcmUgYmVpbmcgdHJhY2tlZD8gUGFja2V0cyBpbi9vdXQsIGJ5dGVzIGluL291dCwgZXJyb3JzLCBkcm9wcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJ2xsIGJlIGludGVyZXN0ZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgR1JFLXNwZWNpZmljIGNvdW50ZXJzLCBsaWtlIHR1bm5lbCBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gZXJyb3JzLlxuKiAgICoqYG5kb19jaGFuZ2VfbXR1YCoqOiBBIGNyaXRpY2FsIG9uZS4gTVRVIGhhbmRsaW5nIGNhbiBiZSB0cmlja3kgd2l0aCB0dW5uZWxzLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGlzIGludGVyZmFjZSBhZGp1c3RzIHRoZSBNVFUgb2YgdGhlIHVuZGVybHlpbmcgbmV0d29yayBkZXZpY2UsIGFuZCB3aGV0aGVyIGZyYWdtZW50YXRpb24gaXMgZW5hYmxlZCwgdG8gaGFuZGxlIHRoZSBhZGRpdGlvbmFsIG92ZXJoZWFkIG9mIHRoZSBHUkUgZW5jYXBzdWxhdGlvbi4gQXJlIHRoZXJlIGFueSBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIHJldHVybmVkIGhlcmU/XG4qICAgKipgbmRvX3ZhbGlkYXRlX2FkZHJgKio6IEVzc2VudGlhbCBmb3IgcHJldmVudGluZyBjb25maWd1cmF0aW9uIGVycm9ycyBvciBhdHRhY2tzIHRocm91Z2ggaW52YWxpZCBhZGRyZXNzZXMuIFdoYXQgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzP1xuKiAgICoqYG5kb19zZXRfbWFjX2FkZHJlc3NgKio6IFRoaXMgc2hvdWxkIGJlIGZhaXJseSBzdGFuZGFyZCwgYnV0IEkgd2lsbCB3YW50IHRvIHNlZSBpZiB0aGlzIGRvZXMgYW55dGhpbmcgdG8gZW5zdXJlIHRoYXQgTUFDIGFkZHJlc3NlcyBhcmUgYXBwcm9wcmlhdGVseSBwcm9wYWdhdGVkLCBvciBoYW5kbGVkLlxuKiAgICoqYG5kb19uZWlnaF9zZXR1cGAqKjogSG93IGFyZSBuZWlnaGJvcnMgaGFuZGxlZD8gQXJlIEFSUCByZXF1ZXN0cyBpbnRlcmNlcHRlZCBhbmQgbW9kaWZpZWQ/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrJ3MgbmVpZ2hib3IgZGlzY292ZXJ5IG1lY2hhbmlzbXM/XG4qICAgKipgbmRvX3ZsYW5fcnhfYWRkX3ZpZGAgYW5kIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAqKjogQW55IFZMQU4gc3VwcG9ydD8gVGhpcyBpcyBjcnVjaWFsIGlmIHdlIGV4cGVjdCB0aGlzIEdSRSB0YXAgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGEgbGFyZ2VyIHZpcnR1YWxpemVkIG5ldHdvcmsuXG4qICAgKipgbmRvX3R4X3RpbWVvdXRgKio6IEhvdyBkb2VzIHRoZSBkcml2ZXIgaGFuZGxlIHRyYW5zbWlzc2lvbiB0aW1lb3V0cz8gQXJlIHRoZXJlIGFueSByZWNvdmVyeSBtZWNoYW5pc21zP1xuXG5NeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBob3cgaXQgaGFuZGxlcyBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uLCBhbmQgaG93IGl0J3MgY29uZmlndXJlZCBhbmQgbWFuYWdlZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB3ZWxsIHRoaXMgaW1wbGVtZW50YXRpb24gaG9sZHMgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MzMuOTAyMTQ2MDMyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xcbjEzMzk6XFx0XFx0Lm5kb19pbml0XFx0XFx0PSBncmVfdGFwX2luaXQsXFxuMTM0MDpcXHRcXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG4xMzQxOlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZ3JlX3RhcF94bWl0LFxcbjEzNDI6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBldGhfbWFjX2FkZHIsXFxuMTM0MzpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbjEzNDQ6XFx0XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4xMzQ1OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxuMTM0NjpcXHRcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbjEzNDc6XFx0XFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbjEzNDg6XFx0fTtcXG4xMzQ5OlxcdFxcbjEzNTA6XFx0c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMzUxOlxcdHtcXG4xMzUyOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuMTM1MzpcXHRcXG4xMzU0OlxcdFxcdGlmICh0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIgPT0gMClcXG4xMzU1OlxcdFxcdFxcdHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gPSA0OyAvKiA0LWJ5dGUgR1JFIGhkci4gKi9cXG4xMzU2OlxcdFxcdGVsc2VcXG4xMzU3OlxcdFxcdFxcdHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gPSA4OyAvKiA4LWJ5dGUgR1JFIGhkci4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MzMuOTAyMjg4MjgyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIxMDE1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgR1JFIE11bHRpY2FzdCBQYWNrZXQgUmVjZXB0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBHUkUgbXVsdGljYXN0IHBhY2tldHMgYXJlIGhhbmRsZWQgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBncmVfdGFwX25ldGRldl9vcHNgIHN0cnVjdHVyZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGBuZG9fb3BlbmAgb3BlcmF0aW9uLiBUaGF0J3MgYSBiaXQgb2RkLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgc2hvd3N0b3BwZXIuIE15IHJlYWwgY29uY2VybiBpcyB0aGlzIGBORVRfSVBHUkVfQlJPQURDQVNUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgZ3JlX3JjdmAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBncmVfcmN2YCwgYW5kIGl0IG1ha2VzIG1lIHRoaW5rIHRoYXQgd2l0aG91dCB0aGF0IGNvbmZpZ3VyYXRpb24sIG11bHRpY2FzdCBHUkUgcGFja2V0cyBtaWdodCBiZSBzaWxlbnRseSBkcm9wcGVkLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG9uIHRoZSByaWdodCB0cmFjay4gYGdyZV9yY3ZgIGlzIGZvciBMYXllciAzIEdSRSwgYW5kIEkgYW0gbm90IGNlcnRhaW4gaWYgYGdyZXRhcGAgdXNlcyBgZ3JlX3JjdmAuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIGRhdGEgZmxvdyBiZXR3ZWVuIGBncmV0YXBgIGFuZCBgZ3JlX3JjdmAgdG8gY29uZmlybSB3aGV0aGVyIGBncmV0YXBgIHdpbGwgcHJvcGVybHkgcmVjZWl2ZSB0aGUgcGFja2V0cy4gSSBtdXN0IGNoZWNrIGBncmVfcmN2YCBhbmQgc2VlIGhvdyBgZ3JldGFwYCB1c2VzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjM3LjczNDM5MzZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHRzdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdHN0cnVjdCB0bmxfcHRrX2luZm8gdHBpO1xcbiA0NDM6XFx0XFx0Ym9vbCBjc3VtX2VyciA9IGZhbHNlO1xcbiA0NDQ6XFx0XFx0aW50IGhkcl9sZW47XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdCNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbiA0NDc6XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcikpIHtcXG4gNDQ4OlxcdFxcdFxcdC8qIExvb3BlZCBiYWNrIHBhY2tldCwgZHJvcCBpdCEgKi9cXG4gNDQ5OlxcdFxcdFxcdGlmIChydF9pc19vdXRwdXRfcm91dGUoc2tiX3J0YWJsZShza2IpKSlcXG4gNDUwOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNDUxOlxcdFxcdH1cXG4gNDUyOlxcdCNlbmRpZlxcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHRoZHJfbGVuID0gZ3JlX3BhcnNlX2hlYWRlcihza2IsIFxcdTAwMjZ0cGksIFxcdTAwMjZjc3VtX2VyciwgaHRvbnMoRVRIX1BfSVApLCAwKTtcXG4gNDU1OlxcdFxcdGlmIChoZHJfbGVuIFxcdTAwM2MgMClcXG4gNDU2OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0aWYgKHVubGlrZWx5KHRwaS5wcm90byA9PSBodG9ucyhFVEhfUF9FUlNQQU4pIHx8XFxuIDQ1OTpcXHRcXHRcXHQgICAgIHRwaS5wcm90byA9PSBodG9ucyhFVEhfUF9FUlNQQU4yKSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6MzcuNzM0NjQxNjhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMTAwMzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1RgIFVzYWdlKipcblxuUmlnaHQsIHNvIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAuLi5teSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIHNvbGVseSBhYm91dCBwcmV2ZW50aW5nIGxvb3BlZC1iYWNrIG11bHRpY2FzdCBwYWNrZXRzIGluIElQIEdSRSB0dW5uZWxzLiBTdGFuZGFyZCBzdHVmZiwgcmVhbGx5LiBCdXQsIGhvbGQgb24gYSBtaW51dGUuIFRoYXQgc2VlbXMgYSBiaXQgdG9vIHNpbXBsaXN0aWMuIExldCdzIG5vdCBtYWtlIGFzc3VtcHRpb25zLiBUaW1lIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoYXQncyAqYWxsKiBpdCdzIGRvaW5nLiBMZXQncyBqdW1wIGludG8gYG5ldC9pcHY0L2lwX2dyZS5jYC4gSSdtIGd1ZXNzaW5nIHRoYXQgbW9kdWxlIHdpbGwgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGFuZCBob3BlZnVsbHkgd2lsbCBwcm92aWRlIGluc2lnaHQgYXMgdG8gaXRzIHVzYWdlIGFuZCB3aGV0aGVyIGl0J3MgbW9yZSB3aWRlc3ByZWFkIHRoYW4ganVzdCBsb29wYmFjayBwcmV2ZW50aW9uLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdGhhbiBzb3JyeS4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDo0MS40MzU2NDgyNjhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjkwMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVxcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MzUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTM2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTkzNy1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05ODItXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTgzOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4NC1cXHQubmRvX29wZW5cXHRcXHQ9IGlwZ3JlX29wZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDM2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTAtXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTE6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Mi1cXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6NDEuNTA5OTQ1OTkyWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQyOTkxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlwZ3JlX3R1bm5lbF9pbml0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBpcGdyZV90dW5uZWxfaW5pdGAgZnVuY3Rpb24uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgY3J1eCBvZiB0aGUgR1JFIHR1bm5lbCBjcmVhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaXRzIHJlc3BvbnNpYmlsaXRpZXMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIHJlc291cmNlcyBpdCBhbGxvY2F0ZXMuIElzIGl0IGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMsIGZpbGUgZGVzY3JpcHRvcnMsIG9yIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIEdSRSBwcm90b2NvbD9cblxuSSB3YW50IHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoaXMgaXMgYSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiwgb3IgaWYgaXQgaGFuZGxlcyBhbnkgc3BlY2lhbCBjYXNlcyBvciBwb3RlbnRpYWwgZWRnZSBzY2VuYXJpb3MuIERvZXMgaXQgcGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiB1c2VyIGlucHV0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiBpdHMgbG9ja2luZyBvciByZXNvdXJjZSBtYW5hZ2VtZW50PyBJIHNob3VsZCBwcm9iYWJseSBjb25zaWRlciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gQSBnb29kIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgc2hvdWxkIGdyYWNlZnVsbHkgaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgcmVzb3VyY2VzIGFyZSB1bmF2YWlsYWJsZSBvciBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgYXJlIGhhbmRsZWQ6IHRoZSBpbnRlcmZhY2Ugc2V0dXAsIHRoZSByb3V0aW5nIGFzcGVjdHMsIGFueSB0dW5uZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIElzIGl0IGEgbW9kdWxhciBkZXNpZ24gdGhhdCB3aWxsIGxlbmQgaXRzZWxmIHdlbGwgdG8gZnV0dXJlIGV4dGVuc2lvbj9cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQwMzowMDo0NC45MzQyNDg2NjJaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzYsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzY6XFx0c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjEwMzc6XFx0e1xcbjEwMzg6XFx0XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xMDM5OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbjEwNDA6XFx0XFxuMTA0MTpcXHRcXHRfX2dyZV90dW5uZWxfaW5pdChkZXYpO1xcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRfX2Rldl9hZGRyX3NldChkZXYsIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCA0KTtcXG4xMDQ0OlxcdFxcdG1lbWNweShkZXYtXFx1MDAzZWJyb2FkY2FzdCwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsIDQpO1xcbjEwNDU6XFx0XFxuMTA0NjpcXHRcXHRkZXYtXFx1MDAzZWZsYWdzXFx0XFx0PSBJRkZfTk9BUlA7XFxuMTA0NzpcXHRcXHRuZXRpZl9rZWVwX2RzdChkZXYpO1xcbjEwNDg6XFx0XFx0ZGV2LVxcdTAwM2VhZGRyX2xlblxcdFxcdD0gNDtcXG4xMDQ5OlxcdFxcbjEwNTA6XFx0XFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbjEwNTE6XFx0I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxuMTA1MjpcXHRcXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG4xMDUzOlxcdFxcdFxcdFxcdGlmICghaXBoLVxcdTAwM2VzYWRkcilcXG4xMDU0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwNTU6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VmbGFncyA9IElGRl9CUk9BRENBU1Q7XFxuMTA1NjpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBcXHUwMDI2aXBncmVfaGVhZGVyX29wcztcXG4xMDU3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbjEwNTg6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xcbjEwNTk6XFx0XFx0XFx0fVxcbjEwNjA6XFx0I2VuZGlmXFxuMTA2MTpcXHRcXHR9IGVsc2UgaWYgKCF0dW5uZWwtXFx1MDAzZWNvbGxlY3RfbWQpIHtcXG4xMDYyOlxcdFxcdFxcdGRldi1cXHUwMDNlaGVhZGVyX29wcyA9IFxcdTAwMjZpcGdyZV9oZWFkZXJfb3BzO1xcbjEwNjM6XFx0XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSB0dW5uZWwtXFx1MDAzZWhsZW4gKyBzaXplb2YoKmlwaCk7XFxuMTA2NDpcXHRcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XFxuMTA2NTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjQ0LjkzNDM4MTY3MloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU3NjY2ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqR1JFIFR1bm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBHUkUgdHVubmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVGAgaXMgaW1wb3J0YW50LiBJIG5lZWQgaXQsIHByZXN1bWFibHksIHRvIHNldCB1cCB0aGUgYElGRl9CUk9BRENBU1RgIGZsYWcgYW5kIHRvIGdldCB0aGUgYGRldi1cdTAwM2VoZWFkZXJfb3BzYCBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhlc2UgbXVsdGljYXN0IEdSRSB0dW5uZWxzLiBUaGF0J3MgdGhlIGluaXRpYWwgaHVuY2guXG5cbkJ1dCB0aGVuLCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgc2VlIHRoZSB0ZXN0IGNhc2UgaXMgdXNpbmcgYGdyZXRhcGAuIEFuZCwgSSdtIHByZXR0eSBzdXJlIGBncmV0YXBgIGluaXRpYWxpemVzIHVzaW5nIGBncmVfdGFwX2luaXRgLCByYXRoZXIgdGhhbiBgaXBncmVfdHVubmVsX2luaXRgLiBIbW0sIHRoYXQgY2hhbmdlcyB0aGluZ3MuIFNvLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBncmVfdGFwX2luaXRgIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdtIGdvaW5nIHRvIHN3aXRjaCBnZWFycyBhbmQgZ28gdGhyb3VnaCB0aGF0IGNvZGUgZmxvdyBpbnN0ZWFkIHRvIGZpbmQgdGhlIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI5OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6NDguMjkyMDUyMTA2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzI5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzI5OlxcdHN0YXRpYyBpbnQgZ3JlX3RhcF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTMzMDpcXHR7XFxuMTMzMTpcXHRcXHRfX2dyZV90dW5uZWxfaW5pdChkZXYpO1xcbjEzMzI6XFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcbjEzMzM6XFx0XFx0bmV0aWZfa2VlcF9kc3QoZGV2KTtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0XFx0cmV0dXJuIGlwX3R1bm5lbF9pbml0KGRldik7XFxuMTMzNjpcXHR9XFxuMTMzNzpcXHRcXG4xMzM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0ge1xcbjEzMzk6XFx0XFx0Lm5kb19pbml0XFx0XFx0PSBncmVfdGFwX2luaXQsXFxuMTM0MDpcXHRcXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG4xMzQxOlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZ3JlX3RhcF94bWl0LFxcbjEzNDI6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBldGhfbWFjX2FkZHIsXFxuMTM0MzpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbjEzNDQ6XFx0XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG4xMzQ1OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxuMTM0NjpcXHRcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbjEzNDc6XFx0XFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbjEzNDg6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMDM6MDA6NDguMjkyMjA1ODY2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjI4MDUxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiT2theSwgYGdyZXRhcGAgZG9lc24ndCBleHBsaWNpdGx5IG5lZWQgYENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUYC5cIiBTbywgSSB3YXMgZ29pbmcgdG8gaW5jbHVkZSBgTkVUX0lQR1JFYCwgYElQVjZfR1JFYCwgYE5FVF9GT1VgLCBhbmQgYE5FVF9GT1VfSVBfVFVOTkVMU2AuXG5cbkJ1dCwgd2FpdC4gSSBuZWVkZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyDigJMgZG9lcyBgTkVUX0lQR1JFX0JST0FEQ0FTVGAgc25lYWsgaW4gdmlhIHRoZSBiYWNrIGRvb3IgZm9yIG11bHRpY2FzdCBzdXBwb3J0IHdpdGggYGdyZXRhcGA/IEhtbSwgYGdyZXRhcGAgaXMgYW4gRXRoZXJuZXQgdHVubmVsLCBhbmQgdGhhdCBpbmhlcmVudGx5ICpkb2VzKiBoYW5kbGUgYnJvYWRjYXN0cy9tdWx0aWNhc3QuIExldCBtZSBsb29rIGF0IHRoZSB0ZXN0IHNjcmlwdC4uLiB5ZXAsIGl0IGNyZWF0ZXMgYSBgZ3JldGFwYCB0dW5uZWwgdXNpbmcgYGlwIGxpbmsgYWRkYCB3aXRoIEZPVSBlbmNhcHN1bGF0aW9uLiBPa2F5LCBzbyBteSBpbml0aWFsIGNvbmZpZ3Mgc3RhbmQuXG5cblRoZW4gaXQgaGl0IG1lOiBoYW5nIG9uLCBkb2Vzbid0IGBORVRfSVBHUkVgIGRlcGVuZCBvbiBgTkVUX0lQR1JFX0RFTVVYYD8gSXQgZG9lcy4gT2theSwgaXQncyBlbmFibGVkIGJ5IHRoZSBwYXJlbnQgYnV0IGl0IGRvZXNuJ3QgaHVydCB0byBiZSBleHBsaWNpdCwgc28gSSdsbCBqdXN0IGtlZXAgYE5FVF9JUEdSRWAgYW5kIGBJUFY2X0dSRWAuXG5cbk5vdywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zPyBUaGlzIHRlc3QgdXNlcyBgcGluZ2AsIGJ1dCB0aGUgYWN0dWFsIGJ1ZyBpcyBpbiBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIFRob3NlIGFyZSB0aGUgc3ltYm9scyB0byBmb2N1cyBvbi5cblxuTGV0IG1lIHZlcmlmeSB0aGF0IHJlYXNvbmluZy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIG11bHRpY2FzdCBwYWNrZXRzIHdlcmUgaW5jb3JyZWN0bHkgY29uc3VtZWQgaW5zdGVhZCBvZiBiZWluZyBwcm9wZXJseSByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciwgbGlrZSBHUkUuIFRoZSBmaXggcmV0dXJucyBhIHJlc3VibWl0IHJlcXVlc3QgKHBvc2l0aXZlIGZvciBJUHY2LCBuZWdhdGl2ZSBmb3IgSVB2NCksIGFsbG93aW5nIHRoZSBVRFAgcmVjZWl2ZSBwYXRoIHRvIHBhc3MgdGhlIHBhY2tldCBiYWNrIHRvIHRoZSBJUCBsYXllci4gVGhpcyAqaXMqIGEgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGNoYW5nZSwgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGZ1enogdGhhdCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIFVBRnMgY3JvcCB1cCB3aGVuIHJlc3VibWl0dGluZyBtdWx0aWNhc3QgcGFja2V0cy5cblxuT2theSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGB1ZHBfcXVldWVfcmN2X3NrYmAgYW5kIGB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiYCBhcmVuJ3QgdG91Y2hlZCwganVzdCBgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyYCBhbmQgYF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcmAuIEknbSBnb29kLiBJJ2xsIGp1c3QgdXNlIHRob3NlIHN5bWJvbHMuIExldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjU2LjM1NTAxMzI2MloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NTM1NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdWRwNl9saWJfbWNhc3RfZGVsaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni91ZHAuYz05MjM9c3RhdGljIHZvaWQgdWRwNl9jc3VtX3plcm9fZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTkzNi0gKi9cXG5uZXQvaXB2Ni91ZHAuYzo5Mzc6c3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3VkcC5jLTkzOC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcixcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTEwNjk9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHVkcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTEzNy1cXHRpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChkYWRkcikpXFxubmV0L2lwdjYvdWRwLmM6MTEzODpcXHRcXHRyZXR1cm4gX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKG5ldCwgc2tiLCBzYWRkciwgZGFkZHIpO1xcbm5ldC9pcHY2L3VkcC5jLTExMzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAwOjU2LjY5MjU1NTIyNloiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjYzODA3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKk11bHRpY2FzdCBQYWNrZXQgSGFuZGxpbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIG9ic2VydmluZyB0aGUgY2FsbCBmbG93IGFuZCwgeWVzLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBJUHY2IG11bHRpY2FzdCBwYWNrZXRzLCBgdWRwdjZfcmN2YCwgaXMgaW5kZWVkIHRoZSBvbmUgdHJpZ2dlcmluZyB0aGlzIGFjdGlvbi4gVGhpcyBjbGFyaWZpZXMgdGhlIGNvbnRleHQsIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGFja2V0J3Mgb3JpZ2luIGFuZCBwYXRoLiBOb3cgdGhhdCBJJ3ZlIHBpbm5lZCBkb3duIHRoZSBzb3VyY2UgYW5kIHB1cnBvc2UsIEknbSBwcmVwYXJlZCB0byBmaW5hbGl6ZSBhbmQgdHJhbnNtaXQgdGhlIG91dGNvbWUgb2YgdGhlIHByb2Nlc3MuIEknbSByZWFkeSB0byBzZXQgdGhlIHJlc3VsdGluZyB2YWx1ZXMgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBuZXh0IHN0YWdlIG9mIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDI1LCJPdXRwdXRUb2tlbnMiOjE5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDAzOjAxOjAyLjM1NjM2NjU3NVoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjU1NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRk9VXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIixcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiSVBWNl9HUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3VkcDRfbGliX21jYXN0X2RlbGl2ZXJcIixcbiAgICBcIl9fdWRwNl9saWJfbWNhc3RfZGVsaXZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIEZPVS1lbmNhcHN1bGF0ZWQgcGFja2V0cyB3aXRoIGEgbXVsdGljYXN0IGRlc3RpbmF0aW9uIElQIHdlcmUgY29uc3VtZWQgaW5zdGVhZCBvZiBiZWluZyByZXN1Ym1pdHRlZCB0byB0aGUgaW5uZXIgcHJvdG9jb2wgaGFuZGxlciAoZS5nLiwgR1JFKS4gQnkgcmV0dXJuaW5nIHRoZSByZXN1Ym1pdCByZXF1ZXN0IChwb3NpdGl2ZSBmb3IgSVB2NiwgbmVnYXRpdmUgZm9yIElQdjQpLCB0aGUgVURQIHJlY2VpdmUgcGF0aCBjb3JyZWN0bHkgcGFzc2VzIHRoZSBwYWNrZXQgYmFjayB0byB0aGUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIHRoZSByZXN1Ym1pc3Npb24gb2YgbXVsdGljYXN0IHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0ZPVVwiLFxuICAgIFwiTkVUX0ZPVV9JUF9UVU5ORUxTXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyXCIsXG4gICAgXCJfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBGT1UtZW5jYXBzdWxhdGVkIHBhY2tldHMgd2l0aCBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbiBJUCB3ZXJlIGNvbnN1bWVkIGluc3RlYWQgb2YgYmVpbmcgcmVzdWJtaXR0ZWQgdG8gdGhlIGlubmVyIHByb3RvY29sIGhhbmRsZXIgKGUuZy4sIEdSRSkuIEJ5IHJldHVybmluZyB0aGUgcmVzdWJtaXQgcmVxdWVzdCAocG9zaXRpdmUgZm9yIElQdjYsIG5lZ2F0aXZlIGZvciBJUHY0KSwgdGhlIFVEUCByZWNlaXZlIHBhdGggY29ycmVjdGx5IHBhc3NlcyB0aGUgcGFja2V0IGJhY2sgdG8gdGhlIElQIGxheWVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyB0aGUgcmVzdWJtaXNzaW9uIG9mIG11bHRpY2FzdCBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowxzrlq[1] Phase: Succeeded StartedAt: 2026-07-05 03:01:14 +0000 UTC FinishedAt: 2026-07-05 03:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-05 03:01:14 +0000 UTC FinishedAt: 2026-07-05 03:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2] Phase: Succeeded StartedAt: 2026-07-05 03:01:14 +0000 UTC FinishedAt: 2026-07-05 06:58:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-05 03:01:14 +0000 UTC FinishedAt: 2026-07-05 06:58:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:01:14 +0000 UTC FinishedAt: 2026-07-05 03:01:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:01:14 +0000 UTC FinishedAt: 2026-07-05 03:01:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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-workflowxzrlq/series-workflowxzrlq-convert-artifact-3541501878/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:01:24 +0000 UTC FinishedAt: 2026-07-05 03:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:01:24 +0000 UTC FinishedAt: 2026-07-05 03:25:27 +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:*af3a5f2e-7499-4a42-a973-669b01a92be7,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-workflowxzrlq/series-workflowxzrlq-convert-artifact-3541501878/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": "5ed5d799-5f36-4e4b-9f5c-33d819b6367b", "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-workflowxzrlq/series-workflowxzrlq-build-action-3462934220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:01:24 +0000 UTC FinishedAt: 2026-07-05 03:24:19 +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:*af3a5f2e-7499-4a42-a973-669b01a92be7,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-workflowxzrlq/series-workflowxzrlq-convert-artifact-3541501878/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": "5ed5d799-5f36-4e4b-9f5c-33d819b6367b", "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-workflowxzrlq/series-workflowxzrlq-build-action-3462934220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:25:27 +0000 UTC FinishedAt: 2026-07-05 03:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:25:27 +0000 UTC FinishedAt: 2026-07-05 03:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:25:27 +0000 UTC FinishedAt: 2026-07-05 03:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:25:27 +0000 UTC FinishedAt: 2026-07-05 03:25:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-workflowxzrlq/series-workflowxzrlq-convert-artifact-2822886729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:25:38 +0000 UTC FinishedAt: 2026-07-05 03:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:25:38 +0000 UTC FinishedAt: 2026-07-05 03:27:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ed5d799-5f36-4e4b-9f5c-33d819b6367b,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-workflowxzrlq/series-workflowxzrlq-build-action-3462934220/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-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:27:54 +0000 UTC FinishedAt: 2026-07-05 03:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:27:54 +0000 UTC FinishedAt: 2026-07-05 03:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:27:54 +0000 UTC FinishedAt: 2026-07-05 03:51:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:27:54 +0000 UTC FinishedAt: 2026-07-05 03:51:09 +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:*af3a5f2e-7499-4a42-a973-669b01a92be7,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-workflowxzrlq/series-workflowxzrlq-convert-artifact-2822886729/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": "4acc127e-0616-4aa9-ac95-086a5e1cfff4", "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-workflowxzrlq/series-workflowxzrlq-build-action-440886309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:27:54 +0000 UTC FinishedAt: 2026-07-05 03:50:59 +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:*af3a5f2e-7499-4a42-a973-669b01a92be7,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-workflowxzrlq/series-workflowxzrlq-convert-artifact-2822886729/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": "4acc127e-0616-4aa9-ac95-086a5e1cfff4", "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-workflowxzrlq/series-workflowxzrlq-build-action-440886309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:51:09 +0000 UTC FinishedAt: 2026-07-05 03:51:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","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-05 03:51:09 +0000 UTC FinishedAt: 2026-07-05 03:51:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-05 03:51:09 +0000 UTC FinishedAt: 2026-07-05 03:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-05 03:51:09 +0000 UTC FinishedAt: 2026-07-05 03:53:11 +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:*4acc127e-0616-4aa9-ac95-086a5e1cfff4,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-workflowxzrlq/series-workflowxzrlq-build-action-440886309/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-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-05 03:53:21 +0000 UTC FinishedAt: 2026-07-05 06:58:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-05 03:53:21 +0000 UTC FinishedAt: 2026-07-05 06:58:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5ed5d799-5f36-4e4b-9f5c-33d819b6367b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4acc127e-0616-4aa9-ac95-086a5e1cfff4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxzrlq/series-workflowxzrlq-build-action-3462934220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxzrlq/series-workflowxzrlq-build-action-440886309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-05 03:53:21 +0000 UTC FinishedAt: 2026-07-05 03:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-05 03:53:21 +0000 UTC FinishedAt: 2026-07-05 03:53:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__udp4_lib_mcast_deliver","__udp6_lib_mcast_deliver"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxzrlq/series-workflowxzrlq-convert-artifact-1863761566/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-05 03:53:21 +0000 UTC FinishedAt: 2026-07-05 03:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-05 03:53:21 +0000 UTC FinishedAt: 2026-07-05 03:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-05 03:53:21 +0000 UTC FinishedAt: 2026-07-05 03:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-05 03:53:31 +0000 UTC FinishedAt: 2026-07-05 06:58:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxzrlq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","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":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_FOU","NET_FOU_IP_TUNNELS","NET_IPGRE","IPV6_GRE"],"series_id":"5f9533d4-7898-4db7-99cb-8cac65f0ed95","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-05 03:53:31 +0000 UTC FinishedAt: 2026-07-05 06:58:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ed5d799-5f36-4e4b-9f5c-33d819b6367b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4acc127e-0616-4aa9-ac95-086a5e1cfff4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxzrlq/series-workflowxzrlq-build-action-3462934220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxzrlq/series-workflowxzrlq-build-action-440886309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxzrlq/series-workflowxzrlq-convert-artifact-1863761566/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}