Name: series-workflowzl8kd Phase: Succeeded StartedAt: 2026-09-06 04:55:01 +0000 UTC FinishedAt: 2026-09-06 05:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzl8kd[0] Phase: Succeeded StartedAt: 2026-09-06 04:55:01 +0000 UTC FinishedAt: 2026-09-06 05:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzl8kd[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 04:55:01 +0000 UTC FinishedAt: 2026-09-06 05:43:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK", "NETFILTER" ], "series_id": "6f0c73e9-bea4-425a-aec3-fa949f5b6d12" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctnetlink_parse_filter", "ctnetlink_alloc_filter", "ctnetlink_filter_match", "ctnetlink_flush_conntrack", "ctnetlink_dump_table", "ctnetlink_get_conntrack", "ctnetlink_del_conntrack" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19wYXJzZV9maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENUQV9GSUxURVJfWk9ORSwgYWxsb3dpbmcgY29ubnRyYWNrIGR1bXBzIGFuZCBmbHVzaGVzIHRvIGZpbHRlciBlbnRyaWVzIGJ5IHpvbmUuIFxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5OlxuMS4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChgc3RydWN0IGN0bmV0bGlua19maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMgaW5jbHVkaW5nIGB6b25lX2ZpbHRlcmAuXG4yLiBUaGUgYXR0cmlidXRlIHBvbGljeSBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBkZWZpbmVkIGFzIGBOTEFfRkxBR2AsIHBhcnNlZCB2aWEgbmV0bGluayBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgKGBubGFfcGFyc2VfbmVzdGVkYCkuXG4zLiBab25lIHBhcnNpbmcgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZSBjb21wbGV0ZWx5IHZpYSBgbmZfY3Rfem9uZV9pbml0KClgLlxuNC4gU3RyaWN0IHZhbGlkYXRpb24gZW5zdXJlcyBgQ1RBX1pPTkVgIG11c3QgYmUgcHJlc2VudCBpZiBgem9uZV9maWx0ZXJgIGlzIHNldC5cbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIENUQV9GSUxURVJfWk9ORSBhdHRyaWJ1dGUgc3VwcG9ydCB0byB0aGUgY29ubnRyYWNrIG5ldGxpbmsgZmlsdGVyaW5nIGludGVyZmFjZSwgdXBkYXRpbmcgbmV0bGluayBwb2xpY3kgYW5kIHBhcnNpbmcgbG9naWMgaW4gbmZfY29ubnRyYWNrX25ldGxpbmsuYy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBORVRMSU5LX05FVEZJTFRFUiBjb25udHJhY2sgZHVtcCBhbmQgZmx1c2ggcmVxdWVzdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcbmluZGV4IGIxZWIxMDJhYjg0MzIuLmNmYzExM2JhMzQwMjkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuQEAgLTM3MSw2ICYjNDM7MzcxLDExIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogcmVwbHktZmxhZ3NcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBiaXRtYXNrIG9mIHR1cGxlIGZpZWxkcyB0byBmaWx0ZXIgb24sIHJlcGx5IGRpcmVjdGlvblxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogem9uZVxuJiM0MzsgICAgICAgIHR5cGU6IGZsYWdcbiYjNDM7ICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lXG4mIzQzOyAgICAgICAgICAoYGBDVEFfWk9ORWBgKSBhdHRyaWJ1dGVcbiAgIC1cbiAgICAgbmFtZTogY29ubnRyYWNrLWF0dHJzXG4gICAgIGF0dHJpYnV0ZXM6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaFxuaW5kZXggNDMyMzNhZjc1YjlkNS4uOTg1ZjljMDhkM2U5YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaFxuQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgZW51bSBjdGF0dHJfZmlsdGVyIHtcbiBcdENUQV9GSUxURVJfVU5TUEVDLFxuIFx0Q1RBX0ZJTFRFUl9PUklHX0ZMQUdTLFxuIFx0Q1RBX0ZJTFRFUl9SRVBMWV9GTEFHUyxcbiYjNDM7XHRDVEFfRklMVEVSX1pPTkUsXG4gXHRfX0NUQV9GSUxURVJfTUFYXG4gfTtcbiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTkxMSw2ICYjNDM7OTExLDcgQEAgc3RydWN0IGN0bmV0bGlua19maWx0ZXIge1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV0gPSB7XG4gXHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcbiBcdFtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4mIzQzO1x0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuQEAgLTkzMCw2ICYjNDM7OTMxLDkgQEAgc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHRpZiAodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pXG4gXHRcdGZpbHRlci1cdTAwM2VyZXBseV9mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKTtcbiBcbiYjNDM7XHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcbiYjNDM7XHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMDYsNiAmIzQzOzEwMTAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZmlsdGVyO1xuIFxuJiM0MztcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4gXHRpZiAoY2RhW0NUQV9aT05FXSkge1xuIFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG5AQCAtMTAyMCw2ICYjNDM7MTAyNSwxMiBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZmlsdGVyO1xuIFxuJiM0MztcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXG4mIzQzO1x0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9maWx0ZXI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChmaWx0ZXItXHUwMDNlb3JpZ19mbGFncykge1xuIFx0XHRpZiAoIWNkYVtDVEFfVFVQTEVfT1JJR10pIHtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xuaW5kZXggMzFiODI1MGRkYzUzZC4uNjNmNDEzNTZmZTZkNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG5AQCAtMjE1LDcgJiM0MzsyMTUsMjIgQEAgc3RhdGljIGludCBjb3VudF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIE1OTF9DQl9PSztcbiB9XG4gXG4tc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiYjNDM7c3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcbiYjNDM7XHRcdFx0ICBib29sIHVzZV9jdGFfZmlsdGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqbmVzdDtcbiYjNDM7XG4mIzQzO1x0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfY3RhX2ZpbHRlcikge1xuJiM0MztcdFx0bmVzdCA9IG1ubF9hdHRyX25lc3Rfc3RhcnQobmxoLCBDVEFfRklMVEVSKTtcbiYjNDM7XHRcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XG4mIzQzO1x0XHRtbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSxcbiYjNDM7XHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjM1LDcgJiM0MzsyNTAsNyBAQCBzdGF0aWMgaW50IGNvbm50cmFja19jb3VudF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuIFx0bmZoLVx1MDAzZXZlcnNpb24gPSBORk5FVExJTktfVjA7XG4gXHRuZmgtXHUwMDNlcmVzX2lkID0gMDtcbiBcbi1cdG1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpO1xuJiM0MztcdHB1dF96b25lX2F0dHIobmxoLCB6b25lLCB1c2VfY3RhX2ZpbHRlcik7XG4gXG4gXHRyZXQgPSBtbmxfc29ja2V0X3NlbmR0byhzb2NrLCBubGgsIG5saC1cdTAwM2VubG1zZ19sZW4pO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuQEAgLTI2MSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiBcdHJldHVybiByZXBseV9jb3VudGVyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuJiM0MztzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lLFxuJiM0MztcdFx0XHRcdGJvb2wgdXNlX2N0YV9maWx0ZXIpXG4ge1xuIFx0Y2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07XG4gXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbkBAIC0yODEsNyAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4mIzQzO1x0cHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTtcbiBcbiBcdHJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLVx1MDAzZW5sbXNnX2xlbik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG5AQCAtMzA0LDQzICYjNDM7MzIwLDQwIEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tRklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaClcbi17XG4tXHRzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaztcbi19O1xuLVxuLUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4mIzQzO3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBtbmxfc29ja2V0ICoqc29jaylcbiB7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgc3JjLCBkc3Q7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2VsZi1cdTAwM2Vzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTtcbi1cdGlmICghc2VsZi1cdTAwM2Vzb2NrKSB7XG4mIzQzO1x0KnNvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpO1xuJiM0MztcdGlmICghKnNvY2spIHtcbiBcdFx0cGVycm9yKFwmIzM0O21ubF9zb2NrZXRfb3BlblwmIzM0Oyk7XG4tXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcJiMzNDspO1xuJiM0MztcdFx0U0tJUChyZXR1cm4gLTEsIFwmIzM0O2Nhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldFwmIzM0Oyk7XG4gXHR9XG4gXG4tXHRyZXQgPSBtbmxfc29ja2V0X2JpbmQoc2VsZi1cdTAwM2Vzb2NrLCAwLCBNTkxfU09DS0VUX0FVVE9QSUQpO1xuJiM0MztcdHJldCA9IG1ubF9zb2NrZXRfYmluZCgqc29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVQRVJNKVxuLVx0XHRTS0lQKHJldHVybiwgXCYjMzQ7TmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcJiMzNDspO1xuJiM0MztcdFx0U0tJUChyZXR1cm4gLTEsIFwmIzM0O05lZWRzIHRvIGJlIHJ1biBhcyByb290XCYjMzQ7KTtcbiBcdGVsc2UgaWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU9QTk9UU1VQUClcbi1cdFx0U0tJUChyZXR1cm4sIFwmIzM0O0tlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCYjMzQ7KTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuIC0xLFxuJiM0MztcdFx0ICAgICBcJiMzNDtLZXJuZWwgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGNvbm50cmFjayB6b25lc1wmIzM0Oyk7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXHUwMDNlc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbiBcdFx0XHRcdFx0IFRFU1RfWk9ORV9JRCAmIzQzOyAyKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuIFx0XHRcdFx0XHQgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTM1OCw5ICYjNDM7MzcxLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiBcdFx0XHQweDAyMDAwMDAwXG4gXHRcdH1cbiBcdH19O1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cdTAwM2Vzb2NrLCBzcmMsIGRzdCxcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zNzcsOSAmIzQzOzM5MCw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwNDAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICYjNDM7IDEpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zOTYsOSAmIzQzOzQwOSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwNjAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICYjNDM7IDIpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG5AQCAtNDE2LDE0ICYjNDM7NDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwODAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4mIzQzO3tcbiYjNDM7XHRib29sIHVzZV9jdGFfZmlsdGVyO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChjb25udHJhY2tfZHVtcF9mbHVzaCwgY3RhX3pvbmUpXG4mIzQzO3tcbiYjNDM7XHQudXNlX2N0YV9maWx0ZXIgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV9maWx0ZXIpXG4mIzQzO3tcbiYjNDM7XHQudXNlX2N0YV9maWx0ZXIgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb25udHJhY2tfem9uZV9zZXR1cChfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlc29jaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XG4gXHRFWFBFQ1RfR0UocmV0LCAyKTtcbiBcdGlmIChyZXQgXHUwMDNlIDIpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBmaWx0ZXJpbmcgYnkgem9uZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXVzZV9jdGFfZmlsdGVyKSB7XG4mIzQzO1x0XHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDVEFfRklMVEVSX1pPTkVcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0dFKHJldCwgMCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBGSVhUVVJFX1RFQVJET1dOKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuQEAgLTQzNCwzOSAmIzQzOzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsXG4mIzQzO1x0XHRcdFx0ICAgdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbiB9XG4gXG4gVEVTVF9GKGNvbm50cmFja19kdW1wX2ZsdXNoLCB0ZXN0X2ZsdXNoX2J5X3pvbmUpXG4ge1xuJiM0MztcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMik7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpXG4ge1xuJiM0MztcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMik7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19wYXJzZV9maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGFjZTk4NWYyZmQyNThhNmUwOTgxM2Y1YTQ0YjUzZTI1MWQ5NGMzYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6NDE6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwKaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbApAQCAtMzcxLDYgJiM0MzszNzEsMTEgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IHJlcGx5LWZsYWdzCiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBkb2M6IGJpdG1hc2sgb2YgdHVwbGUgZmllbGRzIHRvIGZpbHRlciBvbiwgcmVwbHkgZGlyZWN0aW9uCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogem9uZQomIzQzOyAgICAgICAgdHlwZTogZmxhZwomIzQzOyAgICAgICAgZG9jOiBmaWx0ZXIgb24gY29ubnRyYWNrIHpvbmUgaWQ7IHJlcXVpcmVzIHRoZSB0b3AtbGV2ZWwgem9uZQomIzQzOyAgICAgICAgICAoYGBDVEFfWk9ORWBgKSBhdHRyaWJ1dGUKICAgLQogICAgIG5hbWU6IGNvbm50cmFjay1hdHRycwogICAgIGF0dHJpYnV0ZXM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCmluZGV4IDQzMjMzYWY3NWI5ZDUuLjk4NWY5YzA4ZDNlOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIGVudW0gY3RhdHRyX2ZpbHRlciB7CiAJQ1RBX0ZJTFRFUl9VTlNQRUMsCiAJQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTLAogCUNUQV9GSUxURVJfUkVQTFlfRkxBR1MsCiYjNDM7CUNUQV9GSUxURVJfWk9ORSwKIAlfX0NUQV9GSUxURVJfTUFYCiB9OwogI2RlZmluZSBDVEFfRklMVEVSX01BWCAoX19DVEFfRklMVEVSX01BWCAtIDEpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggOWI0ZTI5NTU3ZWMzMy4uZmZjMjlhNDA3NzQ5ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtOTExLDYgJiM0Mzs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0gewogCVtDVEFfRklMVEVSX09SSUdfRkxBR1NdCQk9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSwKIAlbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10JPSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksCiYjNDM7CVtDVEFfRklMVEVSX1pPTkVdCQk9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCkBAIC05MzAsNiAmIzQzOzkzMSw5IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCWlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSkKIAkJZmlsdGVyLSZndDtyZXBseV9mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKTsKIAomIzQzOwlpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSkKJiM0MzsJCWZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgPSB0cnVlOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMDA2LDYgJiM0MzsxMDEwLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSkKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9maWx0ZXI7CiAKJiM0MzsJLyogQ1RBX1pPTkUgaXMgYWxsb3dlZCB3aXRob3V0IENUQV9GSUxURVJfWk9ORS4gKi8KIAlpZiAoY2RhW0NUQV9aT05FXSkgewogCQllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCAmYW1wO2ZpbHRlci0mZ3Q7em9uZSk7CiAJCWlmIChlcnIgJmx0OyAwKQpAQCAtMTAyMCw2ICYjNDM7MTAyNSwxMiBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KQogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl9maWx0ZXI7CiAKJiM0MzsJLyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi8KJiM0MzsJaWYgKGZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgJmFtcDsmYW1wOyAhY2RhW0NUQV9aT05FXSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX2ZpbHRlcjsKJiM0MzsJfQomIzQzOwogCWlmIChmaWx0ZXItJmd0O29yaWdfZmxhZ3MpIHsKIAkJaWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7CiAJCQllcnIgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jCmluZGV4IDMxYjgyNTBkZGM1M2QuLjYzZjQxMzU2ZmU2ZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMKQEAgLTIxNSw3ICYjNDM7MjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gTU5MX0NCX09LOwogfQogCi1zdGF0aWMgaW50IGNvbm50cmFja19jb3VudF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQomIzQzO3N0YXRpYyB2b2lkIHB1dF96b25lX2F0dHIoc3RydWN0IG5sbXNnaGRyICpubGgsIHVpbnQxNl90IHpvbmUsCiYjNDM7CQkJICBib29sIHVzZV9jdGFfZmlsdGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqbmVzdDsKJiM0MzsKJiM0MzsJbW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7CiYjNDM7CiYjNDM7CWlmICh1c2VfY3RhX2ZpbHRlcikgewomIzQzOwkJbmVzdCA9IG1ubF9hdHRyX25lc3Rfc3RhcnQobmxoLCBDVEFfRklMVEVSKTsKJiM0MzsJCW1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7CiYjNDM7CQltbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsCiYjNDM7CQkJCWJvb2wgdXNlX2N0YV9maWx0ZXIpCiB7CiAJY2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CkBAIC0yMzUsNyAmIzQzOzI1MCw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpCiAJbmZoLSZndDt2ZXJzaW9uID0gTkZORVRMSU5LX1YwOwogCW5maC0mZ3Q7cmVzX2lkID0gMDsKIAotCW1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpOwomIzQzOwlwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpOwogCiAJcmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtJmd0O25sbXNnX2xlbik7CiAJaWYgKHJldCAmbHQ7IDApIHsKQEAgLTI2MSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKIAlyZXR1cm4gcmVwbHlfY291bnRlcjsKIH0KIAotc3RhdGljIGludCBjb25udHJhY2tfZmx1c2hfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKJiM0MztzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lLAomIzQzOwkJCQlib29sIHVzZV9jdGFfZmlsdGVyKQogewogCWNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwpAQCAtMjgxLDcgJiM0MzsyOTcsNyBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQogCW5maC0mZ3Q7dmVyc2lvbiA9IE5GTkVUTElOS19WMDsKIAluZmgtJmd0O3Jlc19pZCA9IDA7CiAKLQltbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTsKJiM0MzsJcHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTsKIAogCXJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLSZndDtubG1zZ19sZW4pOwogCWlmIChyZXQgJmx0OyAwKSB7CkBAIC0zMDQsNDMgJiM0MzszMjAsNDAgQEAgc3RhdGljIGludCBjb25udHJhY2tfZmx1c2hfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKIAlyZXR1cm4gMDsKIH0KIAotRklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaCkKLXsKLQlzdHJ1Y3QgbW5sX3NvY2tldCAqc29jazsKLX07Ci0KLUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiYjNDM7c3RhdGljIGludCBjb25udHJhY2tfem9uZV9zZXR1cChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiYjNDM7CQkJCXN0cnVjdCBtbmxfc29ja2V0ICoqc29jaykKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgc3JjLCBkc3Q7CiAJaW50IHJldDsKIAotCXNlbGYtJmd0O3NvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpOwotCWlmICghc2VsZi0mZ3Q7c29jaykgewomIzQzOwkqc29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7CiYjNDM7CWlmICghKnNvY2spIHsKIAkJcGVycm9yKCYjMzQ7bW5sX3NvY2tldF9vcGVuJiMzNDspOwotCQlTS0lQKHJldHVybiwgJiMzNDtjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXQmIzM0Oyk7CiYjNDM7CQlTS0lQKHJldHVybiAtMSwgJiMzNDtjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXQmIzM0Oyk7CiAJfQogCi0JcmV0ID0gbW5sX3NvY2tldF9iaW5kKHNlbGYtJmd0O3NvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7CiYjNDM7CXJldCA9IG1ubF9zb2NrZXRfYmluZCgqc29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKIAotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTsKIAlpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVQRVJNKQotCQlTS0lQKHJldHVybiwgJiMzNDtOZWVkcyB0byBiZSBydW4gYXMgcm9vdCYjMzQ7KTsKJiM0MzsJCVNLSVAocmV0dXJuIC0xLCAmIzM0O05lZWRzIHRvIGJlIHJ1biBhcyByb290JiMzNDspOwogCWVsc2UgaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFT1BOT1RTVVBQKQotCQlTS0lQKHJldHVybiwgJiMzNDtLZXJuZWwgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGNvbm50cmFjayB6b25lcyYjMzQ7KTsKJiM0MzsJCVNLSVAocmV0dXJuIC0xLAomIzQzOwkJICAgICAmIzM0O0tlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzJiMzNDspOwogCi0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi0mZ3Q7c29jaywgMHhmMGYwZjBmMCwgMHhmMWYxZjFmMSwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsCiAJCQkJCSBURVNUX1pPTkVfSUQpOwotCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtJmd0O3NvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsCiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmMmYyZjJmMiwgMHhmM2YzZjNmMywKIAkJCQkJIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLSZndDtzb2NrLCAweGY0ZjRmNGY0LCAweGY1ZjVmNWY1LAomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsCiAJCQkJCSBURVNUX1pPTkVfSUQgJiM0MzsgMik7Ci0JRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi0mZ3Q7c29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNywKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LAogCQkJCQkgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAKIAlzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7ewogCQkuX191Nl9hZGRyMzIgPSB7CkBAIC0zNTgsOSAmIzQzOzM3MSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiAJCQkweDAyMDAwMDAwCiAJCX0KIAl9fTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLSZndDtzb2NrLCBzcmMsIGRzdCwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LAogCQkJCQkgVEVTVF9aT05FX0lEKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAJc3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3sKIAkJLl9fdTZfYWRkcjMyID0gewogCQkJMHhiODBkMDEyMCwKQEAgLTM3Nyw5ICYjNDM7MzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKIAkJCTB4MDQwMDAwMDAKIAkJfQogCX19OwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtJmd0O3NvY2ssIHNyYywgZHN0LAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsCiAJCQkJCSBURVNUX1pPTkVfSUQgJiM0MzsgMSk7Ci0JRVhQRUNUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwogCXNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7CiAJCS5fX3U2X2FkZHIzMiA9IHsKIAkJCTB4YjgwZDAxMjAsCkBAIC0zOTYsOSAmIzQzOzQwOSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiAJCQkweDA2MDAwMDAwCiAJCX0KIAl9fTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLSZndDtzb2NrLCBzcmMsIGRzdCwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LAogCQkJCQkgVEVTVF9aT05FX0lEICYjNDM7IDIpOwotCUVYUEVDVF9FUShyZXQsIDApOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKIAogCXNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7CiAJCS5fX3U2X2FkZHIzMiA9IHsKQEAgLTQxNiwxNCAmIzQzOzQyOSw1MSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKQogCQkJMHgwODAwMDAwMAogCQl9CiAJfX07Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi0mZ3Q7c29jaywgc3JjLCBkc3QsCiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCwKIAkJCQkJIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7Ci0JRVhQRUNUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwogCi0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW5sX3NvY2tldCAqc29jazsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVChjb25udHJhY2tfZHVtcF9mbHVzaCkKJiM0Mzt7CiYjNDM7CWJvb2wgdXNlX2N0YV9maWx0ZXI7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfem9uZSkKJiM0Mzt7CiYjNDM7CS51c2VfY3RhX2ZpbHRlciA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChjb25udHJhY2tfZHVtcF9mbHVzaCwgY3RhX2ZpbHRlcikKJiM0Mzt7CiYjNDM7CS51c2VfY3RhX2ZpbHRlciA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvbm50cmFja196b25lX3NldHVwKF9tZXRhZGF0YSwgJmFtcDtzZWxmLSZndDtzb2NrKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7CiAJRVhQRUNUX0dFKHJldCwgMik7CiAJaWYgKHJldCAmZ3Q7IDIpCiAJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lJiMzNDspOwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dXNlX2N0YV9maWx0ZXIpIHsKJiM0MzsJCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCwgdHJ1ZSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCkKJiM0MzsJCQlTS0lQKHJldHVybiwgJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDVEFfRklMVEVSX1pPTkUmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfR0UocmV0LCAwKTsKJiM0MzsJfQogfQogCiBGSVhUVVJFX1RFQVJET1dOKGNvbm50cmFja19kdW1wX2ZsdXNoKQpAQCAtNDM0LDM5ICYjNDM7NDg0LDQyIEBAIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9kdW1wX2J5X3pvbmUpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCwKJiM0MzsJCQkJICAgdmFyaWFudC0mZ3Q7dXNlX2N0YV9maWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwogfQogCiBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZmx1c2hfYnlfem9uZSkKIHsKJiM0MzsJYm9vbCBmaWx0ZXIgPSB2YXJpYW50LSZndDt1c2VfY3RhX2ZpbHRlcjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAxLCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAyKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDIsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwogfQogCiBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZmx1c2hfYnlfem9uZV9kZWZhdWx0KQogewomIzQzOwlib29sIGZpbHRlciA9IHZhcmlhbnQtJmd0O3VzZV9jdGFfZmlsdGVyOwogCWludCByZXQ7CiAKLQlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDEsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDIpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAyKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU1NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIGZvciBwb3RlbnRpYWwgZnV6emluZyB3aXRoIHN5emthbGxlci4gRnJvbSB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGlzIHNlZW1zIGxpa2Ugc3RyYWlnaHRmb3J3YXJkIGtlcm5lbCBRQSB3b3JrLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBkZWZlbnNpdmUgc2VjdXJpdHkg4oCTIG5vdGhpbmcgdG9vIHJpc2t5LiBNeSByaXNrIGFuYWx5c2lzIGNvbmZpcm1zIHRoaXM6IHdlJiMzOTtyZSBldmFsdWF0aW5nIGNvZGUgZm9yIGZ1enppbmcgcHVycG9zZXMsIHdoaWNoIGlzIGEgZmFpcmx5IGJlbmlnbiB0YXNrLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmhgLCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNgLiBLbm93aW5nIHRoZSBmaWxlcyBpbnZvbHZlZCBnaXZlcyBtZSBhIGhhbmRsZSBvbiB0aGUgYXJlYSBvZiB0aGUga2VybmVsIGJlaW5nIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBtb2RpZmllZCBjb2RlLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggZnJvbSBhbiBpbXBsZW1lbnRhdGlvbiBwb2ludCBvZiB2aWV3LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdFx0dV9pbnQzMl90IG9yaWdfZmxhZ3M7XG4gOTAxOlx0XHR1X2ludDMyX3QgcmVwbHlfZmxhZ3M7XG4gOTAyOlx0XG4gOTAzOlx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG9yaWc7XG4gOTA0Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGx5O1xuIDkwNTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XG4gOTA2Olx0XG4gOTA3Olx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcbiA5MDg6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XG4gOTA5Olx0fTtcbiA5MTA6XHRcbiA5MTE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0ge1xuIDkxMjpcdFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gOTEzOlx0XHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuIDkxNDpcdFx0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiA5MTU6XHR9O1xuIDkxNjpcdFxuIDkxNzpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDkxODpcdFx0XHRcdFx0ICBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyKVxuIDkxOTpcdHtcbiA5MjA6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0NUQV9GSUxURVJfTUFYICYjNDM7IDFdO1xuIDkyMTpcdFx0aW50IHJldCA9IDA7XG4gOTIyOlx0XG4gOTIzOlx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfRklMVEVSX01BWCwgYXR0ciwgY3RhX2ZpbHRlcl9ubGFfcG9saWN5LFxuIDkyNDpcdFx0XHRcdCAgICAgICBOVUxMKTtcbiA5MjU6XHRcdGlmIChyZXQpXG4gOTI2Olx0XHRcdHJldHVybiByZXQ7XG4gOTI3Olx0XG4gOTI4Olx0XHRpZiAodGJbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXSlcbiA5Mjk6XHRcdFx0ZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltDVEFfRklMVEVSX09SSUdfRkxBR1NdKTtcbiA5MzA6XHRcbiA5MzE6XHRcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcbiA5MzI6XHRcdFx0ZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xuIDkzMzpcdFxuIDkzNDpcdFx0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXG4gOTM1Olx0XHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4gOTM2Olx0XG4gOTM3Olx0XHRyZXR1cm4gMDtcbiA5Mzg6XHR9XG4gOTM5Olx0XG4gOTQwOlx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDk0MTpcdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKTtcbiA5NDI6XHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLFxuIDk0MzpcdFx0XHRcdFx0XHQgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXG4gOTQ0Olx0XHRcdFx0XHRcdCB1MzIgdHlwZSwgdV9pbnQ4X3QgbDNudW0sXG4gOTQ1Olx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUsXG4gOTQ2Olx0XHRcdFx0XHRcdCB1X2ludDMyX3QgZmxhZ3MpO1xuIDk0NzpcdFxuIDk0ODpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqbWFyayxcbiA5NDk6XHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4gOTUwOlx0e1xuIDk1MTpcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUktcbiA5NTI6XHRcdGlmIChjZGFbQ1RBX01BUktdKSB7XG4gOTUzOlx0XHRcdG1hcmstXHUwMDNldmFsID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfTUFSS10pKTtcbiA5NTQ6XHRcbiA5NTU6XHRcdFx0aWYgKGNkYVtDVEFfTUFSS19NQVNLXSlcbiA5NTY6XHRcdFx0XHRtYXJrLVx1MDAzZW1hc2sgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLX01BU0tdKSk7XG4gOTU3Olx0XHRcdGVsc2VcbiA5NTg6XHRcdFx0XHRtYXJrLVx1MDAzZW1hc2sgPSAweGZmZmZmZmZmO1xuIDk1OTpcdFx0fSBlbHNlIGlmIChjZGFbQ1RBX01BUktfTUFTS10pIHtcbiA5NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTYxOlx0XHR9XG4gOTYyOlx0I2VuZGlmXG4gOTYzOlx0XHRyZXR1cm4gMDtcbiA5NjQ6XHR9XG4gOTY1Olx0XG4gOTY2Olx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgKnN0YXR1cyxcbiA5Njc6XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcbiA5Njg6XHR7XG4gOTY5Olx0XHRpZiAoY2RhW0NUQV9TVEFUVVNdKSB7XG4gOTcwOlx0XHRcdHN0YXR1cy1cdTAwM2V2YWwgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9TVEFUVVNdKSk7XG4gOTcxOlx0XHRcdGlmIChjZGFbQ1RBX1NUQVRVU19NQVNLXSlcbiA5NzI6XHRcdFx0XHRzdGF0dXMtXHUwMDNlbWFzayA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1NUQVRVU19NQVNLXSkpO1xuIDk3MzpcdFx0XHRlbHNlXG4gOTc0Olx0XHRcdFx0c3RhdHVzLVx1MDAzZW1hc2sgPSBzdGF0dXMtXHUwMDNldmFsO1xuIDk3NTpcdFxuIDk3NjpcdFx0XHQvKiBzdGF0dXMtXHUwMDNldmFsID09IDA/IGFsd2F5cyB0cnVlLCBlbHNlIGFsd2F5cyBmYWxzZS4gKi9cbiA5Nzc6XHRcdFx0aWYgKHN0YXR1cy1cdTAwM2VtYXNrID09IDApXG4gOTc4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTc5Olx0XHR9IGVsc2UgaWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKSB7XG4gOTgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk4MTpcdFx0fVxuIDk4MjpcdFxuIDk4MzpcdFx0LyogQ1RBX1NUQVRVUyBpcyBOTEFfVTMyLCBpZiB0aGlzIGZpcmVzIFVBUEkgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgKi9cbiA5ODQ6XHRcdEJVSUxEX0JVR19PTihfX0lQU19NQVhfQklUIFx1MDAzZT0gMzIpO1xuIDk4NTpcdFx0cmV0dXJuIDA7XG4gOTg2Olx0fVxuIDk4NzpcdFxuIDk4ODpcdHN0YXRpYyBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqXG4gOTg5Olx0Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbiA5OTA6XHR7XG4gOTkxOlx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyO1xuIDk5MjpcdFx0aW50IGVycjtcbiA5OTM6XHRcbiA5OTQ6XHQjaWZuZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xuIDk5NTpcdFx0aWYgKGNkYVtDVEFfTUFSS10gfHwgY2RhW0NUQV9NQVJLX01BU0tdKVxuIDk5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4gOTk3Olx0I2VuZGlmXG4gOTk4Olx0XG4gOTk5Olx0XHRmaWx0ZXIgPSBremFsbG9jX29iaigqZmlsdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCBhbmQgaXRzIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIGlzIGJlaW5nIGFsbG9jYXRlZCBhbmQsIGNydWNpYWxseSwgd2hlcmUgaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBKdXN0IHNlZWluZyB0aGUgYWxsb2NhdGlvbiBpcyBvbmx5IGhhbGYgdGhlIHN0b3J5LiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdGhlIGZpbHRlciBpc24mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHkgZG93bnN0cmVhbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgJiMzNDtmaWx0ZXImIzM0OyB2YXJpYWJsZSB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBvcGVyYXRpb25zIGhhcHBlbmluZyB0byBpdC4gV2hhdCBhcmUgdGhlIHJlYWQgYW5kIHdyaXRlIHBhdHRlcm5zPyBJcyB0aGVyZSBhIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHdlIGNhbiBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0aWYgKGZpbHRlciA9PSBOVUxMKVxuMTAwMTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjEwMDI6XHRcbjEwMDM6XHRcdGZpbHRlci1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4xMDA0Olx0XG4xMDA1Olx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXHUwMDI2ZmlsdGVyLVx1MDAzZW1hcmssIGNkYSk7XG4xMDA2Olx0XHRpZiAoZXJyKVxuMTAwNzpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDA4Olx0XG4xMDA5Olx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcdTAwMjZmaWx0ZXItXHUwMDNlc3RhdHVzLCBjZGEpO1xuMTAxMDpcdFx0aWYgKGVycilcbjEwMTE6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAxMjpcdFxuMTAxMzpcdFx0LyogQ1RBX1pPTkUgaXMgYWxsb3dlZCB3aXRob3V0IENUQV9GSUxURVJfWk9ORS4gKi9cbjEwMTQ6XHRcdGlmIChjZGFbQ1RBX1pPTkVdKSB7XG4xMDE1Olx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sIFx1MDAyNmZpbHRlci1cdTAwM2V6b25lKTtcbjEwMTY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMTc6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDE4Olx0XHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4xMDE5Olx0XHR9XG4xMDIwOlx0XG4xMDIxOlx0XHRpZiAoIWNkYVtDVEFfRklMVEVSXSlcbjEwMjI6XHRcdFx0cmV0dXJuIGZpbHRlcjtcbjEwMjM6XHRcbjEwMjQ6XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY2RhW0NUQV9GSUxURVJdLCBmaWx0ZXIpO1xuMTAyNTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMjY6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAyNzpcdFxuMTAyODpcdFx0LyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi9cbjEwMjk6XHRcdGlmIChmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFjZGFbQ1RBX1pPTkVdKSB7XG4xMDMwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMDMxOlx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMzI6XHRcdH1cbjEwMzM6XHRcbjEwMzQ6XHRcdGlmIChmaWx0ZXItXHUwMDNlb3JpZ19mbGFncykge1xuMTAzNTpcdFx0XHRpZiAoIWNkYVtDVEFfVFVQTEVfT1JJR10pIHtcbjEwMzY6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTAzNzpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMzg6XHRcdFx0fVxuMTAzOTpcdFxuMTA0MDpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGVfZmlsdGVyKGNkYSwgXHUwMDI2ZmlsdGVyLVx1MDAzZW9yaWcsXG4xMDQxOlx0XHRcdFx0XHRcdFx0ICAgQ1RBX1RVUExFX09SSUcsXG4xMDQyOlx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZWZhbWlseSxcbjEwNDM6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSxcbjEwNDQ6XHRcdFx0XHRcdFx0XHQgICBmaWx0ZXItXHUwMDNlb3JpZ19mbGFncyk7XG4xMDQ1Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDQ2Olx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTA0NzpcdFx0fVxuMTA0ODpcdFxuMTA0OTpcdFx0aWYgKGZpbHRlci1cdTAwM2VyZXBseV9mbGFncykge1xuMTA1MDpcdFx0XHRpZiAoIWNkYVtDVEFfVFVQTEVfUkVQTFldKSB7XG4xMDUxOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEwNTI6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDUzOlx0XHRcdH1cbjEwNTQ6XHRcbjEwNTU6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFx1MDAyNmZpbHRlci1cdTAwM2VyZXBseSxcbjEwNTY6XHRcdFx0XHRcdFx0XHQgICBDVEFfVFVQTEVfUkVQTFksXG4xMDU3Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZWZhbWlseSxcbjEwNTg6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSxcbjEwNTk6XHRcdFx0XHRcdFx0XHQgICBmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpO1xuMTA2MDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTA2MTpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwNjI6XHRcdH1cbjEwNjM6XHRcbjEwNjQ6XHRcdHJldHVybiBmaWx0ZXI7XG4xMDY1Olx0XG4xMDY2Olx0ZXJyX2ZpbHRlcjpcbjEwNjc6XHRcdGtmcmVlKGZpbHRlcik7XG4xMDY4Olx0XG4xMDY5Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMTA3MDpcdH1cbjEwNzE6XHRcbjEwNzI6XHRzdGF0aWMgYm9vbCBjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKHU4IGZhbWlseSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEpXG4xMDczOlx0e1xuMTA3NDpcdFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcbjEwNzU6XHR9XG4xMDc2Olx0XG4xMDc3Olx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMTA3ODpcdHtcbjEwNzk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhID0gY2ItXHUwMDNlZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAzNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGN0bmV0bGlua19maWx0ZXJgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBkZWZpbml0aW9uIG9mIGBjdG5ldGxpbmtfZmlsdGVyYC4gSSByZWNhbGwgaXQgYmVpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDg5MCwgZ2l2ZSBvciB0YWtlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgbmV0bGluayBmaWx0ZXIgdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHRvIGhvbGQgdGhlIGtleSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzIGF0IHRoZSBOZXRsaW5rIGxldmVsLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIGlzIGVzc2VudGlhbCB0byBncmFzcCBob3cgdGhlIHBvbGljeSBpcyBpbXBsZW1lbnRlZCwgYW55IGxpbWl0cyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcy4gS25vd2luZyB0aGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdCBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgZXh0ZW5kaW5nIHRoZSBmaWx0ZXIgY2FwYWJpbGl0aWVzLiBUaW1lIHRvIGdvIGh1bnRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5MDpcdFxuIDg5MTpcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiB7XG4gODkyOlx0XHR1MzIgdmFsO1xuIDg5MzpcdFx0dTMyIG1hc2s7XG4gODk0Olx0fTtcbiA4OTU6XHRcbiA4OTY6XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG4gODk3Olx0XHR1OCBmYW1pbHk7XG4gODk4Olx0XHRib29sIHpvbmVfZmlsdGVyO1xuIDg5OTpcdFxuIDkwMDpcdFx0dV9pbnQzMl90IG9yaWdfZmxhZ3M7XG4gOTAxOlx0XHR1X2ludDMyX3QgcmVwbHlfZmxhZ3M7XG4gOTAyOlx0XG4gOTAzOlx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG9yaWc7XG4gOTA0Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGx5O1xuIDkwNTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XG4gOTA2Olx0XG4gOTA3Olx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcbiA5MDg6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XG4gOTA5Olx0fTtcbiA5MTA6XHRcbiA5MTE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0ge1xuIDkxMjpcdFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gOTEzOlx0XHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuIDkxNDpcdFx0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIGFwcGxpY2F0aW9uIG9mIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGlzIGFjY2Vzc2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBnb2FsIGhlcmUgaXMgYSBmdWxsIGFuZCBjb21wbGV0ZSBjb21wcmVoZW5zaW9uIG9mIGl0cyByb2xlIGFuZCBzY29wZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLCBzbyBJIHdhbnQgdG8ga25vdyBldmVyeXdoZXJlIGl0IGNvbWVzIGludG8gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBuZXRsaW5rIGNvbnRleHQsIHdoaWNoIGhvcGVmdWxseSB3aWxsIHJldmVhbCB0aGUgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTg5Nj1zdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk3LVx0dTggZmFtaWx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjg5ODpcdGJvb2wgem9uZV9maWx0ZXI7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNC1cdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkzNTpcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE3LVx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDE4Olx0XHRmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTktXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjgtXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwMjk6XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMzAtXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTExNjM9c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc5Olx0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgwLVx0ICAgICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGN0bmV0bGlua2AgZmlsdGVyIGFuZCB0aGUgZHVtcC9mbHVzaCBvcGVyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsdGVycyB3b3JrIGF0IHRoZSBuZXRsaW5rIGxldmVsLgoKKipEZWVwIERpdmUgaW50byBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AqKgoKUmlnaHQsIHNvIHRoYXQgd291bGQgcHV0IHRoZSByZWxldmFudCBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwNzAgdG8gMTI1MC4gVGhhdCByYW5nZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgdGhlIGhhbmRsZXJzIGFuZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBob3cgdGhlIGRhdGEgaXMgYmVpbmcgY29uc3RydWN0ZWQsIHRyYW5zbWl0dGVkIHZpYSBuZXRsaW5rLCBhbmQgcHJvY2Vzc2VkIG9uIHRoZSBvdGhlciBlbmQuIEkgc2hvdWxkIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlcyB0aGVyZS4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCByZXZlYWwgdGhlIG1lY2hhbmlzbXMgZm9yIGJvdGggZmlsdGVyaW5nICphbmQqIHRoZSBkdW1wL2ZsdXNoIHByb2NlZHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3MDpcdH1cbjEwNzE6XHRcbjEwNzI6XHRzdGF0aWMgYm9vbCBjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKHU4IGZhbWlseSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEpXG4xMDczOlx0e1xuMTA3NDpcdFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcbjEwNzU6XHR9XG4xMDc2Olx0XG4xMDc3Olx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMTA3ODpcdHtcbjEwNzk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhID0gY2ItXHUwMDNlZGF0YTtcbjEwODA6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIgPSBOVUxMO1xuMTA4MTpcdFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbjEwODI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbjEwODM6XHRcbjEwODQ6XHRcdGlmIChjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKGZhbWlseSwgY2RhKSkge1xuMTA4NTpcdFx0XHRmaWx0ZXIgPSBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNkYSwgZmFtaWx5KTtcbjEwODY6XHRcdFx0aWYgKElTX0VSUihmaWx0ZXIpKVxuMTA4NzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZpbHRlcik7XG4xMDg4Olx0XHR9XG4xMDg5Olx0XG4xMDkwOlx0XHRjYi1cdTAwM2VkYXRhID0gZmlsdGVyO1xuMTA5MTpcdFx0cmV0dXJuIDA7XG4xMDkyOlx0fVxuMTA5MzpcdFxuMTA5NDpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG4xMDk1Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxuMTA5NjpcdFx0XHRcdFx0XHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXG4xMDk3Olx0e1xuMTA5ODpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbjEwOTk6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuMTEwMDpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTEwMTpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudTMuaXApXG4xMTAyOlx0XHRcdFx0cmV0dXJuICAwO1xuMTEwMzpcdFxuMTEwNDpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuMTEwNTpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pcCAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudTMuaXApXG4xMTA2Olx0XHRcdFx0cmV0dXJuICAwO1xuMTEwNzpcdFx0XHRicmVhaztcbjExMDg6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTEwOTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTExMDpcdFx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4xMTExOlx0XHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbjExMTI6XHRcdFx0XHRyZXR1cm4gMDtcbjExMTM6XHRcbjExMTQ6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcdTAwMjZcdTAwMjZcbjExMTU6XHRcdFx0ICAgICFpcHY2X2FkZHJfY21wKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudTMuaW42LFxuMTExNjpcdFx0XHRcdFx0ICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlZHN0LnUzLmluNikpXG4xMTE3Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTE4Olx0XHRcdGJyZWFrO1xuMTExOTpcdFx0fVxuMTEyMDpcdFxuMTEyMTpcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19OVU0pKSBcdTAwMjZcdTAwMjZcbjExMjI6XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtICE9IGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSlcbjExMjM6XHRcdFx0cmV0dXJuIDA7XG4xMTI0Olx0XG4xMTI1Olx0XHRzd2l0Y2ggKGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSkge1xuMTEyNjpcdFx0Y2FzZSBJUFBST1RPX1RDUDpcbjExMjc6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMTI4Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcdTAwMjZcdTAwMjZcbjExMjk6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydClcbjExMzA6XHRcdFx0XHRyZXR1cm4gMDtcbjExMzE6XHRcbjExMzI6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19EU1RfUE9SVCkpIFx1MDAyNlx1MDAyNlxuMTEzMzpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0KVxuMTEzNDpcdFx0XHRcdHJldHVybiAwO1xuMTEzNTpcdFx0XHRicmVhaztcbjExMzY6XHRcdGNhc2UgSVBQUk9UT19JQ01QOlxuMTEzNzpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFx1MDAyNlx1MDAyNlxuMTEzODpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LmljbXAudHlwZSAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUpXG4xMTM5Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTQwOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9DT0RFKSkgXHUwMDI2XHUwMDI2XG4xMTQxOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAuY29kZSlcbjExNDI6XHRcdFx0XHRyZXR1cm4gMDtcbjExNDM6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0lEKSkgXHUwMDI2XHUwMDI2XG4xMTQ0Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS5pY21wLmlkKVxuMTE0NTpcdFx0XHRcdHJldHVybiAwO1xuMTE0NjpcdFx0XHRicmVhaztcbjExNDc6XHRcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4xMTQ4Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUFY2X1RZUEUpKSBcdTAwMjZcdTAwMjZcbjExNDk6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC50eXBlKVxuMTE1MDpcdFx0XHRcdHJldHVybiAwO1xuMTE1MTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBWNl9DT0RFKSkgXHUwMDI2XHUwMDI2XG4xMTUyOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAuY29kZSlcbjExNTM6XHRcdFx0XHRyZXR1cm4gMDtcbjExNTQ6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QVjZfSUQpKSBcdTAwMjZcdTAwMjZcbjExNTU6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudS5pY21wLmlkICE9IGN0X3R1cGxlLVx1MDAzZXNyYy51LmljbXAuaWQpXG4xMTU2Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTU3Olx0XHRcdGJyZWFrO1xuMTE1ODpcdFx0fVxuMTE1OTpcdFxuMTE2MDpcdFx0cmV0dXJuIDE7XG4xMTYxOlx0fVxuMTE2MjpcdFxuMTE2MzpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXG4xMTY0Olx0e1xuMTE2NTpcdFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlciA9IGRhdGE7XG4xMTY2Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbjExNjc6XHRcdHUzMiBzdGF0dXM7XG4xMTY4Olx0XG4xMTY5Olx0XHRpZiAoZmlsdGVyID09IE5VTEwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTQ3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLY29uZmlnIE9wdGlvbnMgZm9yIG5mX2Nvbm50cmFja19uZXRsaW5rLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJiMzOTttIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBhIHBhcnRpY3VsYXIgZmlsZSBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2x1ZXMgdGhhdCBNYWtlZmlsZSBob2xkcy4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvZGUgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHRoYXQgdGhlIE1ha2VmaWxlIGdpdmVzIG1lIGEgY2xlYXIgaW5kaWNhdGlvbi4gTm8gdGltZSB0byB3YXN0ZSwgbGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgJiM0Mzs9IG5mX2Nvbm50cmFjay5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zNi0jIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBuZl9jb25udHJhY2tcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICYjNDM7PSBuZl9jb25udHJhY2tfbmV0bGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICYjNDM7PSBuZm5ldGxpbmtfY3R0aW1lb3V0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIE5ldGZpbHRlciYjMzk7cyBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZC4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgS2NvbmZpZyBmaWxlIGZvciBuZXRmaWx0ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBDT05GSUdfTkZfQ1RfTkVUTElOS2Agd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgd2hldGhlciBOZXRsaW5rIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGF0IGlzIHRoZSBpbml0aWFsIHBpZWNlIG9mIGRhdGEgSSByZXF1aXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY3LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzc0LVx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyBgbmV0L25ldGZpbHRlci9LY29uZmlnYCAtIExpbmUgMzY2IGFuZCBTdXJyb3VuZHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gbGluZXMgYXJvdW5kIDM2Ni4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2Ygd2hhdCYjMzk7cyBiZWluZyBjb25maWd1cmVkIHRoZXJlLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCB0aGUgYmxvY2sgb2Ygb3B0aW9ucywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRpb25zaGlwcyBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgZGVmaW5pbmcgb3IgY29uZmlndXJpbmcgc29tZSBhc3BlY3Qgb2YgbmV0ZmlsdGVyLCBsaWtlbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgbW9kdWxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlICYjMzQ7Y29uZmlnLCYjMzQ7ICYjMzQ7dHJpc3RhdGUsJiMzNDsgJiMzNDtib29sLCYjMzQ7ICYjMzQ7ZGVwZW5kcyBvbiwmIzM0OyAmIzM0O3NlbGVjdCwmIzM0OyBhbmQgJiMzNDtoZWxwJiMzNDsgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnVuY3Rpb25zIGFuZCBpbnRlcmFjdHMgd2l0aGluIHRoZSBvdmVyYWxsIG5ldGZpbHRlciBmcmFtZXdvcmsuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgbW9yZSBjb21wbGV4IG9uZS4gRWl0aGVyIHdheSwgbXkgYWltIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIG5ldGZpbHRlciBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cbiAzNjE6XHRcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xuIDM2MjpcdFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXG4gMzYzOlx0XG4gMzY0Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDM2NTpcdFxuIDM2NjpcdGNvbmZpZyBORl9DVF9ORVRMSU5LXG4gMzY3Olx0XHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuIDM2ODpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzY5Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAzNzA6XHRcdGhlbHBcbiAzNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZVxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcbiAzNzQ6XHRcdHRyaXN0YXRlICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsmIzM5O1xuIDM3NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDM3NzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxuIDM3ODpcdFx0aGVscFxuIDM3OTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxuIDM4MDpcdFx0ICBmaW5lLWdyYWluIHR1bmluZy4gVGhpcyBhbGxvd3MgeW91IHRvIGF0dGFjaCBzcGVjaWZpYyB0aW1lb3V0XG4gMzgxOlx0XHQgIHBvbGljaWVzIHRvIGZsb3dzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBnbG9iYWwgdGltZW91dCBwb2xpY3kuXG4gMzgyOlx0XG4gMzgzOlx0XHQgIElmIHVuc3VyZSwgc2F5IGBOJiMzOTsuXG4gMzg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgTkZfQ1RfTkVUTElOS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NUX05FVExJTktgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMsIGxpa2VseSBsaWtlIGBORl9DT05OVFJBQ0tgIG9yIHRoZSBicm9hZGVyIGBORVRGSUxURVJgIHN1YnN5c3RlbSwgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcy4KClRoZXJlZm9yZSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uc3VsdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYG1lbnVjb25maWcgTkZfQ09OTlRSQUNLYCBlbnRyeSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgYW5kIGxpbmthZ2Ugd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLCBlbmFibGluZyBtZSB0byBtYXAgZGVwZW5kZW5jaWVzLCB1bmRlcnN0YW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHNlZSBob3cgYE5GX0NUX05FVExJTktgIGZpdHMgd2l0aGluIHRoZSBicm9hZGVyIG5ldGZpbHRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIGN0bmV0bGluayBGaWx0ZXIgQWxsb2NhdGlvbiBhbmQgUGFyc2luZyoqCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgIGFuZCBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHRyYWNlIHRoZWlyIGNhbGwgaGllcmFyY2h5IGFuZCBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmaWx0ZXIgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgdGhhdCBtZWFucyBzZWVpbmcgKndobyogY2FsbHMgdGhlbS4gRmlyc3Qgc3RlcCBpcyB0byB1c2Ugc29tZSBzZWFyY2ggdG9vbHMgdG8gZmluZCB3aGVyZSBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgaXMgaW52b2tlZCB3aXRoaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmaWx0ZXIgYWxsb2NhdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdG5ldGxpbmtfYWxsb2NfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODg9c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5ODk6Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05OTAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4NC1cdGlmIChjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKGZhbWlseSwgY2RhKSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6XHRcdGZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhLCBmYW1pbHkpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwODYtXHRcdGlmIChJU19FUlIoZmlsdGVyKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5OT1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjEwLVx0aWYgKGN0bmV0bGlua19uZWVkc19maWx0ZXIoZmFtaWx5LCBjZGEpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTYxMTpcdFx0ZmlsdGVyID0gY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjZGEsIGZhbWlseSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTYxMi1cdFx0aWYgKElTX0VSUihmaWx0ZXIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAyNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldGxpbmsgQ29ubnRyYWNrIEludGVyZmFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgbmV0bGluayBjb25udHJhY2sgZnVuY3Rpb25zLi4uIEkgc2VlIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLCBgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja2AsIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAsIGBjdG5ldGxpbmtfZGVsX2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGhzLiBMZXQgbWUgY2hlY2s6IGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAsIGBjdG5ldGxpbmtfc3RhcnRgLCBgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gVGhlbiBJIHNob3VsZCBmb2N1cyBvbiBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLCBhbmQgcHJvYmFibHkgb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2l0aGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIG1hbmFnZXMgY29ubnRyYWNrIGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE1OTQ9c3RhdGljIGludCBjdG5ldGxpbmtfZmx1c2hfaXRlcmF0ZShzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1OTgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTU5OTpzdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MDAtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTYyND1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2NDctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY0ODpcdFx0cmV0dXJuIGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soaW5mby1cdTAwM2VuZXQsIGNkYSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjQ5LVx0XHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGluaXRpYWxpemVkIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGNvbm50cmFjayBuZXRsaW5rIGludGVyZmFjZSBzdGFydHMgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgZnVuY3Rpb24sIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1c2VyLXNwYWNlIHRvb2xzIGZvciByZXRyaWV2aW5nIGNvbm50cmFjayBpbmZvcm1hdGlvbi4gQnV0IHRoYXQmIzM5O3MgYSBkdW1wIGZ1bmN0aW9uLCBub3QgbmVjZXNzYXJpbHkgdGhlIGluaXRpYWxpemF0aW9uIGl0c2VsZiwgYWx0aG91Z2ggaXQgbWlnaHQgcHJvdmlkZSBjbHVlcyB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSByZWZlcmVuY2VzIHRvIGBjdG5ldGxpbmtfc3RhcnRgIGFzIHdlbGwuIFRoYXQgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UsIHNvIEkmIzM5O2xsIHByaW9yaXRpemUgdGhvc2UgY2FsbHMuIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBuZXRsaW5rIGludGVyZmFjZSBnZXRzIHJlZ2lzdGVyZWQgYW5kIGFjdGl2YXRlZCwgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZyb20gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjb25udHJhY2sgc3RhdGUgbWFjaGluZSYjMzk7cyBpbml0aWFsIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdG5ldGxpbmtfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNzI9c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDc2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwNzc6c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNzgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5MC1cdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY5MTpcdFx0XHQuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5Mi1cdFx0XHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBjdG5ldGxpbmtgIHN0dWZmLCBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgZm9jdXMgb24gd2hhdCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGRvZXMgZXhhY3RseS4gVGhhdCYjMzk7cyB0aGUgY29yZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEyMjE9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEyMjI6Y3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMjMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5MS1cdFx0XHQuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY5MjpcdFx0XHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2OTMtXHRcdFx0LmRvbmUgPSBjdG5ldGxpbmtfZG9uZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MzgKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogMTAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYENUQV9GSUxURVJfWk9ORWAgYXR0cmlidXRlIG5lc3RlZCB3aXRoaW4gYENUQV9GSUxURVJgIGZvciBjb25udHJhY2sgZmlsdGVyaW5nLiBMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0OgoKMS4gICoqQXR0cmlidXRlIEFkZGl0aW9uOioqIGBDVEFfRklMVEVSX1pPTkVgIGdldHMgYWRkZWQgdG8gYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgYXMgYSBmbGFnIChgTkxBX0ZMQUdgKS4gV2hlbiBwYXJzaW5nLCBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcigpYCBub3cgY2hlY2tzIGZvciB0aGlzIGZsYWcgYW5kIHNldHMgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgPSB0cnVlO2AgaWYgaXQmIzM5O3MgcHJlc2VudC4gSW4gYWxsb2NhdGlvbiB3aXRoIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKClgLCB0aGVyZSYjMzk7cyBhIGNydWNpYWwgY2hlY2s6IGlmIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCBpcyB0cnVlIChtZWFuaW5nIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBgQ1RBX1pPTkVgIHdhcyBzZXQpLCBidXQgdGhlIHRvcC1sZXZlbCBgQ1RBX1pPTkVgIGlzICpub3QqIHByZXNlbnQgKGAhY2RhW0NUQV9aT05FXWApLCBpdCBlcnJvcnMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGtleS4gVGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgb24gaXRzIG93biBjYW4gdHJpZ2dlciBhbiBlcnJvci4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCB3b3VsZCBiZSBzZXQgdHJ1ZSBpZiB0aGUgdG9wLWxldmVsIGBDVEFfWk9ORWAgd2FzIHByZXNlbnQsIG5vdyBpZiBhIHVzZXIgc2V0cyB0aGUgYENUQV9GSUxURVJfWk9ORWAgaXQgd2lsbCBiZSB0cnVlLCBidXQgaXQgZmFpbHMgaWYgdGhlcmUgaXNuJiMzOTt0IGEgY29ycmVzcG9uZGluZyBgQ1RBX1pPTkVgIG9uIHRoZSBtYWluIG1lc3NhZ2UuCgoyLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFVzZXIgc3BhY2UsIGJvdGggdW5wcml2aWxlZ2VkIGFuZCBwcml2aWxlZ2VkIChvciB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHdpdGggbmV0bGluay9uZXRmaWx0ZXIgYWNjZXNzKSwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGUgTmV0bGluayBtZXNzYWdlIHR5cGVzIGFyZSBgTkZOTF9TVUJTWVNfQ1RORVRMSU5LYCwgYElQQ1ROTF9NU0dfQ1RfR0VUYCwgYW5kIGBJUENUTkxfTVNHX0NUX0RFTEVURWAsIGFsbCBoYW5kbGVkIG92ZXIgdGhlIGBORVRMSU5LX05FVEZJTFRFUmAgc29ja2V0LCB1c2luZyBgQ1RBX0ZJTFRFUmAgYW5kIGBDVEFfWk9ORWAuIFRoaXMgaXMgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LCB0b3VjaGluZyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcy4gUUVNVS9zeXprYWxsZXIgc2hvdWxkIGJlIHBlcmZlY3RseSBmaW5lIGZvciB0ZXN0aW5nLgoKMy4gICoqV29ydGhGdXp6aW5nPXRydWU/OioqIEFic29sdXRlbHkhIFRoZSByZWFjaGFiaWxpdHksIE5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZywgYW5kIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb3JlIG1ha2UgdGhpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZnV6emluZy4KCjQuICAqKkZvY3VzIFN5bWJvbHM6KiogVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZToKCiAgICAqICAgYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgCiAgICAqICAgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgCiAgICAqICAgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgCiAgICAqICAgYGN0bmV0bGlua19zdGFydGAKICAgICogICBgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja2AKICAgICogICBgY3RuZXRsaW5rX2R1bXBfdGFibGVgCiAgICAqICAgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYAogICAgKiAgIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AKCiAgICBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgLmNgIGZpbGUgY2FuIGJlIHZpc2libGUgaW4ga2FsbHN5bXMgaW4gbW9kZXJuIGtlcm5lbHMsIHBhcnRpY3VsYXJseSB3aXRoIEtBU0FOL0tDT1YuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlc2UgbWF0Y2ggdGhlIG9uZXMgYXZhaWxhYmxlIGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4KCjUuICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBUaGUgZm9sbG93aW5nIGtlcm5lbCBjb25maWdzIGFyZSBlc3NlbnRpYWw6CgogICAgKiAgIGBORl9DT05OVFJBQ0tgCiAgICAqICAgYE5GX0NUX05FVExJTktgCiAgICAqICAgYE5FVEZJTFRFUl9ORVRMSU5LYCAoc2VsZWN0ZWQgYnkgYE5GX0NUX05FVExJTktgLCBidXQgZ29vZCB0byBpbmNsdWRlKQogICAgKiAgIGBORVRGSUxURVJgCgogICAgQSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBjb25maXJtczogYE5GX0NUX05FVExJTktgIGRlcGVuZHMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kIGBORl9DT05OVFJBQ0tgIGRlcGVuZHMgb24gYE5FVEZJTFRFUmAuIEFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjbGVhci4KCkV2ZXJ5dGhpbmcgbG9va3MgY29ycmVjdC4gSSBjYW4gbm93IHZlcmlmeSB0aGUgcmVzdWx0cyBhcmUgYWNjdXJhdGUgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19wYXJzZV9maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfcGFyc2VfZmlsdGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19nZXRfY29ubnRyYWNrJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kZWxfY29ubnRyYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQ1RBX0ZJTFRFUl9aT05FIGF0dHJpYnV0ZSBzdXBwb3J0IHRvIHRoZSBjb25udHJhY2sgbmV0bGluayBmaWx0ZXJpbmcgaW50ZXJmYWNlLCB1cGRhdGluZyBuZXRsaW5rIHBvbGljeSBhbmQgcGFyc2luZyBsb2dpYyBpbiBuZl9jb25udHJhY2tfbmV0bGluay5jLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIE5FVExJTktfTkVURklMVEVSIGNvbm50cmFjayBkdW1wIGFuZCBmbHVzaCByZXF1ZXN0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHk6XG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cbjMuIFpvbmUgcGFyc2luZyBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlIGNvbXBsZXRlbHkgdmlhIGBuZl9jdF96b25lX2luaXQoKWAuXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbAppbmRleCBiMWViMTAyYWI4NDMyLi5jZmMxMTNiYTM0MDI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sCkBAIC0zNzEsNiAmIzQzOzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgbmFtZTogcmVwbHktZmxhZ3MKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb24KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB6b25lCiYjNDM7ICAgICAgICB0eXBlOiBmbGFnCiYjNDM7ICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lCiYjNDM7ICAgICAgICAgIChgYENUQV9aT05FYGApIGF0dHJpYnV0ZQogICAtCiAgICAgbmFtZTogY29ubnRyYWNrLWF0dHJzCiAgICAgYXR0cmlidXRlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKaW5kZXggNDMyMzNhZjc1YjlkNS4uOTg1ZjljMDhkM2U5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgZW51bSBjdGF0dHJfZmlsdGVyIHsKIAlDVEFfRklMVEVSX1VOU1BFQywKIAlDVEFfRklMVEVSX09SSUdfRkxBR1MsCiAJQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHUywKJiM0MzsJQ1RBX0ZJTFRFUl9aT05FLAogCV9fQ1RBX0ZJTFRFUl9NQVgKIH07CiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA5YjRlMjk1NTdlYzMzLi5mZmMyOWE0MDc3NDlkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC05MTEsNiAmIzQzOzkxMSw3IEBAIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV0gPSB7CiAJW0NUQV9GSUxURVJfT1JJR19GTEFHU10JCT0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLAogCVtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXQk9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSwKJiM0MzsJW0NUQV9GSUxURVJfWk9ORV0JCT0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiB9OwogCiBzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwKQEAgLTkzMCw2ICYjNDM7OTMxLDkgQEAgc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJaWYgKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKQogCQlmaWx0ZXItJmd0O3JlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pOwogCiYjNDM7CWlmICh0YltDVEFfRklMVEVSX1pPTkVdKQomIzQzOwkJZmlsdGVyLSZndDt6b25lX2ZpbHRlciA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDYsNiAmIzQzOzEwMTAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZpbHRlcjsKIAomIzQzOwkvKiBDVEFfWk9ORSBpcyBhbGxvd2VkIHdpdGhvdXQgQ1RBX0ZJTFRFUl9aT05FLiAqLwogCWlmIChjZGFbQ1RBX1pPTkVdKSB7CiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sICZhbXA7ZmlsdGVyLSZndDt6b25lKTsKIAkJaWYgKGVyciAmbHQ7IDApCkBAIC0xMDIwLDYgJiM0MzsxMDI1LDEyIEBAIGN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpCiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX2ZpbHRlcjsKIAomIzQzOwkvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqLwomIzQzOwlpZiAoZmlsdGVyLSZndDt6b25lX2ZpbHRlciAmYW1wOyZhbXA7ICFjZGFbQ1RBX1pPTkVdKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfZmlsdGVyOwomIzQzOwl9CiYjNDM7CiAJaWYgKGZpbHRlci0mZ3Q7b3JpZ19mbGFncykgewogCQlpZiAoIWNkYVtDVEFfVFVQTEVfT1JJR10pIHsKIAkJCWVyciA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMKaW5kZXggMzFiODI1MGRkYzUzZC4uNjNmNDEzNTZmZTZkNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYwpAQCAtMjE1LDcgJiM0MzsyMTUsMjIgQEAgc3RhdGljIGludCBjb3VudF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpkYXRhKQogCXJldHVybiBNTkxfQ0JfT0s7CiB9CiAKLXN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpCiYjNDM7c3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSwKJiM0MzsJCQkgIGJvb2wgdXNlX2N0YV9maWx0ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxhdHRyICpuZXN0OwomIzQzOwomIzQzOwltbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTsKJiM0MzsKJiM0MzsJaWYgKHVzZV9jdGFfZmlsdGVyKSB7CiYjNDM7CQluZXN0ID0gbW5sX2F0dHJfbmVzdF9zdGFydChubGgsIENUQV9GSUxURVIpOwomIzQzOwkJbW5sX2F0dHJfcHV0KG5saCwgQ1RBX0ZJTFRFUl9aT05FLCAwLCBOVUxMKTsKJiM0MzsJCW1ubF9hdHRyX25lc3RfZW5kKG5saCwgbmVzdCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSwKJiM0MzsJCQkJYm9vbCB1c2VfY3RhX2ZpbHRlcikKIHsKIAljaGFyIGJ1ZltNTkxfU09DS0VUX0JVRkZFUl9TSVpFXTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKQEAgLTIzNSw3ICYjNDM7MjUwLDcgQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKIAluZmgtJmd0O3ZlcnNpb24gPSBORk5FVExJTktfVjA7CiAJbmZoLSZndDtyZXNfaWQgPSAwOwogCi0JbW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7CiYjNDM7CXB1dF96b25lX2F0dHIobmxoLCB6b25lLCB1c2VfY3RhX2ZpbHRlcik7CiAKIAlyZXQgPSBtbmxfc29ja2V0X3NlbmR0byhzb2NrLCBubGgsIG5saC0mZ3Q7bmxtc2dfbGVuKTsKIAlpZiAocmV0ICZsdDsgMCkgewpAQCAtMjYxLDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19jb3VudF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQogCXJldHVybiByZXBseV9jb3VudGVyOwogfQogCi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQomIzQzO3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsCiYjNDM7CQkJCWJvb2wgdXNlX2N0YV9maWx0ZXIpCiB7CiAJY2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CkBAIC0yODEsNyAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpCiAJbmZoLSZndDt2ZXJzaW9uID0gTkZORVRMSU5LX1YwOwogCW5maC0mZ3Q7cmVzX2lkID0gMDsKIAotCW1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpOwomIzQzOwlwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpOwogCiAJcmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtJmd0O25sbXNnX2xlbik7CiAJaWYgKHJldCAmbHQ7IDApIHsKQEAgLTMwNCw0MyAmIzQzOzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQogCXJldHVybiAwOwogfQogCi1GSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKQotewotCXN0cnVjdCBtbmxfc29ja2V0ICpzb2NrOwotfTsKLQotRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKJiM0MztzdGF0aWMgaW50IGNvbm50cmFja196b25lX3NldHVwKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKJiM0MzsJCQkJc3RydWN0IG1ubF9zb2NrZXQgKipzb2NrKQogewogCXN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDsKIAlpbnQgcmV0OwogCi0Jc2VsZi0mZ3Q7c29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7Ci0JaWYgKCFzZWxmLSZndDtzb2NrKSB7CiYjNDM7CSpzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTsKJiM0MzsJaWYgKCEqc29jaykgewogCQlwZXJyb3IoJiMzNDttbmxfc29ja2V0X29wZW4mIzM0Oyk7Ci0JCVNLSVAocmV0dXJuLCAmIzM0O2Nhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldCYjMzQ7KTsKJiM0MzsJCVNLSVAocmV0dXJuIC0xLCAmIzM0O2Nhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldCYjMzQ7KTsKIAl9CiAKLQlyZXQgPSBtbmxfc29ja2V0X2JpbmQoc2VsZi0mZ3Q7c29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTsKJiM0MzsJcmV0ID0gbW5sX3NvY2tldF9iaW5kKCpzb2NrLCAwLCBNTkxfU09DS0VUX0FVVE9QSUQpOwogCUVYUEVDVF9FUShyZXQsIDApOwogCi0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoKnNvY2ssIFRFU1RfWk9ORV9JRCwgZmFsc2UpOwogCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRVBFUk0pCi0JCVNLSVAocmV0dXJuLCAmIzM0O05lZWRzIHRvIGJlIHJ1biBhcyByb290JiMzNDspOwomIzQzOwkJU0tJUChyZXR1cm4gLTEsICYjMzQ7TmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QmIzM0Oyk7CiAJZWxzZSBpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVPUE5PVFNVUFApCi0JCVNLSVAocmV0dXJuLCAmIzM0O0tlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzJiMzNDspOwomIzQzOwkJU0tJUChyZXR1cm4gLTEsCiYjNDM7CQkgICAgICYjMzQ7S2VybmVsIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCBjb25udHJhY2sgem9uZXMmIzM0Oyk7CiAKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLSZndDtzb2NrLCAweGYwZjBmMGYwLCAweGYxZjFmMWYxLAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmMGYwZjBmMCwgMHhmMWYxZjFmMSwKIAkJCQkJIFRFU1RfWk9ORV9JRCk7Ci0JRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi0mZ3Q7c29jaywgMHhmMmYyZjJmMiwgMHhmM2YzZjNmMywKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLAogCQkJCQkgVEVTVF9aT05FX0lEICYjNDM7IDEpOwotCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtJmd0O3NvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsCiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSwKIAkJCQkJIFRFU1RfWk9ORV9JRCAmIzQzOyAyKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLSZndDtzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LAomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjZmNmY2ZjYsIDB4ZjdmN2Y3ZjcsCiAJCQkJCSBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwotCUVYUEVDVF9FUShyZXQsIDApOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKIAogCXNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7CiAJCS5fX3U2X2FkZHIzMiA9IHsKQEAgLTM1OCw5ICYjNDM7MzcxLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKIAkJCTB4MDIwMDAwMDAKIAkJfQogCX19OwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtJmd0O3NvY2ssIHNyYywgZHN0LAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsCiAJCQkJCSBURVNUX1pPTkVfSUQpOwotCUVYUEVDVF9FUShyZXQsIDApOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKIAlzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7ewogCQkuX191Nl9hZGRyMzIgPSB7CiAJCQkweGI4MGQwMTIwLApAQCAtMzc3LDkgJiM0MzszOTAsOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKQogCQkJMHgwNDAwMDAwMAogCQl9CiAJfX07Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi0mZ3Q7c29jaywgc3JjLCBkc3QsCiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCwKIAkJCQkJIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAJc3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3sKIAkJLl9fdTZfYWRkcjMyID0gewogCQkJMHhiODBkMDEyMCwKQEAgLTM5Niw5ICYjNDM7NDA5LDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKIAkJCTB4MDYwMDAwMDAKIAkJfQogCX19OwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtJmd0O3NvY2ssIHNyYywgZHN0LAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsCiAJCQkJCSBURVNUX1pPTkVfSUQgJiM0MzsgMik7Ci0JRVhQRUNUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwogCiAJc3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3sKIAkJLl9fdTZfYWRkcjMyID0gewpAQCAtNDE2LDE0ICYjNDM7NDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiAJCQkweDA4MDAwMDAwCiAJCX0KIAl9fTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLSZndDtzb2NrLCBzcmMsIGRzdCwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LAogCQkJCQkgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbmxfc29ja2V0ICpzb2NrOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGNvbm50cmFja19kdW1wX2ZsdXNoKQomIzQzO3sKJiM0MzsJYm9vbCB1c2VfY3RhX2ZpbHRlcjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV96b25lKQomIzQzO3sKJiM0MzsJLnVzZV9jdGFfZmlsdGVyID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfZmlsdGVyKQomIzQzO3sKJiM0MzsJLnVzZV9jdGFfZmlsdGVyID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoY29ubnRyYWNrX3pvbmVfc2V0dXAoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O3NvY2spKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTsKIAlFWFBFQ1RfR0UocmV0LCAyKTsKIAlpZiAocmV0ICZndDsgMikKIAkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgZmlsdGVyaW5nIGJ5IHpvbmUmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDt1c2VfY3RhX2ZpbHRlcikgewomIzQzOwkJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCB0cnVlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMKQomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENUQV9GSUxURVJfWk9ORSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9HRShyZXQsIDApOwomIzQzOwl9CiB9CiAKIEZJWFRVUkVfVEVBUkRPV04oY29ubnRyYWNrX2R1bXBfZmx1c2gpCkBAIC00MzQsMzkgJiM0Mzs0ODQsNDIgQEAgVEVTVF9GKGNvbm50cmFja19kdW1wX2ZsdXNoLCB0ZXN0X2R1bXBfYnlfem9uZSkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELAomIzQzOwkJCQkgICB2YXJpYW50LSZndDt1c2VfY3RhX2ZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7CiB9CiAKIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKQogewomIzQzOwlib29sIGZpbHRlciA9IHZhcmlhbnQtJmd0O3VzZV9jdGFfZmlsdGVyOwogCWludCByZXQ7CiAKLQlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDEsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDIpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAyKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7CiB9CiAKIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpCiB7CiYjNDM7CWJvb2wgZmlsdGVyID0gdmFyaWFudC0mZ3Q7dXNlX2N0YV9maWx0ZXI7CiAJaW50IHJldDsKIAotCXJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDEpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAyKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMik7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAyLCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoqKkFuYWx5emluZyBUaGlzIENvZGUgQ2hhbmdlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGlzIGFjdHVhbGx5IHV0aWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBnby10byB0b29scywgcHJvYmFibHkgYGdyZXBgIGFuZCBhIGByZWFkLWZpbGVgIGNvbW1hbmQsIHRvIGVmZmVjdGl2ZWx5IG5hdmlnYXRlIGFuZCBkaXNzZWN0IHRoZSBjb2RlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIGlkZWEgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pvbmVfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTg5Nj1zdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk3LVx0dTggZmFtaWx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjg5ODpcdGJvb2wgem9uZV9maWx0ZXI7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNC1cdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkzNTpcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE3LVx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDE4Olx0XHRmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTktXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjgtXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwMjk6XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMzAtXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTExNjM9c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc5Olx0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgwLVx0ICAgICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRhc2ssIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byBkZWx2ZSBpbnRvIHRoZSBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AgZmlsZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvIGV4YW1pbmUgdGhlIGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmAgYW5kIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG5ldGxpbmsgZmlsdGVycyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbm50cmFjayBmcmFtZXdvcmsuIFdoYXQgZmllbGRzIGRvZXMgYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCBjb250YWluPyBXaGF0IGRvZXMgaXQgdXNlIHRvIHJlcHJlc2VudCB0aGUgY3JpdGVyaWEgZm9yIGZpbHRlcmluZyBjb25udHJhY2sgZW50cmllcz8gSXMgaXQgYmFzZWQgb24gYXR0cmlidXRlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZXNlIGZpbHRlciBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBhbmQsIGltcGxpY2l0bHksIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBmb3IgdGhlIGZpbHRlcmluZyBwcm9jZXNzLiBJcyBpdCBhbGxvY2F0aW5nIGEgc2ltcGxlIHN0cnVjdHVyZSwgb3IgaXMgdGhlcmUgYSBkeW5hbWljIGNvbXBvbmVudD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBsZWFrcyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb21lIHRvIG1pbmQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnMgZHVyaW5nIHRoZSBhbGxvY2F0aW9uPyBIb3cgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB1c2VkIGluIHRoZSBicm9hZGVyIG5ldGxpbmsgdHJhbnNhY3Rpb24gZmxvdyBmb3IgY29ubnRyYWNrIGRhdGE/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZmlsdGVyJiMzOTtzIGxpZmVjeWNsZS4gSG93IGFyZSBmaWx0ZXJzIGNyZWF0ZWQsIG1vZGlmaWVkIChpZiBhdCBhbGwpLCBhbmQgZGVzdHJveWVkPyBJcyB0aGVyZSBhIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20/IEFuZCB2ZXJ5IGltcG9ydGFudGx5LCBob3cgYXJlIHRoZXNlIGZpbHRlcnMgYWN0dWFsbHkgKnVzZWQqIHRvIG1hdGNoIGFnYWluc3QgY29ubnRyYWNrIGVudHJpZXM/IFdoYXQgaXMgdGhlIG1hdGNoaW5nIGFsZ29yaXRobSwgYW5kIHdoZXJlIGlzIGl0IGltcGxlbWVudGVkPwoKSSBhbHNvIHdhbnQgdG8gdHJ5IGFuZCBkZWR1Y2UgYW55IGltcGxpY2F0aW9ucyBmcm9tIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGVtc2VsdmVzLiBGb3IgZXhhbXBsZSwgdGhlIGBjdG5ldGxpbmtfYCBwcmVmaXggaGludHMgdGhhdCB0aGlzIGNvZGUgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyB0aGlzIGZpbHRlcmluZyBjYXBhYmlsaXR5IGludGVyZmFjZXMgd2l0aCB0aGUgdXNlciBzcGFjZSBjb25udHJhY2sgdXRpbGl0aWVzLiBJcyB0aGVyZSBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGNvbm50cmFjayBhbmQgd2hhdCYjMzk7cyBleHBvc2VkIHZpYSBuZXRsaW5rPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5NTpcdFxuIDg5NjpcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHtcbiA4OTc6XHRcdHU4IGZhbWlseTtcbiA4OTg6XHRcdGJvb2wgem9uZV9maWx0ZXI7XG4gODk5Olx0XG4gOTAwOlx0XHR1X2ludDMyX3Qgb3JpZ19mbGFncztcbiA5MDE6XHRcdHVfaW50MzJfdCByZXBseV9mbGFncztcbiA5MDI6XHRcbiA5MDM6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3JpZztcbiA5MDQ6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgcmVwbHk7XG4gOTA1Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgem9uZTtcbiA5MDY6XHRcbiA5MDc6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBtYXJrO1xuIDkwODpcdFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyIHN0YXR1cztcbiA5MDk6XHR9O1xuIDkxMDpcdFxuIDkxMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV0gPSB7XG4gOTEyOlx0XHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcbiA5MTM6XHRcdFtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gOTE0Olx0XHRbQ1RBX0ZJTFRFUl9aT05FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIDkxNTpcdH07XG4gOTE2Olx0XG4gOTE3Olx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gOTE4Olx0XHRcdFx0XHQgIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIpXG4gOTE5Olx0e1xuIDkyMDpcdFx0c3RydWN0IG5sYXR0ciAqdGJbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV07XG4gOTIxOlx0XHRpbnQgcmV0ID0gMDtcbiA5MjI6XHRcbiA5MjM6XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9GSUxURVJfTUFYLCBhdHRyLCBjdGFfZmlsdGVyX25sYV9wb2xpY3ksXG4gOTI0Olx0XHRcdFx0ICAgICAgIE5VTEwpO1xuIDkyNTpcdFx0aWYgKHJldClcbiA5MjY6XHRcdFx0cmV0dXJuIHJldDtcbiA5Mjc6XHRcbiA5Mjg6XHRcdGlmICh0YltDVEFfRklMVEVSX09SSUdfRkxBR1NdKVxuIDkyOTpcdFx0XHRmaWx0ZXItXHUwMDNlb3JpZ19mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfT1JJR19GTEFHU10pO1xuIDkzMDpcdFxuIDkzMTpcdFx0aWYgKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKVxuIDkzMjpcdFx0XHRmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSk7XG4gOTMzOlx0XG4gOTM0Olx0XHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcbiA5MzU6XHRcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbiA5MzY6XHRcbiA5Mzc6XHRcdHJldHVybiAwO1xuIDkzODpcdH1cbiA5Mzk6XHRcbiA5NDA6XHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gOTQxOlx0XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpO1xuIDk0MjpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sXG4gOTQzOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbiA5NDQ6XHRcdFx0XHRcdFx0IHUzMiB0eXBlLCB1X2ludDhfdCBsM251bSxcbiA5NDU6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSxcbiA5NDY6XHRcdFx0XHRcdFx0IHVfaW50MzJfdCBmbGFncyk7XG4gOTQ3Olx0XG4gOTQ4Olx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoc3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyICptYXJrLFxuIDk0OTpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcbiA5NTA6XHR7XG4gOTUxOlx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xuIDk1MjpcdFx0aWYgKGNkYVtDVEFfTUFSS10pIHtcbiA5NTM6XHRcdFx0bWFyay1cdTAwM2V2YWwgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLXSkpO1xuIDk1NDpcdFxuIDk1NTpcdFx0XHRpZiAoY2RhW0NUQV9NQVJLX01BU0tdKVxuIDk1NjpcdFx0XHRcdG1hcmstXHUwMDNlbWFzayA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX01BUktfTUFTS10pKTtcbiA5NTc6XHRcdFx0ZWxzZVxuIDk1ODpcdFx0XHRcdG1hcmstXHUwMDNlbWFzayA9IDB4ZmZmZmZmZmY7XG4gOTU5Olx0XHR9IGVsc2UgaWYgKGNkYVtDVEFfTUFSS19NQVNLXSkge1xuIDk2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5NjE6XHRcdH1cbiA5NjI6XHQjZW5kaWZcbiA5NjM6XHRcdHJldHVybiAwO1xuIDk2NDpcdH1cbiA5NjU6XHRcbiA5NjY6XHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfcGFyc2Vfc3RhdHVzKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqc3RhdHVzLFxuIDk2NzpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxuIDk2ODpcdHtcbiA5Njk6XHRcdGlmIChjZGFbQ1RBX1NUQVRVU10pIHtcbiA5NzA6XHRcdFx0c3RhdHVzLVx1MDAzZXZhbCA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1NUQVRVU10pKTtcbiA5NzE6XHRcdFx0aWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKVxuIDk3MjpcdFx0XHRcdHN0YXR1cy1cdTAwM2VtYXNrID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfU1RBVFVTX01BU0tdKSk7XG4gOTczOlx0XHRcdGVsc2VcbiA5NzQ6XHRcdFx0XHRzdGF0dXMtXHUwMDNlbWFzayA9IHN0YXR1cy1cdTAwM2V2YWw7XG4gOTc1Olx0XG4gOTc2Olx0XHRcdC8qIHN0YXR1cy1cdTAwM2V2YWwgPT0gMD8gYWx3YXlzIHRydWUsIGVsc2UgYWx3YXlzIGZhbHNlLiAqL1xuIDk3NzpcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZW1hc2sgPT0gMClcbiA5Nzg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5Nzk6XHRcdH0gZWxzZSBpZiAoY2RhW0NUQV9TVEFUVVNfTUFTS10pIHtcbiA5ODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTgxOlx0XHR9XG4gOTgyOlx0XG4gOTgzOlx0XHQvKiBDVEFfU1RBVFVTIGlzIE5MQV9VMzIsIGlmIHRoaXMgZmlyZXMgVUFQSSBuZWVkcyB0byBiZSBleHRlbmRlZCAqL1xuIDk4NDpcdFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXHUwMDNlPSAzMik7XG4gOTg1Olx0XHRyZXR1cm4gMDtcbiA5ODY6XHR9XG4gOTg3Olx0XG4gOTg4Olx0c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcbiA5ODk6XHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIDk5MDpcdHtcbiA5OTE6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXI7XG4gOTkyOlx0XHRpbnQgZXJyO1xuIDk5MzpcdFxuIDk5NDpcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBuZl9jb25udHJhY2tfbmV0bGluay5jOiBMaW5lcyA5OTUtMTA2MCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA5OTUgdG8gMTA2MCBvZiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFJpZ2h0LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgcHJvYmFibHkgaGFuZGxpbmcgYSBzcGVjaWZpYyBjb21tYW5kIG9yIGF0dHJpYnV0ZSBzZXQuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIGVpdGhlciBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uIHJldHJpZXZhbCwgbW9kaWZpY2F0aW9uLCBvciBtYXliZSBldmVudCBub3RpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkIGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGhhbmRsaW5nIHRoZSB2YXJpb3VzIG5ldGxpbmsgbWVzc2FnZXMsIGVzcGVjaWFsbHkgaWYgdGhlcmUmIzM5O3MgYW55IGNvbXBsZXggYXR0cmlidXRlIHBhcnNpbmcgb3IgZXJyb3IgY2hlY2tpbmcgaW52b2x2ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZsb3cgb2YgZGF0YTogd2hlcmUgaXQmIzM5O3MgY29taW5nIGZyb20sIGhvdyBpdCYjMzk7cyBiZWluZyBpbnRlcnByZXRlZCwgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIGJlaW5nIHRyaWdnZXJlZCBiYXNlZCBvbiB0aGUgZGF0YS4gSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIG1hbmFnZWQgY29ycmVjdGx5IGFuZCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgaW50ZXJmYWNpbmcgdGhlIGNvbm50cmFjayBzeXN0ZW0gd2l0aCB1c2VyIHNwYWNlLCBzbyBhbnkgZWZmaWNpZW5jeSBib3R0bGVuZWNrcyBoZXJlIHdvdWxkIGJlIGV4dHJlbWVseSBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IGF0dHJpYnV0ZSB0eXBlcyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIGluamVjdGlvbiBmbGF3cy4gQW55IHNwZWNpYWwgY2FyZSByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYWxzbyBpbXBvcnRhbnQgLSBsZWFrcyBhcmUgbmV2ZXIgYWNjZXB0YWJsZS4gQWxzbywgSSYjMzk7bSBjdXJpb3VzIHdoZXRoZXIgYW55IHNwZWNpZmljIGZpbHRlcmluZyBvciBtYXRjaGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5NTpcdFx0aWYgKGNkYVtDVEFfTUFSS10gfHwgY2RhW0NUQV9NQVJLX01BU0tdKVxuIDk5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4gOTk3Olx0I2VuZGlmXG4gOTk4Olx0XG4gOTk5Olx0XHRmaWx0ZXIgPSBremFsbG9jX29iaigqZmlsdGVyKTtcbjEwMDA6XHRcdGlmIChmaWx0ZXIgPT0gTlVMTClcbjEwMDE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xMDAyOlx0XG4xMDAzOlx0XHRmaWx0ZXItXHUwMDNlZmFtaWx5ID0gZmFtaWx5O1xuMTAwNDpcdFxuMTAwNTpcdFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKFx1MDAyNmZpbHRlci1cdTAwM2VtYXJrLCBjZGEpO1xuMTAwNjpcdFx0aWYgKGVycilcbjEwMDc6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAwODpcdFxuMTAwOTpcdFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9zdGF0dXMoXHUwMDI2ZmlsdGVyLVx1MDAzZXN0YXR1cywgY2RhKTtcbjEwMTA6XHRcdGlmIChlcnIpXG4xMDExOlx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMTI6XHRcbjEwMTM6XHRcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4xMDE0Olx0XHRpZiAoY2RhW0NUQV9aT05FXSkge1xuMTAxNTpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4xMDE2Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDE3Olx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAxODpcdFx0XHRmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xuMTAxOTpcdFx0fVxuMTAyMDpcdFxuMTAyMTpcdFx0aWYgKCFjZGFbQ1RBX0ZJTFRFUl0pXG4xMDIyOlx0XHRcdHJldHVybiBmaWx0ZXI7XG4xMDIzOlx0XG4xMDI0Olx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNkYVtDVEFfRklMVEVSXSwgZmlsdGVyKTtcbjEwMjU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDI2Olx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMjc6XHRcbjEwMjg6XHRcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXG4xMDI5Olx0XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xuMTAzMDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTAzMTpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDMyOlx0XHR9XG4xMDMzOlx0XG4xMDM0Olx0XHRpZiAoZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpIHtcbjEwMzU6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7XG4xMDM2Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEwMzc6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDM4Olx0XHRcdH1cbjEwMzk6XHRcbjEwNDA6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFx1MDAyNmZpbHRlci1cdTAwM2VvcmlnLFxuMTA0MTpcdFx0XHRcdFx0XHRcdCAgIENUQV9UVVBMRV9PUklHLFxuMTA0MjpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDQzOlx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDQ0Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpO1xuMTA0NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTA0NjpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdGlmIChmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpIHtcbjEwNTA6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX1JFUExZXSkge1xuMTA1MTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMDUyOlx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTA1MzpcdFx0XHR9XG4xMDU0Olx0XG4xMDU1Olx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmVwbHksXG4xMDU2Olx0XHRcdFx0XHRcdFx0ICAgQ1RBX1RVUExFX1JFUExZLFxuMTA1NzpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDU4Olx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDU5Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzKTtcbjEwNjA6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwNjE6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XG4xMDY0Olx0XHRyZXR1cm4gZmlsdGVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEZpbHRlciBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZpbHRlciBpcyBhbGxvY2F0ZWQgYW5kIHBhcnNlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB6b25lIGZpbHRlcmluZy4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAsIHdoZXJlIHRoZSBgZmlsdGVyYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBpcyBjcml0aWNhbCBhcyBpdCB6ZXJvZXMgb3V0IGFsbCBmaWVsZHMsIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLgoKTm93LCB0aGUgZmxvdy4gRmlyc3QsIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgaXMgY2FsbGVkLiBJZiB0aGUgQ29tbW9uIERhdGEgQXR0cmlidXRlIChDREEpIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGlzIHNldCB0byBgdHJ1ZWAgYW5kIHRoZSB6b25lIGlzIHBhcnNlZC4gT3RoZXJ3aXNlLCBub3RoaW5nIGhhcHBlbnMgYXQgdGhpcyBzdGFnZSBhbmQgYHpvbmVfZmlsdGVyYCByZW1haW5zIGBmYWxzZWAuCgpUaGVuLCBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcmAga2lja3MgaW4uIEhlcmUmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSW5zaWRlIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgdGhlIHByZXNlbmNlIG9mIGEgbmVzdGVkIGF0dHJpYnV0ZSBgQ1RBX0ZJTFRFUl9aT05FYCB3aXRoaW4gdGhlIENEQSB0YWJsZSBzZXRzIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCB0byBgdHJ1ZWAuIFRoaXMgY3JlYXRlcyBhIHBvdGVudGlhbCBjb25mbGljdC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB0aGlzIGNoZWNrOiBgaWYgKGZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgJmFtcDsmYW1wOyAhY2RhW0NUQV9aT05FXSlgLiBJZiBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBzZXQsIGFuZCAqb25seSogYENUQV9GSUxURVJfWk9ORWAgaXMgc2V0IChidXQgbm90IHRoZSBgQ1RBX1pPTkVgKSwgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGJlY29tZXMgYHRydWVgIGJlY2F1c2UgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgc2V0cyBpdC4gQnV0IHRoZSBzdWJzZXF1ZW50IGNoZWNrIGltbWVkaWF0ZWx5IGVycm9ycyBvdXQhIEl0JiMzOTtzIGFuIGBFSU5WQUxgIGVycm9yLiBUaGlzIG1lYW5zIHlvdSBjYW4mIzM5O3Qgc3BlY2lmeSBhIHpvbmUgZmlsdGVyIG5lc3RlZCB3aXRoaW4gdGhlIGZpbHRlciBpdHNlbGYgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBgQ1RBX1pPTkVgIGluIHRoZSB0b3AgbGV2ZWwuIFRoZSBkZXNpZ24gc2VlbXMgdG8gaGF2ZSBhIHByb2JsZW0uCgpCYXNpY2FsbHksIGlmIHRoZSBvdXRlciBgQ1RBX1pPTkVgIGlzICpub3QqIHByZXNlbnQgYnV0IHRoZSBpbm5lciBgQ1RBX0ZJTFRFUl9aT05FYCBpcywgdGhlbiB5b3UgaW1tZWRpYXRlbHkgZ2V0IGFuIGludmFsaWQgYXJndW1lbnQgZXJyb3IuIEl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9yIGluY29uc2lzdGVuY3kgaW4gdGhlIGV4cGVjdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZGlnIGludG8gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGFuZCBgZmlsdGVyLSZndDt6b25lYCBhcmUgKmFjdHVhbGx5KiB1c2VkLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoaXMgaXMganVzdCBhIG1pbm9yIHZhbGlkYXRpb24gZXJyb3IsIG9yIGEgZnVuZGFtZW50YWwgZmxhdyBpbiB0aGUgZmlsdGVyaW5nIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCwgYW5kIGlmIHRoZSBmaWx0ZXJpbmcgcHJvY2VzcyBjYW4gZXZlbiBvcGVyYXRlIGNvcnJlY3RseSB3aGVuIHRoaXMgc2NlbmFyaW8gaXMgcHJldmVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE2MDpcdFx0cmV0dXJuIDE7XG4xMTYxOlx0fVxuMTE2MjpcdFxuMTE2MzpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXG4xMTY0Olx0e1xuMTE2NTpcdFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlciA9IGRhdGE7XG4xMTY2Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbjExNjc6XHRcdHUzMiBzdGF0dXM7XG4xMTY4Olx0XG4xMTY5Olx0XHRpZiAoZmlsdGVyID09IE5VTEwpXG4xMTcwOlx0XHRcdGdvdG8gb3V0O1xuMTE3MTpcdFxuMTE3MjpcdFx0LyogTWF0Y2ggZW50cmllcyBvZiBhIGdpdmVuIEwzIHByb3RvY29sIG51bWJlci5cbjExNzM6XHRcdCAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIGllLiBsM3Byb3RvID09IDAsXG4xMTc0Olx0XHQgKiB0aGVuIG1hdGNoIGV2ZXJ5dGhpbmcuXG4xMTc1Olx0XHQgKi9cbjExNzY6XHRcdGlmIChmaWx0ZXItXHUwMDNlZmFtaWx5IFx1MDAyNlx1MDAyNiBuZl9jdF9sM251bShjdCkgIT0gZmlsdGVyLVx1MDAzZWZhbWlseSlcbjExNzc6XHRcdFx0Z290byBpZ25vcmVfZW50cnk7XG4xMTc4Olx0XG4xMTc5Olx0XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNlxuMTE4MDpcdFx0ICAgICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpKVxuMTE4MTpcdFx0XHRnb3RvIGlnbm9yZV9lbnRyeTtcbjExODI6XHRcbjExODM6XHRcdGlmIChmaWx0ZXItXHUwMDNlb3JpZ19mbGFncykge1xuMTE4NDpcdFx0XHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xuMTE4NTpcdFx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoXHUwMDI2ZmlsdGVyLVx1MDAzZW9yaWcsIHR1cGxlLFxuMTE4NjpcdFx0XHRcdFx0XHRcdCAgZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MsXG4xMTg3Olx0XHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlZmFtaWx5KSlcbjExODg6XHRcdFx0XHRnb3RvIGlnbm9yZV9lbnRyeTtcbjExODk6XHRcdH1cbjExOTA6XHRcbjExOTE6XHRcdGlmIChmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpIHtcbjExOTI6XHRcdFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX1JFUExZKTtcbjExOTM6XHRcdFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFx1MDAyNmZpbHRlci1cdTAwM2VyZXBseSwgdHVwbGUsXG4xMTk0Olx0XHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MsXG4xMTk1Olx0XHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlZmFtaWx5KSlcbjExOTY6XHRcdFx0XHRnb3RvIGlnbm9yZV9lbnRyeTtcbjExOTc6XHRcdH1cbjExOTg6XHRcbjExOTk6XHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIE5ldyBGaWx0ZXIgUG9saWN5IEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjdGFfZmlsdGVyX25sYV9wb2xpY3lgIHN0cnVjdHVyZS4gSSBzZWUgdGhhdCBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBzZXQgdG8gYC50eXBlID0gTkxBX0ZMQUdgIGluIHRoZXJlLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGFsc28gdmVyaWZpZWQgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBlbnVtIGBjdGF0dHJfZmlsdGVyYCBpbmNsdWRlcyBgQ1RBX0ZJTFRFUl9aT05FYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgY29uc2lzdGVuY3kuCgpJJiMzOTt2ZSBhbHNvIG1hZGUgc3VyZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHNlbGZ0ZXN0cyBhcmUgdXAgdG8gZGF0ZSwgY292ZXJpbmcgdGhpcyBuZXcgYWRkaXRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSBvdGhlciBwb2ludHMgaW4gdGhlIGNvZGViYXNlIHdoZXJlIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBwZXJoYXBzIHRoZSBvbGRlciBgem9uZV9maWx0ZXJgIGlzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBjbGVhbiBhbmQgZG9lc24mIzM5O3QgY29uZmxpY3Qgd2l0aCBvdGhlciBhcmVhcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogcGxhY2UgdGhpcyB6b25lIGZpbHRlciBmbGFnIGlzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1RBX0ZJTFRFUl9aT05FJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPTI4ND1lbnVtIGN0YXR0cl9maWx0ZXIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oLTI4Ny1cdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaDoyODg6XHRDVEFfRklMVEVSX1pPTkUsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaC0yODktXHRfX0NUQV9GSUxURVJfTUFYXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MTMtXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkxNDpcdFtDVEFfRklMVEVSX1pPTkVdXHRcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTE1LX07XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxNz1zdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTMzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkzNDpcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNS1cdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9OTg5PWN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAxMzpcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNC1cdGlmIChjZGFbQ1RBX1pPTkVdKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAyODpcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAyOS1cdGlmIChmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFjZGFbQ1RBX1pPTkVdKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jPTIxOD1zdGF0aWMgdm9pZCBwdXRfem9uZV9hdHRyKHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1aW50MTZfdCB6b25lLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy0yMjYtXHRcdG5lc3QgPSBtbmxfYXR0cl9uZXN0X3N0YXJ0KG5saCwgQ1RBX0ZJTFRFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmM6MjI3Olx0XHRtbmxfYXR0cl9wdXQobmxoLCBDVEFfRklMVEVSX1pPTkUsIDAsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTIyOC1cdFx0bW5sX2F0dHJfbmVzdF9lbmQobmxoLCBuZXN0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmM9NDU5PUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTQ3My1cdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jOjQ3NDpcdFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ1RBX0ZJTFRFUl9aT05FXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy00NzUtXHRcdEFTU0VSVF9HRShyZXQsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzY3J1dGluaXplIGl0IGZvciBhbnkgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhpbmdlcyBvbiBob3cgYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgaGFuZGxlcyB0aGUgYFtDVEFfRklMVEVSX1pPTkVdYCBhdHRyaWJ1dGUgLSBzcGVjaWZpY2FsbHkgdGhlIGBOTEFfRkxBR2AgdHlwZS4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIGFyZSBvcGVuaW5nIG91cnNlbHZlcyB1cCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKRnJvbSB3aGF0IEkgY2FuIHNlZSwgYGZpbHRlcmAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGdvb2QuIFRoYXQgZW5zdXJlcyBldmVyeSBmaWVsZCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgc3RhcnRzIHdpdGggYSBrbm93biB6ZXJvIHZhbHVlLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCBpbiBtaXRpZ2F0aW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHJlYWQgaXNzdWVzLgoKTm93LCBsb29raW5nIGZ1cnRoZXIsIGB0YltDVEFfRklMVEVSX1pPTkVdYCBzZXRzIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCB0byB0cnVlLiBTbywgd2UmIzM5O3ZlIGdvdCBhIGJvb2xlYW4gZmxhZyBiZWluZyBleHBsaWNpdGx5IHNldC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYW4gZWFybHkgZXJyb3IgY2hlY2s6IGlmIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCBpcyB0cnVlLCAqYW5kKiBgY2RhW0NUQV9aT05FXWAgaXMgKm5vdCogcHJlc2VudCAoaS5lLiwgbm90IGRlZmluZWQpLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGEgdXNlZnVsIGNoZWNrLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGxpY2F0aW9ucy4KClRoZSByZWFsIG1lYXQgb2YgdGhlIG1hdHRlciBjb21lcyBpbiB0aGUgZmluYWwgY29uZGl0aW9uOiBpZiBgY2RhW0NUQV9aT05FXWAgKmlzKiBkZWZpbmVkLCB0aGVuIGBmaWx0ZXItJmd0O3pvbmVgIGlzIHBvcHVsYXRlZCB2aWEgdGhlIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgYGN0bmV0bGlua19wYXJzZV96b25lYCAqYWx3YXlzKiBzZXRzIGFsbCBtZW1iZXJzIG9mIGBmaWx0ZXItJmd0O3pvbmVgIHRvIGEga25vd24sIHZhbGlkIHZhbHVlLiBJZiBpdCBmYWlscyB0byBkbyBzbywgd2UgbWlnaHQgZmluZCBvdXJzZWx2ZXMgd2l0aCBhIG1lbW9yeSBsZWFrIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcy4gU28sIGxldCYjMzk7cyBnbyBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdG5ldGxpbmtfcGFyc2Vfem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5NDA6c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTk0MS1cdFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE0LVx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDE1Olx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTQxOT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTQyMDpjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE0MjEtXHRcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNDM2PWN0bmV0bGlua19wYXJzZV90dXBsZV96b25lKHN0cnVjdCBubGF0dHIgKmF0dHIsIGVudW0gY3RhdHRyX3R5cGUgdHlwZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTQ0My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNDQ0Olx0cmV0ID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoYXR0ciwgem9uZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTQ0NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE2MjQ9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjM0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2MzU6XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZ6b25lKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjM2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTY3Nz1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2OTktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTcwMDpcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE3MDEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMzk2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX25ld19jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjQwNi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNDA3Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXHUwMDI2em9uZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjQwOC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTMyNzM9c3RhdGljIGludCBjdG5ldGxpbmtfZHVtcF9leHBfY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqY3RubCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzI5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozMjk3Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMyOTgtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zMzIwPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM0My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozMzQ0Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzNDUtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNDE2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQyNy1cdFx0LyogZGVsZXRlIGEgc2luZ2xlIGV4cGVjdCBieSB0dXBsZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0Mjg6XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcdTAwMjZ6b25lKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDI5LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNjU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX25ld19leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzY2OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjY5Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2NzAtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAyOAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGN0bmV0bGlua19wYXJzZV96b25lYCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgem9uZS1yZWxhdGVkIE5ldGxpbmsgbWVzc2FnZXMsIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBzdGFydCBieSByZXZpZXdpbmcgaXRzIHN0cnVjdHVyZSwgaG93IGl0IHBhcnNlcyB0aGUgaW5jb21pbmcgZGF0YSwgYW5kIHdoYXQgYWN0aW9ucyBpdCB0YWtlcyBiYXNlZCBvbiB0aGUgcGFyc2VkIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwsIG1ha2luZyBzdXJlIHRoYXQgaXQgY29ycmVjdGx5IG1hbmFnZXMgZGlmZmVyZW50IGVycm9yIGNvbmRpdGlvbnMgdG8gcHJldmVudCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJIGFtIGFsc28gZ29pbmcgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYXJlYXMgb2Ygb3B0aW1pemF0aW9uIHRvIGltcHJvdmUgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxODpcdFxuMTQxOTpcdHN0YXRpYyBpbnRcbjE0MjA6XHRjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuMTQyMTpcdFx0XHQgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSlcbjE0MjI6XHR7XG4xNDIzOlx0XHRuZl9jdF96b25lX2luaXQoem9uZSwgTkZfQ1RfREVGQVVMVF9aT05FX0lELFxuMTQyNDpcdFx0XHRcdE5GX0NUX0RFRkFVTFRfWk9ORV9ESVIsIDApO1xuMTQyNTpcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTXG4xNDI2Olx0XHRpZiAoYXR0cilcbjE0Mjc6XHRcdFx0em9uZS1cdTAwM2VpZCA9IG50b2hzKG5sYV9nZXRfYmUxNihhdHRyKSk7XG4xNDI4Olx0I2Vsc2VcbjE0Mjk6XHRcdGlmIChhdHRyKVxuMTQzMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNDMxOlx0I2VuZGlmXG4xNDMyOlx0XHRyZXR1cm4gMDtcbjE0MzM6XHR9XG4xNDM0Olx0XG4xNDM1Olx0c3RhdGljIGludFxuMTQzNjpcdGN0bmV0bGlua19wYXJzZV90dXBsZV96b25lKHN0cnVjdCBubGF0dHIgKmF0dHIsIGVudW0gY3RhdHRyX3R5cGUgdHlwZSxcbjE0Mzc6XHRcdFx0XHQgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpXG4xNDM4Olx0e1xuMTQzOTpcdFx0aW50IHJldDtcbjE0NDA6XHRcbjE0NDE6XHRcdGlmICh6b25lLVx1MDAzZWlkICE9IE5GX0NUX0RFRkFVTFRfWk9ORV9JRClcbjE0NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjA3CgkJCQkJCQlvdXRwdXQ6IDIzOAoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJpc2sgb2YgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gVGhpcyBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBzZWUgdGhhdCBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgIGluaXRpYWxpemVzIHRoZSB6b25lIHRocm91Z2ggYG5mX2N0X3pvbmVfaW5pdGAsIHdoaWNoIGlzIGdvb2QuIFRoZSBgZmlsdGVyYCBvYmplY3QsIGEga2V5IGVsZW1lbnQsIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4KCk5vdywgdGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgd2l0aGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGBDVEFfRklMVEVSYCBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBJZiBpdCYjMzk7cyBwcmVzZW50LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZywgaXQgc2V0cyBgZmlsdGVyLSZndDt6b25lX2ZpbHRlcmAgdG8gdHJ1ZS4gVGhlIHZhbGlkYXRpb24gc3RlcCBpcyBjcml0aWNhbCBoZXJlOiBpdCBlbnN1cmVzIHRoYXQgaWYgYHpvbmVfZmlsdGVyYCBpcyB0cnVlLCB0aGUgYENUQV9aT05FYCBhdHRyaWJ1dGUgKm11c3QqIGFsc28gYmUgcHJlc2VudC4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgdG8gcHJldmVudCBhIHNjZW5hcmlvIHdoZXJlIHRoZSB6b25lIGlzbiYjMzk7dCBwcm9wZXJseSBkZWZpbmVkLiBXaGVuIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGN0bmV0bGlua19wYXJzZV96b25lYCBwYXJzZXMgdGhlIHpvbmUgaW50byBgZmlsdGVyLSZndDt6b25lYC4KCkZpbmFsbHksIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24gdXNlcyB0aGlzIGRhdGEuIEkgc2VlIGEgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoZmlsdGVyLSZndDt6b25lX2ZpbHRlciAmYW1wOyZhbXA7ICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgJmFtcDtmaWx0ZXItJmd0O3pvbmUpKSBnb3RvIGlnbm9yZV9lbnRyeTtgLiBUaGlzIG1lYW5zIGlmIGB6b25lX2ZpbHRlcmAgaXMgZW5hYmxlZCwgaXQgY2hlY2tzIGlmIHRoZSB6b25lcyBhcmUgZXF1YWwgdG8gcHJldmVudCB0aGUgZW50cnkgZnJvbSBnb2luZyBvbi4KCkNvbnNpZGVyaW5nIGFsbCB0aGlzLCBpdCAqYXBwZWFycyogdGhhdCB0aGVyZSBhcmUgbm8gaW1tZWRpYXRlIHJpc2tzLiBJIGRvbiYjMzk7dCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgbWVtb3J5IGxlYWtzIG9yIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kIGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIGVpdGhlci4gU28sIGluIG15IGV4cGVydCBvcGluaW9uLCB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTi4gVGhlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBzdWl0ZXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDVEFfRklMVEVSX1pPTkUsIGFsbG93aW5nIGNvbm50cmFjayBkdW1wcyBhbmQgZmx1c2hlcyB0byBmaWx0ZXIgZW50cmllcyBieSB6b25lLiBcblxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eTpcbjEuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLlxuMi4gVGhlIGF0dHJpYnV0ZSBwb2xpY3kgYENUQV9GSUxURVJfWk9ORWAgaXMgZGVmaW5lZCBhcyBgTkxBX0ZMQUdgLCBwYXJzZWQgdmlhIG5ldGxpbmsgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIChgbmxhX3BhcnNlX25lc3RlZGApLlxuMy4gWm9uZSBwYXJzaW5nIGluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmUgY29tcGxldGVseSB2aWEgYG5mX2N0X3pvbmVfaW5pdCgpYC5cbjQuIFN0cmljdCB2YWxpZGF0aW9uIGVuc3VyZXMgYENUQV9aT05FYCBtdXN0IGJlIHByZXNlbnQgaWYgYHpvbmVfZmlsdGVyYCBpcyBzZXQuXG41LiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHk6XG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cbjMuIFpvbmUgcGFyc2luZyBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlIGNvbXBsZXRlbHkgdmlhIGBuZl9jdF96b25lX2luaXQoKWAuXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjE1Ljc3MzgxNTIxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTUyMjE4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0bmV0bGlua19wYXJzZV9maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImN0bmV0bGlua19mbHVzaF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kdW1wX3RhYmxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9jb25udHJhY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eTpcXG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cXG4yLiBUaGUgYXR0cmlidXRlIHBvbGljeSBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBkZWZpbmVkIGFzIGBOTEFfRkxBR2AsIHBhcnNlZCB2aWEgbmV0bGluayBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgKGBubGFfcGFyc2VfbmVzdGVkYCkuXFxuMy4gWm9uZSBwYXJzaW5nIGluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmUgY29tcGxldGVseSB2aWEgYG5mX2N0X3pvbmVfaW5pdCgpYC5cXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MToxNS43NzM4MjAyMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDI0MjI2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6NDE6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sXFxuaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcXG5AQCAtMzcxLDYgKzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICBuYW1lOiByZXBseS1mbGFnc1xcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb25cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHpvbmVcXG4rICAgICAgICB0eXBlOiBmbGFnXFxuKyAgICAgICAgZG9jOiBmaWx0ZXIgb24gY29ubnRyYWNrIHpvbmUgaWQ7IHJlcXVpcmVzIHRoZSB0b3AtbGV2ZWwgem9uZVxcbisgICAgICAgICAgKGBgQ1RBX1pPTkVgYCkgYXR0cmlidXRlXFxuICAgLVxcbiAgICAgbmFtZTogY29ubnRyYWNrLWF0dHJzXFxuICAgICBhdHRyaWJ1dGVzOlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXFxuaW5kZXggNDMyMzNhZjc1YjlkNS4uOTg1ZjljMDhkM2U5YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXFxuQEAgLTI4NSw2ICsyODUsNyBAQCBlbnVtIGN0YXR0cl9maWx0ZXIge1xcbiBcXHRDVEFfRklMVEVSX1VOU1BFQyxcXG4gXFx0Q1RBX0ZJTFRFUl9PUklHX0ZMQUdTLFxcbiBcXHRDVEFfRklMVEVSX1JFUExZX0ZMQUdTLFxcbitcXHRDVEFfRklMVEVSX1pPTkUsXFxuIFxcdF9fQ1RBX0ZJTFRFUl9NQVhcXG4gfTtcXG4gI2RlZmluZSBDVEFfRklMVEVSX01BWCAoX19DVEFfRklMVEVSX01BWCAtIDEpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTkxMSw2ICs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggKyAxXSA9IHtcXG4gXFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcXG4gXFx0W0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuK1xcdFtDVEFfRklMVEVSX1pPTkVdXFx0XFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbkBAIC05MzAsNiArOTMxLDkgQEAgc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcXG4gXFx0XFx0ZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKTtcXG4gXFxuK1xcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxcbitcXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDA2LDYgKzEwMTAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuIFxcbitcXHQvKiBDVEFfWk9ORSBpcyBhbGxvd2VkIHdpdGhvdXQgQ1RBX0ZJTFRFUl9aT05FLiAqL1xcbiBcXHRpZiAoY2RhW0NUQV9aT05FXSkge1xcbiBcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuQEAgLTEwMjAsNiArMTAyNSwxMiBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbiBcXG4rXFx0LyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi9cXG4rXFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzKSB7XFxuIFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNcXG5pbmRleCAzMWI4MjUwZGRjNTNkLi42M2Y0MTM1NmZlNmQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xcbkBAIC0yMTUsNyArMjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSlcXG4gXFx0cmV0dXJuIE1OTF9DQl9PSztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4rc3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcXG4rXFx0XFx0XFx0ICBib29sIHVzZV9jdGFfZmlsdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuK1xcbitcXHRtbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTtcXG4rXFxuK1xcdGlmICh1c2VfY3RhX2ZpbHRlcikge1xcbitcXHRcXHRuZXN0ID0gbW5sX2F0dHJfbmVzdF9zdGFydChubGgsIENUQV9GSUxURVIpO1xcbitcXHRcXHRtbmxfYXR0cl9wdXQobmxoLCBDVEFfRklMVEVSX1pPTkUsIDAsIE5VTEwpO1xcbitcXHRcXHRtbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXFxuK1xcdFxcdFxcdFxcdGJvb2wgdXNlX2N0YV9maWx0ZXIpXFxuIHtcXG4gXFx0Y2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07XFxuIFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbkBAIC0yMzUsNyArMjUwLDcgQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4gXFx0bmZoLVxcdTAwM2V2ZXJzaW9uID0gTkZORVRMSU5LX1YwO1xcbiBcXHRuZmgtXFx1MDAzZXJlc19pZCA9IDA7XFxuIFxcbi1cXHRtbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTtcXG4rXFx0cHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTtcXG4gXFxuIFxcdHJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLVxcdTAwM2VubG1zZ19sZW4pO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbkBAIC0yNjEsNyArMjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4gXFx0cmV0dXJuIHJlcGx5X2NvdW50ZXI7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXFxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXFxuK1xcdFxcdFxcdFxcdGJvb2wgdXNlX2N0YV9maWx0ZXIpXFxuIHtcXG4gXFx0Y2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07XFxuIFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbkBAIC0yODEsNyArMjk3LDcgQEAgc3RhdGljIGludCBjb25udHJhY2tfZmx1c2hfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4gXFx0bmZoLVxcdTAwM2V2ZXJzaW9uID0gTkZORVRMSU5LX1YwO1xcbiBcXHRuZmgtXFx1MDAzZXJlc19pZCA9IDA7XFxuIFxcbi1cXHRtbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTtcXG4rXFx0cHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTtcXG4gXFxuIFxcdHJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLVxcdTAwM2VubG1zZ19sZW4pO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbkBAIC0zMDQsNDMgKzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tRklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaClcXG4te1xcbi1cXHRzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaztcXG4tfTtcXG4tXFxuLUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbW5sX3NvY2tldCAqKnNvY2spXFxuIHtcXG4gXFx0c3RydWN0IGluNl9hZGRyIHNyYywgZHN0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2VsZi1cXHUwMDNlc29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7XFxuLVxcdGlmICghc2VsZi1cXHUwMDNlc29jaykge1xcbitcXHQqc29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7XFxuK1xcdGlmICghKnNvY2spIHtcXG4gXFx0XFx0cGVycm9yKFxcXCJtbmxfc29ja2V0X29wZW5cXFwiKTtcXG4tXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcXFwiKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4gLTEsIFxcXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcXFwiKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gbW5sX3NvY2tldF9iaW5kKHNlbGYtXFx1MDAzZXNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XFxuK1xcdHJldCA9IG1ubF9zb2NrZXRfYmluZCgqc29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuIFxcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZSgqc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVQRVJNKVxcbi1cXHRcXHRTS0lQKHJldHVybiwgXFxcIk5lZWRzIHRvIGJlIHJ1biBhcyByb290XFxcIik7XFxuK1xcdFxcdFNLSVAocmV0dXJuIC0xLCBcXFwiTmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcXFwiKTtcXG4gXFx0ZWxzZSBpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFT1BOT1RTVVBQKVxcbi1cXHRcXHRTS0lQKHJldHVybiwgXFxcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXFxcIik7XFxuK1xcdFxcdFNLSVAocmV0dXJuIC0xLFxcbitcXHRcXHQgICAgIFxcXCJLZXJuZWwgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGNvbm50cmFjayB6b25lc1xcXCIpO1xcbiBcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cXHUwMDNlc29jaywgMHhmMGYwZjBmMCwgMHhmMWYxZjFmMSxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXFxuIFxcdFxcdFxcdFxcdFxcdCBURVNUX1pPTkVfSUQpO1xcbi1cXHRFWFBFQ1RfRVEocmV0LCAwKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cXHUwMDNlc29jaywgMHhmMmYyZjJmMiwgMHhmM2YzZjNmMyxcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLFxcbiBcXHRcXHRcXHRcXHRcXHQgVEVTVF9aT05FX0lEICsgMSk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVxcdTAwM2Vzb2NrLCAweGY0ZjRmNGY0LCAweGY1ZjVmNWY1LFxcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsXFxuIFxcdFxcdFxcdFxcdFxcdCBURVNUX1pPTkVfSUQgKyAyKTtcXG4tXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuLVxcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXFx1MDAzZXNvY2ssIDB4ZjZmNmY2ZjYsIDB4ZjdmN2Y3ZjcsXFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNyxcXG4gXFx0XFx0XFx0XFx0XFx0IE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFxuIFxcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XFxuIFxcdFxcdC5fX3U2X2FkZHIzMiA9IHtcXG5AQCAtMzU4LDkgKzM3MSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuIFxcdFxcdFxcdDB4MDIwMDAwMDBcXG4gXFx0XFx0fVxcbiBcXHR9fTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cXHUwMDNlc29jaywgc3JjLCBkc3QsXFxuK1xcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCxcXG4gXFx0XFx0XFx0XFx0XFx0IFRFU1RfWk9ORV9JRCk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcXG4gXFx0XFx0Ll9fdTZfYWRkcjMyID0ge1xcbiBcXHRcXHRcXHQweGI4MGQwMTIwLFxcbkBAIC0zNzcsOSArMzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4gXFx0XFx0XFx0MHgwNDAwMDAwMFxcbiBcXHRcXHR9XFxuIFxcdH19O1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVxcdTAwM2Vzb2NrLCBzcmMsIGRzdCxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgVEVTVF9aT05FX0lEICsgMSk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcXG4gXFx0XFx0Ll9fdTZfYWRkcjMyID0ge1xcbiBcXHRcXHRcXHQweGI4MGQwMTIwLFxcbkBAIC0zOTYsOSArNDA5LDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4gXFx0XFx0XFx0MHgwNjAwMDAwMFxcbiBcXHRcXHR9XFxuIFxcdH19O1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVxcdTAwM2Vzb2NrLCBzcmMsIGRzdCxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgVEVTVF9aT05FX0lEICsgMik7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFxuIFxcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XFxuIFxcdFxcdC5fX3U2X2FkZHIzMiA9IHtcXG5AQCAtNDE2LDE0ICs0MjksNTEgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4gXFx0XFx0XFx0MHgwODAwMDAwMFxcbiBcXHRcXHR9XFxuIFxcdH19O1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVxcdTAwM2Vzb2NrLCBzcmMsIGRzdCxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcXG4tXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbiBcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK0ZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuK3tcXG4rXFx0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuK3tcXG4rXFx0Ym9vbCB1c2VfY3RhX2ZpbHRlcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV96b25lKVxcbit7XFxuK1xcdC51c2VfY3RhX2ZpbHRlciA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChjb25udHJhY2tfZHVtcF9mbHVzaCwgY3RhX2ZpbHRlcilcXG4re1xcbitcXHQudXNlX2N0YV9maWx0ZXIgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGNvbm50cmFja196b25lX3NldHVwKF9tZXRhZGF0YSwgXFx1MDAyNnNlbGYtXFx1MDAzZXNvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcXG4gXFx0RVhQRUNUX0dFKHJldCwgMik7XFxuIFxcdGlmIChyZXQgXFx1MDAzZSAyKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lXFxcIik7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNldXNlX2N0YV9maWx0ZXIpIHtcXG4rXFx0XFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCB0cnVlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENUQV9GSUxURVJfWk9ORVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfR0UocmV0LCAwKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBGSVhUVVJFX1RFQVJET1dOKGNvbm50cmFja19kdW1wX2ZsdXNoKVxcbkBAIC00MzQsMzkgKzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsXFxuK1xcdFxcdFxcdFxcdCAgIHZhcmlhbnQtXFx1MDAzZXVzZV9jdGFfZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMik7XFxuIH1cXG4gXFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKVxcbiB7XFxuK1xcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cXHUwMDNldXNlX2N0YV9maWx0ZXI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XFxuIFxcdEVYUEVDVF9FUShyZXQsIDApO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XFxuIFxcdEVYUEVDVF9FUShyZXQsIDApO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAxKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSwgZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMik7XFxuLVxcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDIpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyLCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAyKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAyKTtcXG4gfVxcbiBcXG4gVEVTVF9GKGNvbm50cmFja19kdW1wX2ZsdXNoLCB0ZXN0X2ZsdXNoX2J5X3pvbmVfZGVmYXVsdClcXG4ge1xcbitcXHRib29sIGZpbHRlciA9IHZhcmlhbnQtXFx1MDAzZXVzZV9jdGFfZmlsdGVyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAwKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAyKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSk7XFxuK1xcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDEsIGZpbHRlcik7XFxuIFxcdEVYUEVDVF9FUShyZXQsIDIpO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMiwgZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMik7XFxuLVxcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XFxuK1xcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCwgZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjE3LjQxOTI1MjMyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY4NDg0NzgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RuZXRsaW5rX3BhcnNlX2ZpbHRlclwiLFxuICAgIFwiY3RuZXRsaW5rX2FsbG9jX2ZpbHRlclwiLFxuICAgIFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2R1bXBfdGFibGVcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZGVsX2Nvbm50cmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQ1RBX0ZJTFRFUl9aT05FIGF0dHJpYnV0ZSBzdXBwb3J0IHRvIHRoZSBjb25udHJhY2sgbmV0bGluayBmaWx0ZXJpbmcgaW50ZXJmYWNlLCB1cGRhdGluZyBuZXRsaW5rIHBvbGljeSBhbmQgcGFyc2luZyBsb2dpYyBpbiBuZl9jb25udHJhY2tfbmV0bGluay5jLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIE5FVExJTktfTkVURklMVEVSIGNvbm50cmFjayBkdW1wIGFuZCBmbHVzaCByZXF1ZXN0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sXG5AQCAtMzcxLDYgKzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IHJlcGx5LWZsYWdzXG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb25cbisgICAgICAtXG4rICAgICAgICBuYW1lOiB6b25lXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lXG4rICAgICAgICAgIChgYENUQV9aT05FYGApIGF0dHJpYnV0ZVxuICAgLVxuICAgICBuYW1lOiBjb25udHJhY2stYXR0cnNcbiAgICAgYXR0cmlidXRlczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5pbmRleCA0MzIzM2FmNzViOWQ1Li45ODVmOWMwOGQzZTliIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5AQCAtMjg1LDYgKzI4NSw3IEBAIGVudW0gY3RhdHRyX2ZpbHRlciB7XG4gXHRDVEFfRklMVEVSX1VOU1BFQyxcbiBcdENUQV9GSUxURVJfT1JJR19GTEFHUyxcbiBcdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXG4rXHRDVEFfRklMVEVSX1pPTkUsXG4gXHRfX0NUQV9GSUxURVJfTUFYXG4gfTtcbiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTkxMSw2ICs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0YV9maWx0ZXJfbmxhX3BvbGljeVtDVEFfRklMVEVSX01BWCArIDFdID0ge1xuIFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuK1x0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuQEAgLTkzMCw2ICs5MzEsOSBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcbiBcdFx0ZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xuIFxuK1x0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXG4rXHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTAwNiw2ICsxMDEwLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbHRlcjtcbiBcbitcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4gXHRpZiAoY2RhW0NUQV9aT05FXSkge1xuIFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG5AQCAtMTAyMCw2ICsxMDI1LDEyIEBAIGN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9maWx0ZXI7XG4gXG4rXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xuK1x0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfZmlsdGVyO1xuK1x0fVxuK1xuIFx0aWYgKGZpbHRlci1cdTAwM2VvcmlnX2ZsYWdzKSB7XG4gXHRcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG5pbmRleCAzMWI4MjUwZGRjNTNkLi42M2Y0MTM1NmZlNmQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNcbkBAIC0yMTUsNyArMjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiBNTkxfQ0JfT0s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4rc3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcbitcdFx0XHQgIGJvb2wgdXNlX2N0YV9maWx0ZXIpXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqbmVzdDtcbitcbitcdG1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpO1xuK1xuK1x0aWYgKHVzZV9jdGFfZmlsdGVyKSB7XG4rXHRcdG5lc3QgPSBtbmxfYXR0cl9uZXN0X3N0YXJ0KG5saCwgQ1RBX0ZJTFRFUik7XG4rXHRcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XG4rXHRcdG1ubF9hdHRyX25lc3RfZW5kKG5saCwgbmVzdCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjM1LDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0yNjEsNyArMjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiBcdHJldHVybiByZXBseV9jb3VudGVyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjgxLDcgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0zMDQsNDMgKzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLUZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4te1xuLVx0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XG4tfTtcbi1cbi1GSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdFx0c3RydWN0IG1ubF9zb2NrZXQgKipzb2NrKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZWxmLVx1MDAzZXNvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpO1xuLVx0aWYgKCFzZWxmLVx1MDAzZXNvY2spIHtcbitcdCpzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTtcbitcdGlmICghKnNvY2spIHtcbiBcdFx0cGVycm9yKFwibW5sX3NvY2tldF9vcGVuXCIpO1xuLVx0XHRTS0lQKHJldHVybiwgXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcIik7XG4rXHRcdFNLSVAocmV0dXJuIC0xLCBcImNhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldFwiKTtcbiBcdH1cbiBcbi1cdHJldCA9IG1ubF9zb2NrZXRfYmluZChzZWxmLVx1MDAzZXNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4rXHRyZXQgPSBtbmxfc29ja2V0X2JpbmQoKnNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVQRVJNKVxuLVx0XHRTS0lQKHJldHVybiwgXCJOZWVkcyB0byBiZSBydW4gYXMgcm9vdFwiKTtcbitcdFx0U0tJUChyZXR1cm4gLTEsIFwiTmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcIik7XG4gXHRlbHNlIGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApXG4tXHRcdFNLSVAocmV0dXJuLCBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuK1x0XHRTS0lQKHJldHVybiAtMSxcbitcdFx0ICAgICBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGYwZjBmMGYwLCAweGYxZjFmMWYxLFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMSk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXHUwMDNlc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQgKyAyKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNyxcbiBcdFx0XHRcdFx0IE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTM1OCw5ICszNzEsOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDIwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zNzcsOSArMzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiBcdFx0XHQweDA0MDAwMDAwXG4gXHRcdH1cbiBcdH19O1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cdTAwM2Vzb2NrLCBzcmMsIGRzdCxcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCxcbiBcdFx0XHRcdFx0IFRFU1RfWk9ORV9JRCArIDEpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XG4gXHRcdC5fX3U2X2FkZHIzMiA9IHtcbiBcdFx0XHQweGI4MGQwMTIwLFxuQEAgLTM5Niw5ICs0MDksOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDYwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMik7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTQxNiwxNCArNDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwODAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsXG4gXHRcdFx0XHRcdCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbitGSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdGJvb2wgdXNlX2N0YV9maWx0ZXI7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfem9uZSlcbit7XG4rXHQudXNlX2N0YV9maWx0ZXIgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV9maWx0ZXIpXG4re1xuK1x0LnVzZV9jdGFfZmlsdGVyID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb25udHJhY2tfem9uZV9zZXR1cChfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlc29jaykpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XG4gXHRFWFBFQ1RfR0UocmV0LCAyKTtcbiBcdGlmIChyZXQgXHUwMDNlIDIpXG4gXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lXCIpO1xuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpIHtcbitcdFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIHRydWUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ1RBX0ZJTFRFUl9aT05FXCIpO1xuK1x0XHRBU1NFUlRfR0UocmV0LCAwKTtcbitcdH1cbiB9XG4gXG4gRklYVFVSRV9URUFSRE9XTihjb25udHJhY2tfZHVtcF9mbHVzaClcbkBAIC00MzQsMzkgKzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCxcbitcdFx0XHRcdCAgIHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKVxuIHtcbitcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDEsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMik7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDIsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpXG4ge1xuK1x0Ym9vbCBmaWx0ZXIgPSB2YXJpYW50LVx1MDAzZXVzZV9jdGFfZmlsdGVyO1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAxKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MToxNy40MTkyNTQ0NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5NTk2ODI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm50cmFjayBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gYXNzZXNzIHRoaXMgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBmb3IgcG90ZW50aWFsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZyb20gdGhlIGluc3RydWN0aW9ucywgdGhpcyBzZWVtcyBsaWtlIHN0cmFpZ2h0Zm9yd2FyZCBrZXJuZWwgUUEgd29yaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZGVmZW5zaXZlIHNlY3VyaXR5IOKAkyBub3RoaW5nIHRvbyByaXNreS4gTXkgcmlzayBhbmFseXNpcyBjb25maXJtcyB0aGlzOiB3ZSdyZSBldmFsdWF0aW5nIGNvZGUgZm9yIGZ1enppbmcgcHVycG9zZXMsIHdoaWNoIGlzIGEgZmFpcmx5IGJlbmlnbiB0YXNrLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBmaWxlczogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaGAsIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY2AuIEtub3dpbmcgdGhlIGZpbGVzIGludm9sdmVkIGdpdmVzIG1lIGEgaGFuZGxlIG9uIHRoZSBhcmVhIG9mIHRoZSBrZXJuZWwgYmVpbmcgbW9kaWZpZWQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIG5ldGZpbHRlciBjb25udHJhY2sgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBtb2RpZmllZCBjb2RlLiBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBmcm9tIGFuIGltcGxlbWVudGF0aW9uIHBvaW50IG9mIHZpZXcuIExldCdzIHNlZSB3aGF0J3MgY2hhbmdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjI4LjUxNTIyNTI4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwMDpcXHRcXHR1X2ludDMyX3Qgb3JpZ19mbGFncztcXG4gOTAxOlxcdFxcdHVfaW50MzJfdCByZXBseV9mbGFncztcXG4gOTAyOlxcdFxcbiA5MDM6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvcmlnO1xcbiA5MDQ6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSByZXBseTtcXG4gOTA1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcXG4gOTA4OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XFxuIDkwOTpcXHR9O1xcbiA5MTA6XFx0XFxuIDkxMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICsgMV0gPSB7XFxuIDkxMjpcXHRcXHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxcbiA5MTM6XFx0XFx0W0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuIDkxNDpcXHRcXHRbQ1RBX0ZJTFRFUl9aT05FXVxcdFxcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuIDkxNTpcXHR9O1xcbiA5MTY6XFx0XFxuIDkxNzpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gOTE4OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcilcXG4gOTE5OlxcdHtcXG4gOTIwOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW0NUQV9GSUxURVJfTUFYICsgMV07XFxuIDkyMTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0ZJTFRFUl9NQVgsIGF0dHIsIGN0YV9maWx0ZXJfbmxhX3BvbGljeSxcXG4gOTI0OlxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4gOTI1OlxcdFxcdGlmIChyZXQpXFxuIDkyNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5Mjc6XFx0XFxuIDkyODpcXHRcXHRpZiAodGJbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXSlcXG4gOTI5OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfT1JJR19GTEFHU10pO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRpZiAodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pXFxuIDkzMjpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xcbiA5MzM6XFx0XFxuIDkzNDpcXHRcXHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcXG4gOTM1OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRyZXR1cm4gMDtcXG4gOTM4OlxcdH1cXG4gOTM5OlxcdFxcbiA5NDA6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA5NDE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKTtcXG4gOTQyOlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sXFxuIDk0MzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXFxuIDk0NDpcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIHR5cGUsIHVfaW50OF90IGwzbnVtLFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSxcXG4gOTQ2OlxcdFxcdFxcdFxcdFxcdFxcdCB1X2ludDMyX3QgZmxhZ3MpO1xcbiA5NDc6XFx0XFxuIDk0ODpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfcGFyc2VfbWFyayhzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgKm1hcmssXFxuIDk0OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbiA5NTA6XFx0e1xcbiA5NTE6XFx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xcbiA5NTI6XFx0XFx0aWYgKGNkYVtDVEFfTUFSS10pIHtcXG4gOTUzOlxcdFxcdFxcdG1hcmstXFx1MDAzZXZhbCA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX01BUktdKSk7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdFxcdGlmIChjZGFbQ1RBX01BUktfTUFTS10pXFxuIDk1NjpcXHRcXHRcXHRcXHRtYXJrLVxcdTAwM2VtYXNrID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfTUFSS19NQVNLXSkpO1xcbiA5NTc6XFx0XFx0XFx0ZWxzZVxcbiA5NTg6XFx0XFx0XFx0XFx0bWFyay1cXHUwMDNlbWFzayA9IDB4ZmZmZmZmZmY7XFxuIDk1OTpcXHRcXHR9IGVsc2UgaWYgKGNkYVtDVEFfTUFSS19NQVNLXSkge1xcbiA5NjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk2MTpcXHRcXHR9XFxuIDk2MjpcXHQjZW5kaWZcXG4gOTYzOlxcdFxcdHJldHVybiAwO1xcbiA5NjQ6XFx0fVxcbiA5NjU6XFx0XFxuIDk2NjpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfcGFyc2Vfc3RhdHVzKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqc3RhdHVzLFxcbiA5Njc6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcXG4gOTY4OlxcdHtcXG4gOTY5OlxcdFxcdGlmIChjZGFbQ1RBX1NUQVRVU10pIHtcXG4gOTcwOlxcdFxcdFxcdHN0YXR1cy1cXHUwMDNldmFsID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfU1RBVFVTXSkpO1xcbiA5NzE6XFx0XFx0XFx0aWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKVxcbiA5NzI6XFx0XFx0XFx0XFx0c3RhdHVzLVxcdTAwM2VtYXNrID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfU1RBVFVTX01BU0tdKSk7XFxuIDk3MzpcXHRcXHRcXHRlbHNlXFxuIDk3NDpcXHRcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZW1hc2sgPSBzdGF0dXMtXFx1MDAzZXZhbDtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0XFx0Lyogc3RhdHVzLVxcdTAwM2V2YWwgPT0gMD8gYWx3YXlzIHRydWUsIGVsc2UgYWx3YXlzIGZhbHNlLiAqL1xcbiA5Nzc6XFx0XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlbWFzayA9PSAwKVxcbiA5Nzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk3OTpcXHRcXHR9IGVsc2UgaWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKSB7XFxuIDk4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTgxOlxcdFxcdH1cXG4gOTgyOlxcdFxcbiA5ODM6XFx0XFx0LyogQ1RBX1NUQVRVUyBpcyBOTEFfVTMyLCBpZiB0aGlzIGZpcmVzIFVBUEkgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgKi9cXG4gOTg0OlxcdFxcdEJVSUxEX0JVR19PTihfX0lQU19NQVhfQklUIFxcdTAwM2U9IDMyKTtcXG4gOTg1OlxcdFxcdHJldHVybiAwO1xcbiA5ODY6XFx0fVxcbiA5ODc6XFx0XFxuIDk4ODpcXHRzdGF0aWMgc3RydWN0IGN0bmV0bGlua19maWx0ZXIgKlxcbiA5ODk6XFx0Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcXG4gOTkwOlxcdHtcXG4gOTkxOlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXI7XFxuIDk5MjpcXHRcXHRpbnQgZXJyO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHQjaWZuZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xcbiA5OTU6XFx0XFx0aWYgKGNkYVtDVEFfTUFSS10gfHwgY2RhW0NUQV9NQVJLX01BU0tdKVxcbiA5OTY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbiA5OTc6XFx0I2VuZGlmXFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKCpmaWx0ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MToyOC41MTU1MzM0OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODgxNDA0MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGFuZCBpdHMgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIGlzIGJlaW5nIGFsbG9jYXRlZCBhbmQsIGNydWNpYWxseSwgd2hlcmUgaXQncyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEp1c3Qgc2VlaW5nIHRoZSBhbGxvY2F0aW9uIGlzIG9ubHkgaGFsZiB0aGUgc3RvcnkuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoZSBmaWx0ZXIgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgZG93bnN0cmVhbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgXCJmaWx0ZXJcIiB2YXJpYWJsZSB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBvcGVyYXRpb25zIGhhcHBlbmluZyB0byBpdC4gV2hhdCBhcmUgdGhlIHJlYWQgYW5kIHdyaXRlIHBhdHRlcm5zPyBJcyB0aGVyZSBhIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IGRlZXAgd2UgY2FuIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTozMy4zOTY5NDEyMDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0XFx0aWYgKGZpbHRlciA9PSBOVUxMKVxcbjEwMDE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdGZpbHRlci1cXHUwMDNlZmFtaWx5ID0gZmFtaWx5O1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXFx1MDAyNmZpbHRlci1cXHUwMDNlbWFyaywgY2RhKTtcXG4xMDA2OlxcdFxcdGlmIChlcnIpXFxuMTAwNzpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdGVyciA9IGN0bmV0bGlua19maWx0ZXJfcGFyc2Vfc3RhdHVzKFxcdTAwMjZmaWx0ZXItXFx1MDAzZXN0YXR1cywgY2RhKTtcXG4xMDEwOlxcdFxcdGlmIChlcnIpXFxuMTAxMTpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAxMjpcXHRcXG4xMDEzOlxcdFxcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXFxuMTAxNDpcXHRcXHRpZiAoY2RhW0NUQV9aT05FXSkge1xcbjEwMTU6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSk7XFxuMTAxNjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDE3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDE4OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbjEwMTk6XFx0XFx0fVxcbjEwMjA6XFx0XFxuMTAyMTpcXHRcXHRpZiAoIWNkYVtDVEFfRklMVEVSXSlcXG4xMDIyOlxcdFxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTAyMzpcXHRcXG4xMDI0OlxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY2RhW0NUQV9GSUxURVJdLCBmaWx0ZXIpO1xcbjEwMjU6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTAyNjpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAyNzpcXHRcXG4xMDI4OlxcdFxcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXFxuMTAyOTpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xcbjEwMzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDMxOlxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDMyOlxcdFxcdH1cXG4xMDMzOlxcdFxcbjEwMzQ6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncykge1xcbjEwMzU6XFx0XFx0XFx0aWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7XFxuMTAzNjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjEwMzc6XFx0XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMzg6XFx0XFx0XFx0fVxcbjEwMzk6XFx0XFxuMTA0MDpcXHRcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGVfZmlsdGVyKGNkYSwgXFx1MDAyNmZpbHRlci1cXHUwMDNlb3JpZyxcXG4xMDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIENUQV9UVVBMRV9PUklHLFxcbjEwNDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VmYW1pbHksXFxuMTA0MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lLFxcbjEwNDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzKTtcXG4xMDQ1OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwNDY6XFx0XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwNDc6XFx0XFx0fVxcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncykge1xcbjEwNTA6XFx0XFx0XFx0aWYgKCFjZGFbQ1RBX1RVUExFX1JFUExZXSkge1xcbjEwNTE6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDUyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDUzOlxcdFxcdFxcdH1cXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJlcGx5LFxcbjEwNTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgQ1RBX1RVUExFX1JFUExZLFxcbjEwNTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VmYW1pbHksXFxuMTA1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lLFxcbjEwNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncyk7XFxuMTA2MDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDYxOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDYyOlxcdFxcdH1cXG4xMDYzOlxcdFxcbjEwNjQ6XFx0XFx0cmV0dXJuIGZpbHRlcjtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0ZXJyX2ZpbHRlcjpcXG4xMDY3OlxcdFxcdGtmcmVlKGZpbHRlcik7XFxuMTA2ODpcXHRcXG4xMDY5OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTA3MDpcXHR9XFxuMTA3MTpcXHRcXG4xMDcyOlxcdHN0YXRpYyBib29sIGN0bmV0bGlua19uZWVkc19maWx0ZXIodTggZmFtaWx5LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKmNkYSlcXG4xMDczOlxcdHtcXG4xMDc0OlxcdFxcdHJldHVybiBmYW1pbHkgfHwgY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX0ZJTFRFUl0gfHwgY2RhW0NUQV9TVEFUVVNdIHx8IGNkYVtDVEFfWk9ORV07XFxuMTA3NTpcXHR9XFxuMTA3NjpcXHRcXG4xMDc3OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4xMDc4OlxcdHtcXG4xMDc5OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhID0gY2ItXFx1MDAzZWRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjMzLjM5NzE5MzI0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTQ4NDA5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGN0bmV0bGlua19maWx0ZXJgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBkZWZpbml0aW9uIG9mIGBjdG5ldGxpbmtfZmlsdGVyYC4gSSByZWNhbGwgaXQgYmVpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDg5MCwgZ2l2ZSBvciB0YWtlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgbmV0bGluayBmaWx0ZXIgdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nLiBJJ20gYW50aWNpcGF0aW5nIHRoaXMgdG8gaG9sZCB0aGUga2V5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMgYXQgdGhlIE5ldGxpbmsgbGV2ZWwuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgZXNzZW50aWFsIHRvIGdyYXNwIGhvdyB0aGUgcG9saWN5IGlzIGltcGxlbWVudGVkLCBhbnkgbGltaXRzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoZSBtZW1iZXJzIG9mIHRoaXMgc3RydWN0IGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhlIGZpbHRlciBjYXBhYmlsaXRpZXMuIFRpbWUgdG8gZ28gaHVudGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjM1LjMxMjAzNzE1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXG4gODkxOlxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiB7XFxuIDg5MjpcXHRcXHR1MzIgdmFsO1xcbiA4OTM6XFx0XFx0dTMyIG1hc2s7XFxuIDg5NDpcXHR9O1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XFxuIDg5NzpcXHRcXHR1OCBmYW1pbHk7XFxuIDg5ODpcXHRcXHRib29sIHpvbmVfZmlsdGVyO1xcbiA4OTk6XFx0XFxuIDkwMDpcXHRcXHR1X2ludDMyX3Qgb3JpZ19mbGFncztcXG4gOTAxOlxcdFxcdHVfaW50MzJfdCByZXBseV9mbGFncztcXG4gOTAyOlxcdFxcbiA5MDM6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvcmlnO1xcbiA5MDQ6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSByZXBseTtcXG4gOTA1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcXG4gOTA4OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XFxuIDkwOTpcXHR9O1xcbiA5MTA6XFx0XFxuIDkxMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICsgMV0gPSB7XFxuIDkxMjpcXHRcXHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxcbiA5MTM6XFx0XFx0W0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuIDkxNDpcXHRcXHRbQ1RBX0ZJTFRFUl9aT05FXVxcdFxcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjM1LjMxNDMxNDc4NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDg4Njc3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIGFwcGxpY2F0aW9uIG9mIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSB3aGVyZSBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBpcyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBoZXJlIGlzIGEgZnVsbCBhbmQgY29tcGxldGUgY29tcHJlaGVuc2lvbiBvZiBpdHMgcm9sZSBhbmQgc2NvcGUgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yaywgc28gSSB3YW50IHRvIGtub3cgZXZlcnl3aGVyZSBpdCBjb21lcyBpbnRvIHBsYXkuIEknbGwgbmVlZCB0byBzZWUgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIG5ldGxpbmsgY29udGV4dCwgd2hpY2ggaG9wZWZ1bGx5IHdpbGwgcmV2ZWFsIHRoZSBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgc3RydWN0dXJlIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uLiBMZXQncyBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTozNy4zNjMxODQ4NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTQ3MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9ODk2PXN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk3LVxcdHU4IGZhbWlseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6ODk4OlxcdGJvb2wgem9uZV9maWx0ZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTg5OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTM0LVxcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5MzU6XFx0XFx0ZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODk9Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE3LVxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAxODpcXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxOS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAyOC1cXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDI5OlxcdGlmIChmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyIFxcdTAwMjZcXHUwMDI2ICFjZGFbQ1RBX1pPTkVdKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMzAtXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMTYzPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTE3OTpcXHRpZiAoZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgwLVxcdCAgICAhbmZfY3Rfem9uZV9lcXVhbF9hbnkoY3QsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXpvbmUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTozNy40NTA3MzgyMzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxOTA2Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGN0bmV0bGlua2AgZmlsdGVyIGFuZCB0aGUgZHVtcC9mbHVzaCBvcGVyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsdGVycyB3b3JrIGF0IHRoZSBuZXRsaW5rIGxldmVsLlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCoqXG5cblJpZ2h0LCBzbyB0aGF0IHdvdWxkIHB1dCB0aGUgcmVsZXZhbnQgY29kZSBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxMDcwIHRvIDEyNTAuIFRoYXQgcmFuZ2UgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSBoYW5kbGVycyBhbmQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaG93IHRoZSBkYXRhIGlzIGJlaW5nIGNvbnN0cnVjdGVkLCB0cmFuc21pdHRlZCB2aWEgbmV0bGluaywgYW5kIHByb2Nlc3NlZCBvbiB0aGUgb3RoZXIgZW5kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgdGhlcmUuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgcmV2ZWFsIHRoZSBtZWNoYW5pc21zIGZvciBib3RoIGZpbHRlcmluZyAqYW5kKiB0aGUgZHVtcC9mbHVzaCBwcm9jZWR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjM5LjM2OTgwNDY5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDcwOlxcdH1cXG4xMDcxOlxcdFxcbjEwNzI6XFx0c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbjEwNzM6XFx0e1xcbjEwNzQ6XFx0XFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcXG4xMDc1OlxcdH1cXG4xMDc2OlxcdFxcbjEwNzc6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjEwNzg6XFx0e1xcbjEwNzk6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4xMDgwOlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIgPSBOVUxMO1xcbjEwODE6XFx0XFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuMTA4MjpcXHRcXHR1OCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbjEwODM6XFx0XFxuMTA4NDpcXHRcXHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcXG4xMDg1OlxcdFxcdFxcdGZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhLCBmYW1pbHkpO1xcbjEwODY6XFx0XFx0XFx0aWYgKElTX0VSUihmaWx0ZXIpKVxcbjEwODc6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZmlsdGVyKTtcXG4xMDg4OlxcdFxcdH1cXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBmaWx0ZXI7XFxuMTA5MTpcXHRcXHRyZXR1cm4gMDtcXG4xMDkyOlxcdH1cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG4xMDk1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxcbjEwOTY6XFx0XFx0XFx0XFx0XFx0XFx0dV9pbnQzMl90IGZsYWdzLCBpbnQgZmFtaWx5KVxcbjEwOTc6XFx0e1xcbjEwOTg6XFx0XFx0c3dpdGNoIChmYW1pbHkpIHtcXG4xMDk5OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbjExMDA6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTAxOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmlwKVxcbjExMDI6XFx0XFx0XFx0XFx0cmV0dXJuICAwO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDU6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaXApXFxuMTEwNjpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTEwNzpcXHRcXHRcXHRicmVhaztcXG4xMTA4OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY2OlxcbjExMDk6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTEwOlxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudTMuaW42LFxcbjExMTE6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaW42KSlcXG4xMTEyOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMTM6XFx0XFxuMTExNDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMTU6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfY21wKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuMTExNjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3RfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYpKVxcbjExMTc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTExODpcXHRcXHRcXHRicmVhaztcXG4xMTE5OlxcdFxcdH1cXG4xMTIwOlxcdFxcbjExMjE6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fTlVNKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTIyOlxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtKVxcbjExMjM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdHN3aXRjaCAoY3RfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSkge1xcbjExMjY6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4xMTI3OlxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuMTEyODpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19TUkNfUE9SVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyOTpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUudGNwLnBvcnQpXFxuMTEzMDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTMxOlxcdFxcbjExMzI6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fRFNUX1BPUlQpKSBcXHUwMDI2XFx1MDAyNlxcbjExMzM6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51LnRjcC5wb3J0KVxcbjExMzQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEzNTpcXHRcXHRcXHRicmVhaztcXG4xMTM2OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QOlxcbjExMzc6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9UWVBFKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTM4OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAudHlwZSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC50eXBlKVxcbjExMzk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTE0MDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0NPREUpKSBcXHUwMDI2XFx1MDAyNlxcbjExNDE6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLmNvZGUpXFxuMTE0MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTQzOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfSUQpKSBcXHUwMDI2XFx1MDAyNlxcbjExNDQ6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZClcXG4xMTQ1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExNDY6XFx0XFx0XFx0YnJlYWs7XFxuMTE0NzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxcbjExNDg6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUFY2X1RZUEUpKSBcXHUwMDI2XFx1MDAyNlxcbjExNDk6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC50eXBlICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUpXFxuMTE1MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTUxOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBWNl9DT0RFKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTUyOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAuY29kZSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC5jb2RlKVxcbjExNTM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTE1NDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QVjZfSUQpKSBcXHUwMDI2XFx1MDAyNlxcbjExNTU6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZClcXG4xMTU2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExNTc6XFx0XFx0XFx0YnJlYWs7XFxuMTE1ODpcXHRcXHR9XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdHJldHVybiAxO1xcbjExNjE6XFx0fVxcbjExNjI6XFx0XFxuMTE2MzpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbjExNjQ6XFx0e1xcbjExNjU6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlciA9IGRhdGE7XFxuMTE2NjpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4xMTY3OlxcdFxcdHUzMiBzdGF0dXM7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdGlmIChmaWx0ZXIgPT0gTlVMTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6MzkuMzY5OTYwNjc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NTk5NzM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLY29uZmlnIE9wdGlvbnMgZm9yIG5mX2Nvbm50cmFja19uZXRsaW5rLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIHRoZSBjb25maWd1cmF0aW9uIG9mIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGEgcGFydGljdWxhciBmaWxlIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IGNsdWVzIHRoYXQgTWFrZWZpbGUgaG9sZHMuIEknbSBleHBlY3RpbmcgaXQgdG8gcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvZGUgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEknbSBob3BpbmcgaXQncyBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGF0IHRoZSBNYWtlZmlsZSBnaXZlcyBtZSBhIGNsZWFyIGluZGljYXRpb24uIE5vIHRpbWUgdG8gd2FzdGUsIGxldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQxLjAyOTkzODYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI5NDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfbmV0bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQxLjA4NDIzOTQ1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDgwNDkwOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGF0dXMgb2YgTmV0ZmlsdGVyJ3MgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgYmVpbmcgY29uZmlndXJlZC4gRmlyc3QsIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldGZpbHRlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgQ09ORklHX05GX0NUX05FVExJTktgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgcmVnYXJkaW5nIHdoZXRoZXIgTmV0bGluayBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEtub3dpbmcgdGhhdCBpcyB0aGUgaW5pdGlhbCBwaWVjZSBvZiBkYXRhIEkgcmVxdWlyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0Mi41NjQ3MzI3NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTc1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQyLjY2MzkxNjg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY2ODQwMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgLSBMaW5lIDM2NiBhbmQgU3Vycm91bmRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGxpbmVzIGFyb3VuZCAzNjYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQncyBiZWluZyBjb25maWd1cmVkIHRoZXJlLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHRoZSBibG9jayBvZiBvcHRpb25zLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvciByZWxhdGlvbnNoaXBzIGl0IGhhcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBiZSBkZWZpbmluZyBvciBjb25maWd1cmluZyBzb21lIGFzcGVjdCBvZiBuZXRmaWx0ZXIsIGxpa2VseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBtb2R1bGUuIEknbGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgbGlrZSBcImNvbmZpZyxcIiBcInRyaXN0YXRlLFwiIFwiYm9vbCxcIiBcImRlcGVuZHMgb24sXCIgXCJzZWxlY3QsXCIgYW5kIFwiaGVscFwiIHRvIGdldCBhIGZlZWwgZm9yIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZ1bmN0aW9ucyBhbmQgaW50ZXJhY3RzIHdpdGhpbiB0aGUgb3ZlcmFsbCBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIG1vcmUgY29tcGxleCBvbmUuIEVpdGhlciB3YXksIG15IGFpbSBpcyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQ0LjgzMDc2MDY2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2MDpcXHRcXHQgIG9uIGhvdyByZXN0cmljdGl2ZSB5b3VyIHJ1bGVzZXQgaXMuXFxuIDM2MTpcXHRcXHQgIElmIHlvdSBhcmUgdXNpbmcgYSB0ZnRwIGNsaWVudCBiZWhpbmQgLWogU05BVCBvciAtaiBNQVNRVUVSQURJTkdcXG4gMzYyOlxcdFxcdCAgeW91IHdpbGwgbmVlZCB0aGlzLlxcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzNjU6XFx0XFxuIDM2NjpcXHRjb25maWcgTkZfQ1RfTkVUTElOS1xcbiAzNjc6XFx0XFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuIDM2ODpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzY5OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAzNzA6XFx0XFx0aGVscFxcbiAzNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4gMzc0OlxcdFxcdHRyaXN0YXRlICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluaydcXG4gMzc1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMzc3OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG4gMzc4OlxcdFxcdGhlbHBcXG4gMzc5OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcXG4gMzgwOlxcdFxcdCAgZmluZS1ncmFpbiB0dW5pbmcuIFRoaXMgYWxsb3dzIHlvdSB0byBhdHRhY2ggc3BlY2lmaWMgdGltZW91dFxcbiAzODE6XFx0XFx0ICBwb2xpY2llcyB0byBmbG93cywgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2xvYmFsIHRpbWVvdXQgcG9saWN5LlxcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMzg0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0NC44MzA5OTQyODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2NzU3OTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBORl9DVF9ORVRMSU5LYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NUX05FVExJTktgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMsIGxpa2VseSBsaWtlIGBORl9DT05OVFJBQ0tgIG9yIHRoZSBicm9hZGVyIGBORVRGSUxURVJgIHN1YnN5c3RlbSwgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcy5cblxuVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25zdWx0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgdGhlIGBtZW51Y29uZmlnIE5GX0NPTk5UUkFDS2AgZW50cnkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIG5lY2Vzc2FyeSBjb250ZXh0IGFuZCBsaW5rYWdlIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcywgZW5hYmxpbmcgbWUgdG8gbWFwIGRlcGVuZGVuY2llcywgdW5kZXJzdGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBzZWUgaG93IGBORl9DVF9ORVRMSU5LYCBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6NDYuNzk4NTc2ODE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAwOTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6NDYuODY2NTkxNzQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjQ4MTA3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgY3RuZXRsaW5rIEZpbHRlciBBbGxvY2F0aW9uIGFuZCBQYXJzaW5nKipcblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCBhbmQgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSB0aGVpciBjYWxsIGhpZXJhcmNoeSBhbmQgaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50cyB3aXRoaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgZmlsdGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYW5kIHRoYXQgbWVhbnMgc2VlaW5nICp3aG8qIGNhbGxzIHRoZW0uIEZpcnN0IHN0ZXAgaXMgdG8gdXNlIHNvbWUgc2VhcmNoIHRvb2xzIHRvIGZpbmQgd2hlcmUgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGlzIGludm9rZWQgd2l0aGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmlsdGVyIGFsbG9jYXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0OS4xOTE0MDUyNjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODA4NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19hbGxvY19maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODg9c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6OTg5OmN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTk5MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTA3Nz1zdGF0aWMgaW50IGN0bmV0bGlua19zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4NC1cXHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTA4NTpcXHRcXHRmaWx0ZXIgPSBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNkYSwgZmFtaWx5KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cXHRcXHRpZiAoSVNfRVJSKGZpbHRlcikpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5OT1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MTAtXFx0aWYgKGN0bmV0bGlua19uZWVkc19maWx0ZXIoZmFtaWx5LCBjZGEpKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2MTE6XFx0XFx0ZmlsdGVyID0gY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjZGEsIGZhbWlseSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MTItXFx0XFx0aWYgKElTX0VSUihmaWx0ZXIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0OS4yNjgyMTg2NDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxNjk0MzgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5ldGxpbmsgQ29ubnRyYWNrIEludGVyZmFjZSoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIG5ldGxpbmsgY29ubnRyYWNrIGZ1bmN0aW9ucy4uLiBJIHNlZSBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcmAsIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCwgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgLCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgLCBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRocy4gTGV0IG1lIGNoZWNrOiBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcmAsIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCwgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgLCBgY3RuZXRsaW5rX3N0YXJ0YCwgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIFRoZW4gSSBzaG91bGQgZm9jdXMgb24gYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYCwgYW5kIHByb2JhYmx5IG90aGVyIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBuZXRsaW5rIGludGVyZmFjZSBtYW5hZ2VzIGNvbm50cmFjayBlbnRyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAyNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo1MS43ODUxNjUyNTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNDA2OTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5ND1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9pdGVyYXRlKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTk4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNTk5OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MDAtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTYyND1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY0Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY0ODpcXHRcXHRyZXR1cm4gY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhpbmZvLVxcdTAwM2VuZXQsIGNkYSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY0OS1cXHRcXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6NTIuNTk5MjQxMDUxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTI2MTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlIHN0YXJ0cyB1cC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBmdW5jdGlvbiwgYXMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgeW91IGZpbmQgdGhlIGNvcmUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXNlci1zcGFjZSB0b29scyBmb3IgcmV0cmlldmluZyBjb25udHJhY2sgaW5mb3JtYXRpb24uIEJ1dCB0aGF0J3MgYSBkdW1wIGZ1bmN0aW9uLCBub3QgbmVjZXNzYXJpbHkgdGhlIGluaXRpYWxpemF0aW9uIGl0c2VsZiwgYWx0aG91Z2ggaXQgbWlnaHQgcHJvdmlkZSBjbHVlcyB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHJlZmVyZW5jZXMgdG8gYGN0bmV0bGlua19zdGFydGAgYXMgd2VsbC4gVGhhdCBmdW5jdGlvbidzIG5hbWUgc3VnZ2VzdHMgaXQncyB0aGUgcmlnaHQgcGxhY2UsIHNvIEknbGwgcHJpb3JpdGl6ZSB0aG9zZSBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIG5ldGxpbmsgaW50ZXJmYWNlIGdldHMgcmVnaXN0ZXJlZCBhbmQgYWN0aXZhdGVkLCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNvbm50cmFjayBzdGF0ZSBtYWNoaW5lJ3MgaW5pdGlhbCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo1NS4wMTE4NTcyMjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTM1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNzI9c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNzYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwNzc6c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDc4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjkwLVxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjkxOlxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5Mi1cXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo1NS4wNzM5OTc4MTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ4MjI2ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBjdG5ldGxpbmtgIHN0dWZmLCBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgZm9jdXMgb24gd2hhdCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGRvZXMgZXhhY3RseS4gVGhhdCdzIHRoZSBjb3JlIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM0MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjU2LjU1NjI2ODYyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MTI2NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19kdW1wX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTIyMT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEyMjI6Y3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMjIzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjkxLVxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY5MjpcXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjkzLVxcdFxcdFxcdC5kb25lID0gY3RuZXRsaW5rX2RvbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjU2LjY2MzM5OTU4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDY1NDE1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb25udHJhY2sgTmV0bGluayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYENUQV9GSUxURVJfWk9ORWAgYXR0cmlidXRlIG5lc3RlZCB3aXRoaW4gYENUQV9GSUxURVJgIGZvciBjb25udHJhY2sgZmlsdGVyaW5nLiBMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQ6XG5cbjEuICAqKkF0dHJpYnV0ZSBBZGRpdGlvbjoqKiBgQ1RBX0ZJTFRFUl9aT05FYCBnZXRzIGFkZGVkIHRvIGBjdGFfZmlsdGVyX25sYV9wb2xpY3lgIGFzIGEgZmxhZyAoYE5MQV9GTEFHYCkuIFdoZW4gcGFyc2luZywgYGN0bmV0bGlua19wYXJzZV9maWx0ZXIoKWAgbm93IGNoZWNrcyBmb3IgdGhpcyBmbGFnIGFuZCBzZXRzIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO2AgaWYgaXQncyBwcmVzZW50LiBJbiBhbGxvY2F0aW9uIHdpdGggYGN0bmV0bGlua19hbGxvY19maWx0ZXIoKWAsIHRoZXJlJ3MgYSBjcnVjaWFsIGNoZWNrOiBpZiBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBpcyB0cnVlIChtZWFuaW5nIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBgQ1RBX1pPTkVgIHdhcyBzZXQpLCBidXQgdGhlIHRvcC1sZXZlbCBgQ1RBX1pPTkVgIGlzICpub3QqIHByZXNlbnQgKGAhY2RhW0NUQV9aT05FXWApLCBpdCBlcnJvcnMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGtleS4gVGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgb24gaXRzIG93biBjYW4gdHJpZ2dlciBhbiBlcnJvci4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgIHdvdWxkIGJlIHNldCB0cnVlIGlmIHRoZSB0b3AtbGV2ZWwgYENUQV9aT05FYCB3YXMgcHJlc2VudCwgbm93IGlmIGEgdXNlciBzZXRzIHRoZSBgQ1RBX0ZJTFRFUl9aT05FYCBpdCB3aWxsIGJlIHRydWUsIGJ1dCBpdCBmYWlscyBpZiB0aGVyZSBpc24ndCBhIGNvcnJlc3BvbmRpbmcgYENUQV9aT05FYCBvbiB0aGUgbWFpbiBtZXNzYWdlLlxuXG4yLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFVzZXIgc3BhY2UsIGJvdGggdW5wcml2aWxlZ2VkIGFuZCBwcml2aWxlZ2VkIChvciB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHdpdGggbmV0bGluay9uZXRmaWx0ZXIgYWNjZXNzKSwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGUgTmV0bGluayBtZXNzYWdlIHR5cGVzIGFyZSBgTkZOTF9TVUJTWVNfQ1RORVRMSU5LYCwgYElQQ1ROTF9NU0dfQ1RfR0VUYCwgYW5kIGBJUENUTkxfTVNHX0NUX0RFTEVURWAsIGFsbCBoYW5kbGVkIG92ZXIgdGhlIGBORVRMSU5LX05FVEZJTFRFUmAgc29ja2V0LCB1c2luZyBgQ1RBX0ZJTFRFUmAgYW5kIGBDVEFfWk9ORWAuIFRoaXMgaXMgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LCB0b3VjaGluZyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcy4gUUVNVS9zeXprYWxsZXIgc2hvdWxkIGJlIHBlcmZlY3RseSBmaW5lIGZvciB0ZXN0aW5nLlxuXG4zLiAgKipXb3J0aEZ1enppbmc9dHJ1ZT86KiogQWJzb2x1dGVseSEgVGhlIHJlYWNoYWJpbGl0eSwgTmV0bGluayBtZXNzYWdlIGhhbmRsaW5nLCBhbmQgYXR0cmlidXRlIHZhbGlkYXRpb24gd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUgbWFrZSB0aGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBmdXp6aW5nLlxuXG40LiAgKipGb2N1cyBTeW1ib2xzOioqIFRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBhcmU6XG5cbiAgICAqICAgYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgXG4gICAgKiAgIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYFxuICAgICogICBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGBcbiAgICAqICAgYGN0bmV0bGlua19zdGFydGBcbiAgICAqICAgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgXG4gICAgKiAgIGBjdG5ldGxpbmtfZHVtcF90YWJsZWBcbiAgICAqICAgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYFxuICAgICogICBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgXG5cbiAgICBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgLmNgIGZpbGUgY2FuIGJlIHZpc2libGUgaW4ga2FsbHN5bXMgaW4gbW9kZXJuIGtlcm5lbHMsIHBhcnRpY3VsYXJseSB3aXRoIEtBU0FOL0tDT1YuIExldCdzIG1ha2Ugc3VyZSB0aGVzZSBtYXRjaCB0aGUgb25lcyBhdmFpbGFibGUgaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLlxuXG41LiAgKipFbmFibGUgQ29uZmlndXJhdGlvbnM6KiogVGhlIGZvbGxvd2luZyBrZXJuZWwgY29uZmlncyBhcmUgZXNzZW50aWFsOlxuXG4gICAgKiAgIGBORl9DT05OVFJBQ0tgXG4gICAgKiAgIGBORl9DVF9ORVRMSU5LYFxuICAgICogICBgTkVURklMVEVSX05FVExJTktgIChzZWxlY3RlZCBieSBgTkZfQ1RfTkVUTElOS2AsIGJ1dCBnb29kIHRvIGluY2x1ZGUpXG4gICAgKiAgIGBORVRGSUxURVJgXG5cbiAgICBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIGNvbmZpcm1zOiBgTkZfQ1RfTkVUTElOS2AgZGVwZW5kcyBvbiBgTkZfQ09OTlRSQUNLYCBhbmQgc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLCBhbmQgYE5GX0NPTk5UUkFDS2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYC4gQWxsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLlxuXG5FdmVyeXRoaW5nIGxvb2tzIGNvcnJlY3QuIEkgY2FuIG5vdyB2ZXJpZnkgdGhlIHJlc3VsdHMgYXJlIGFjY3VyYXRlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzM4LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MDQuMTI4ODE4MTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTA5ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfcGFyc2VfZmlsdGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfYWxsb2NfZmlsdGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kZWxfY29ubnRyYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0bmV0bGlua19wYXJzZV9maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImN0bmV0bGlua19mbHVzaF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kdW1wX3RhYmxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9jb25udHJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENUQV9GSUxURVJfWk9ORSBhdHRyaWJ1dGUgc3VwcG9ydCB0byB0aGUgY29ubnRyYWNrIG5ldGxpbmsgZmlsdGVyaW5nIGludGVyZmFjZSwgdXBkYXRpbmcgbmV0bGluayBwb2xpY3kgYW5kIHBhcnNpbmcgbG9naWMgaW4gbmZfY29ubnRyYWNrX25ldGxpbmsuYy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBORVRMSU5LX05FVEZJTFRFUiBjb25udHJhY2sgZHVtcCBhbmQgZmx1c2ggcmVxdWVzdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjA0LjI2NzczNDE2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NTgyODU0MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjowNC4yNjgyMDY4NzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODQ1NzgwNjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDVEFfRklMVEVSX1pPTkUsIGFsbG93aW5nIGNvbm50cmFjayBkdW1wcyBhbmQgZmx1c2hlcyB0byBmaWx0ZXIgZW50cmllcyBieSB6b25lLiBcXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5OlxcbjEuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLlxcbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cXG4zLiBab25lIHBhcnNpbmcgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZSBjb21wbGV0ZWx5IHZpYSBgbmZfY3Rfem9uZV9pbml0KClgLlxcbjQuIFN0cmljdCB2YWxpZGF0aW9uIGVuc3VyZXMgYENUQV9aT05FYCBtdXN0IGJlIHByZXNlbnQgaWYgYHpvbmVfZmlsdGVyYCBpcyBzZXQuXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sXG5AQCAtMzcxLDYgKzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IHJlcGx5LWZsYWdzXG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb25cbisgICAgICAtXG4rICAgICAgICBuYW1lOiB6b25lXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lXG4rICAgICAgICAgIChgYENUQV9aT05FYGApIGF0dHJpYnV0ZVxuICAgLVxuICAgICBuYW1lOiBjb25udHJhY2stYXR0cnNcbiAgICAgYXR0cmlidXRlczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5pbmRleCA0MzIzM2FmNzViOWQ1Li45ODVmOWMwOGQzZTliIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5AQCAtMjg1LDYgKzI4NSw3IEBAIGVudW0gY3RhdHRyX2ZpbHRlciB7XG4gXHRDVEFfRklMVEVSX1VOU1BFQyxcbiBcdENUQV9GSUxURVJfT1JJR19GTEFHUyxcbiBcdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXG4rXHRDVEFfRklMVEVSX1pPTkUsXG4gXHRfX0NUQV9GSUxURVJfTUFYXG4gfTtcbiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTkxMSw2ICs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0YV9maWx0ZXJfbmxhX3BvbGljeVtDVEFfRklMVEVSX01BWCArIDFdID0ge1xuIFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuK1x0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuQEAgLTkzMCw2ICs5MzEsOSBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcbiBcdFx0ZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xuIFxuK1x0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXG4rXHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTAwNiw2ICsxMDEwLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbHRlcjtcbiBcbitcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4gXHRpZiAoY2RhW0NUQV9aT05FXSkge1xuIFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG5AQCAtMTAyMCw2ICsxMDI1LDEyIEBAIGN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9maWx0ZXI7XG4gXG4rXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xuK1x0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfZmlsdGVyO1xuK1x0fVxuK1xuIFx0aWYgKGZpbHRlci1cdTAwM2VvcmlnX2ZsYWdzKSB7XG4gXHRcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG5pbmRleCAzMWI4MjUwZGRjNTNkLi42M2Y0MTM1NmZlNmQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNcbkBAIC0yMTUsNyArMjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiBNTkxfQ0JfT0s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4rc3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcbitcdFx0XHQgIGJvb2wgdXNlX2N0YV9maWx0ZXIpXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqbmVzdDtcbitcbitcdG1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpO1xuK1xuK1x0aWYgKHVzZV9jdGFfZmlsdGVyKSB7XG4rXHRcdG5lc3QgPSBtbmxfYXR0cl9uZXN0X3N0YXJ0KG5saCwgQ1RBX0ZJTFRFUik7XG4rXHRcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XG4rXHRcdG1ubF9hdHRyX25lc3RfZW5kKG5saCwgbmVzdCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjM1LDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0yNjEsNyArMjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiBcdHJldHVybiByZXBseV9jb3VudGVyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjgxLDcgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0zMDQsNDMgKzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLUZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4te1xuLVx0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XG4tfTtcbi1cbi1GSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdFx0c3RydWN0IG1ubF9zb2NrZXQgKipzb2NrKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZWxmLVx1MDAzZXNvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpO1xuLVx0aWYgKCFzZWxmLVx1MDAzZXNvY2spIHtcbitcdCpzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTtcbitcdGlmICghKnNvY2spIHtcbiBcdFx0cGVycm9yKFwibW5sX3NvY2tldF9vcGVuXCIpO1xuLVx0XHRTS0lQKHJldHVybiwgXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcIik7XG4rXHRcdFNLSVAocmV0dXJuIC0xLCBcImNhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldFwiKTtcbiBcdH1cbiBcbi1cdHJldCA9IG1ubF9zb2NrZXRfYmluZChzZWxmLVx1MDAzZXNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4rXHRyZXQgPSBtbmxfc29ja2V0X2JpbmQoKnNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVQRVJNKVxuLVx0XHRTS0lQKHJldHVybiwgXCJOZWVkcyB0byBiZSBydW4gYXMgcm9vdFwiKTtcbitcdFx0U0tJUChyZXR1cm4gLTEsIFwiTmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcIik7XG4gXHRlbHNlIGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApXG4tXHRcdFNLSVAocmV0dXJuLCBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuK1x0XHRTS0lQKHJldHVybiAtMSxcbitcdFx0ICAgICBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGYwZjBmMGYwLCAweGYxZjFmMWYxLFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMSk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXHUwMDNlc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQgKyAyKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNyxcbiBcdFx0XHRcdFx0IE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTM1OCw5ICszNzEsOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDIwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zNzcsOSArMzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiBcdFx0XHQweDA0MDAwMDAwXG4gXHRcdH1cbiBcdH19O1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cdTAwM2Vzb2NrLCBzcmMsIGRzdCxcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCxcbiBcdFx0XHRcdFx0IFRFU1RfWk9ORV9JRCArIDEpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XG4gXHRcdC5fX3U2X2FkZHIzMiA9IHtcbiBcdFx0XHQweGI4MGQwMTIwLFxuQEAgLTM5Niw5ICs0MDksOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDYwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMik7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTQxNiwxNCArNDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwODAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsXG4gXHRcdFx0XHRcdCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbitGSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdGJvb2wgdXNlX2N0YV9maWx0ZXI7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfem9uZSlcbit7XG4rXHQudXNlX2N0YV9maWx0ZXIgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV9maWx0ZXIpXG4re1xuK1x0LnVzZV9jdGFfZmlsdGVyID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb25udHJhY2tfem9uZV9zZXR1cChfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlc29jaykpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XG4gXHRFWFBFQ1RfR0UocmV0LCAyKTtcbiBcdGlmIChyZXQgXHUwMDNlIDIpXG4gXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lXCIpO1xuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpIHtcbitcdFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIHRydWUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ1RBX0ZJTFRFUl9aT05FXCIpO1xuK1x0XHRBU1NFUlRfR0UocmV0LCAwKTtcbitcdH1cbiB9XG4gXG4gRklYVFVSRV9URUFSRE9XTihjb25udHJhY2tfZHVtcF9mbHVzaClcbkBAIC00MzQsMzkgKzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCxcbitcdFx0XHRcdCAgIHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKVxuIHtcbitcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDEsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMik7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDIsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpXG4ge1xuK1x0Ym9vbCBmaWx0ZXIgPSB2YXJpYW50LVx1MDAzZXVzZV9jdGFfZmlsdGVyO1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAxKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjowNC4yNjgyMDgxNjZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NzU5MDk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cbioqQW5hbHl6aW5nIFRoaXMgQ29kZSBDaGFuZ2UqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IGluaXRpYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlcmAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgZ28tdG8gdG9vbHMsIHByb2JhYmx5IGBncmVwYCBhbmQgYSBgcmVhZC1maWxlYCBjb21tYW5kLCB0byBlZmZlY3RpdmVseSBuYXZpZ2F0ZSBhbmQgZGlzc2VjdCB0aGUgY29kZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBpZGVhIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjA4LjIxNTgwMzM2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0MzU2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiem9uZV9maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTg5Nj1zdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTg5Ny1cXHR1OCBmYW1pbHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjg5ODpcXHRib29sIHpvbmVfZmlsdGVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy04OTktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9OTE3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNC1cXHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6OTM1OlxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9OTg5PWN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNy1cXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwMTg6XFx0XFx0ZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTktXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjgtXFx0LyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAyOTpcXHRpZiAoZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDMwLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTE2Mz1zdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNzgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExNzk6XFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4MC1cXHQgICAgIW5mX2N0X3pvbmVfZXF1YWxfYW55KGN0LCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MDguMjg0MjQ1NjI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NzE4NTA0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGFzaywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGRlbHZlIGludG8gdGhlIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCBmaWxlIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdG8gZXhhbWluZSB0aGUgYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCBhbmQgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbW1lZGlhdGVseSBzdGFydHMgdG8gYnJlYWsgdGhpcyBkb3duLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGhvdyBuZXRsaW5rIGZpbHRlcnMgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBjb25udHJhY2sgZnJhbWV3b3JrLiBXaGF0IGZpZWxkcyBkb2VzIGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmAgY29udGFpbj8gV2hhdCBkb2VzIGl0IHVzZSB0byByZXByZXNlbnQgdGhlIGNyaXRlcmlhIGZvciBmaWx0ZXJpbmcgY29ubnRyYWNrIGVudHJpZXM/IElzIGl0IGJhc2VkIG9uIGF0dHJpYnV0ZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24sIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYC4gVGhpcyBmdW5jdGlvbiBpcyBrZXkuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGVzZSBmaWx0ZXIgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kLCBpbXBsaWNpdGx5LCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgZm9yIHRoZSBmaWx0ZXJpbmcgcHJvY2Vzcy4gSXMgaXQgYWxsb2NhdGluZyBhIHNpbXBsZSBzdHJ1Y3R1cmUsIG9yIGlzIHRoZXJlIGEgZHluYW1pYyBjb21wb25lbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtZW1vcnkgbGVha3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgY29tZSB0byBtaW5kPyBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGR1cmluZyB0aGUgYWxsb2NhdGlvbj8gSG93IGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgdXNlZCBpbiB0aGUgYnJvYWRlciBuZXRsaW5rIHRyYW5zYWN0aW9uIGZsb3cgZm9yIGNvbm50cmFjayBkYXRhP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBmaWx0ZXIncyBsaWZlY3ljbGUuIEhvdyBhcmUgZmlsdGVycyBjcmVhdGVkLCBtb2RpZmllZCAoaWYgYXQgYWxsKSwgYW5kIGRlc3Ryb3llZD8gSXMgdGhlcmUgYSByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtPyBBbmQgdmVyeSBpbXBvcnRhbnRseSwgaG93IGFyZSB0aGVzZSBmaWx0ZXJzIGFjdHVhbGx5ICp1c2VkKiB0byBtYXRjaCBhZ2FpbnN0IGNvbm50cmFjayBlbnRyaWVzPyBXaGF0IGlzIHRoZSBtYXRjaGluZyBhbGdvcml0aG0sIGFuZCB3aGVyZSBpcyBpdCBpbXBsZW1lbnRlZD9cblxuSSBhbHNvIHdhbnQgdG8gdHJ5IGFuZCBkZWR1Y2UgYW55IGltcGxpY2F0aW9ucyBmcm9tIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGVtc2VsdmVzLiBGb3IgZXhhbXBsZSwgdGhlIGBjdG5ldGxpbmtfYCBwcmVmaXggaGludHMgdGhhdCB0aGlzIGNvZGUgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoaXMgZmlsdGVyaW5nIGNhcGFiaWxpdHkgaW50ZXJmYWNlcyB3aXRoIHRoZSB1c2VyIHNwYWNlIGNvbm50cmFjayB1dGlsaXRpZXMuIElzIHRoZXJlIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBrZXJuZWwncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBjb25udHJhY2sgYW5kIHdoYXQncyBleHBvc2VkIHZpYSBuZXRsaW5rP1xuXG5cbiIsIklucHV0VG9rZW5zIjo3NjAwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MTMuMDU2MDk4ODI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODk1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5NTpcXHRcXG4gODk2OlxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHtcXG4gODk3OlxcdFxcdHU4IGZhbWlseTtcXG4gODk4OlxcdFxcdGJvb2wgem9uZV9maWx0ZXI7XFxuIDg5OTpcXHRcXG4gOTAwOlxcdFxcdHVfaW50MzJfdCBvcmlnX2ZsYWdzO1xcbiA5MDE6XFx0XFx0dV9pbnQzMl90IHJlcGx5X2ZsYWdzO1xcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG9yaWc7XFxuIDkwNDpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGx5O1xcbiA5MDU6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XFxuIDkwNjpcXHRcXG4gOTA3OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBtYXJrO1xcbiA5MDg6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyIHN0YXR1cztcXG4gOTA5OlxcdH07XFxuIDkxMDpcXHRcXG4gOTExOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggKyAxXSA9IHtcXG4gOTEyOlxcdFxcdFtDVEFfRklMVEVSX09SSUdfRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuIDkxMzpcXHRcXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcXG4gOTE0OlxcdFxcdFtDVEFfRklMVEVSX1pPTkVdXFx0XFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4gOTE1OlxcdH07XFxuIDkxNjpcXHRcXG4gOTE3OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA5MTg6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyKVxcbiA5MTk6XFx0e1xcbiA5MjA6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbQ1RBX0ZJTFRFUl9NQVggKyAxXTtcXG4gOTIxOlxcdFxcdGludCByZXQgPSAwO1xcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfRklMVEVSX01BWCwgYXR0ciwgY3RhX2ZpbHRlcl9ubGFfcG9saWN5LFxcbiA5MjQ6XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwpO1xcbiA5MjU6XFx0XFx0aWYgKHJldClcXG4gOTI2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdGlmICh0YltDVEFfRklMVEVSX09SSUdfRkxBR1NdKVxcbiA5Mjk6XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXSk7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcXG4gOTMyOlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSk7XFxuIDkzMzpcXHRcXG4gOTM0OlxcdFxcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxcbiA5MzU6XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XFxuIDkzNjpcXHRcXG4gOTM3OlxcdFxcdHJldHVybiAwO1xcbiA5Mzg6XFx0fVxcbiA5Mzk6XFx0XFxuIDk0MDpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDk0MTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpO1xcbiA5NDI6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfdHVwbGVfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSxcXG4gOTQzOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG4gOTQ0OlxcdFxcdFxcdFxcdFxcdFxcdCB1MzIgdHlwZSwgdV9pbnQ4X3QgbDNudW0sXFxuIDk0NTpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lLFxcbiA5NDY6XFx0XFx0XFx0XFx0XFx0XFx0IHVfaW50MzJfdCBmbGFncyk7XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqbWFyayxcXG4gOTQ5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXFxuIDk1MDpcXHR7XFxuIDk1MTpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuIDk1MjpcXHRcXHRpZiAoY2RhW0NUQV9NQVJLXSkge1xcbiA5NTM6XFx0XFx0XFx0bWFyay1cXHUwMDNldmFsID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfTUFSS10pKTtcXG4gOTU0OlxcdFxcbiA5NTU6XFx0XFx0XFx0aWYgKGNkYVtDVEFfTUFSS19NQVNLXSlcXG4gOTU2OlxcdFxcdFxcdFxcdG1hcmstXFx1MDAzZW1hc2sgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLX01BU0tdKSk7XFxuIDk1NzpcXHRcXHRcXHRlbHNlXFxuIDk1ODpcXHRcXHRcXHRcXHRtYXJrLVxcdTAwM2VtYXNrID0gMHhmZmZmZmZmZjtcXG4gOTU5OlxcdFxcdH0gZWxzZSBpZiAoY2RhW0NUQV9NQVJLX01BU0tdKSB7XFxuIDk2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTYxOlxcdFxcdH1cXG4gOTYyOlxcdCNlbmRpZlxcbiA5NjM6XFx0XFx0cmV0dXJuIDA7XFxuIDk2NDpcXHR9XFxuIDk2NTpcXHRcXG4gOTY2OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9zdGF0dXMoc3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyICpzdGF0dXMsXFxuIDk2NzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbiA5Njg6XFx0e1xcbiA5Njk6XFx0XFx0aWYgKGNkYVtDVEFfU1RBVFVTXSkge1xcbiA5NzA6XFx0XFx0XFx0c3RhdHVzLVxcdTAwM2V2YWwgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9TVEFUVVNdKSk7XFxuIDk3MTpcXHRcXHRcXHRpZiAoY2RhW0NUQV9TVEFUVVNfTUFTS10pXFxuIDk3MjpcXHRcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZW1hc2sgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9TVEFUVVNfTUFTS10pKTtcXG4gOTczOlxcdFxcdFxcdGVsc2VcXG4gOTc0OlxcdFxcdFxcdFxcdHN0YXR1cy1cXHUwMDNlbWFzayA9IHN0YXR1cy1cXHUwMDNldmFsO1xcbiA5NzU6XFx0XFxuIDk3NjpcXHRcXHRcXHQvKiBzdGF0dXMtXFx1MDAzZXZhbCA9PSAwPyBhbHdheXMgdHJ1ZSwgZWxzZSBhbHdheXMgZmFsc2UuICovXFxuIDk3NzpcXHRcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VtYXNrID09IDApXFxuIDk3ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTc5OlxcdFxcdH0gZWxzZSBpZiAoY2RhW0NUQV9TVEFUVVNfTUFTS10pIHtcXG4gOTgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5ODE6XFx0XFx0fVxcbiA5ODI6XFx0XFxuIDk4MzpcXHRcXHQvKiBDVEFfU1RBVFVTIGlzIE5MQV9VMzIsIGlmIHRoaXMgZmlyZXMgVUFQSSBuZWVkcyB0byBiZSBleHRlbmRlZCAqL1xcbiA5ODQ6XFx0XFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXFx1MDAzZT0gMzIpO1xcbiA5ODU6XFx0XFx0cmV0dXJuIDA7XFxuIDk4NjpcXHR9XFxuIDk4NzpcXHRcXG4gOTg4OlxcdHN0YXRpYyBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqXFxuIDk4OTpcXHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiA5OTA6XFx0e1xcbiA5OTE6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcjtcXG4gOTkyOlxcdFxcdGludCBlcnI7XFxuIDk5MzpcXHRcXG4gOTk0OlxcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjEzLjA1NjI4MjE3NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ4NjI1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIG5mX2Nvbm50cmFja19uZXRsaW5rLmM6IExpbmVzIDk5NS0xMDYwKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyA5OTUgdG8gMTA2MCBvZiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFJpZ2h0LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBwcm9iYWJseSBoYW5kbGluZyBhIHNwZWNpZmljIGNvbW1hbmQgb3IgYXR0cmlidXRlIHNldC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiByZXRyaWV2YWwsIG1vZGlmaWNhdGlvbiwgb3IgbWF5YmUgZXZlbnQgbm90aWZpY2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZCBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBoYW5kbGluZyB0aGUgdmFyaW91cyBuZXRsaW5rIG1lc3NhZ2VzLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3MgYW55IGNvbXBsZXggYXR0cmlidXRlIHBhcnNpbmcgb3IgZXJyb3IgY2hlY2tpbmcgaW52b2x2ZWQuIEknbSBsb29raW5nIGZvciB0aGUgZmxvdyBvZiBkYXRhOiB3aGVyZSBpdCdzIGNvbWluZyBmcm9tLCBob3cgaXQncyBiZWluZyBpbnRlcnByZXRlZCwgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIGJlaW5nIHRyaWdnZXJlZCBiYXNlZCBvbiB0aGUgZGF0YS4gSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgY29uY3VycmVuY3kgaXMgbWFuYWdlZCBjb3JyZWN0bHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIHRoZSBoZWFydCBvZiBpbnRlcmZhY2luZyB0aGUgY29ubnRyYWNrIHN5c3RlbSB3aXRoIHVzZXIgc3BhY2UsIHNvIGFueSBlZmZpY2llbmN5IGJvdHRsZW5lY2tzIGhlcmUgd291bGQgYmUgZXh0cmVtZWx5IGNyaXRpY2FsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgYXR0cmlidXRlIHR5cGVzIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5qZWN0aW9uIGZsYXdzLiBBbnkgc3BlY2lhbCBjYXJlIHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHNvIGltcG9ydGFudCAtIGxlYWtzIGFyZSBuZXZlciBhY2NlcHRhYmxlLiBBbHNvLCBJJ20gY3VyaW91cyB3aGV0aGVyIGFueSBzcGVjaWZpYyBmaWx0ZXJpbmcgb3IgbWF0Y2hpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyOSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MTUuNjA0OTEwMjE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTk1OlxcdFxcdGlmIChjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfTUFSS19NQVNLXSlcXG4gOTk2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4gOTk3OlxcdCNlbmRpZlxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRmaWx0ZXIgPSBremFsbG9jX29iaigqZmlsdGVyKTtcXG4xMDAwOlxcdFxcdGlmIChmaWx0ZXIgPT0gTlVMTClcXG4xMDAxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRmaWx0ZXItXFx1MDAzZWZhbWlseSA9IGZhbWlseTtcXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKFxcdTAwMjZmaWx0ZXItXFx1MDAzZW1hcmssIGNkYSk7XFxuMTAwNjpcXHRcXHRpZiAoZXJyKVxcbjEwMDc6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMDg6XFx0XFxuMTAwOTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcXHUwMDI2ZmlsdGVyLVxcdTAwM2VzdGF0dXMsIGNkYSk7XFxuMTAxMDpcXHRcXHRpZiAoZXJyKVxcbjEwMTE6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHQvKiBDVEFfWk9ORSBpcyBhbGxvd2VkIHdpdGhvdXQgQ1RBX0ZJTFRFUl9aT05FLiAqL1xcbjEwMTQ6XFx0XFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcXG4xMDE1OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXpvbmUpO1xcbjEwMTY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTAxNzpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAxODpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG4xMDE5OlxcdFxcdH1cXG4xMDIwOlxcdFxcbjEwMjE6XFx0XFx0aWYgKCFjZGFbQ1RBX0ZJTFRFUl0pXFxuMTAyMjpcXHRcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNkYVtDVEFfRklMVEVSXSwgZmlsdGVyKTtcXG4xMDI1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwMjY6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xcbjEwMjk6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcXG4xMDMwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTAzMTpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAzMjpcXHRcXHR9XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW9yaWdfZmxhZ3MpIHtcXG4xMDM1OlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xcbjEwMzY6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDM3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDM4OlxcdFxcdFxcdH1cXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW9yaWcsXFxuMTA0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBDVEFfVFVQTEVfT1JJRyxcXG4xMDQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDQ0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyk7XFxuMTA0NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDQ2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDQ3OlxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpIHtcXG4xMDUwOlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9SRVBMWV0pIHtcXG4xMDUxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTA1MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA1MzpcXHRcXHRcXHR9XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyZXBseSxcXG4xMDU2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIENUQV9UVVBMRV9SRVBMWSxcXG4xMDU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwNTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDU5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTA2MTpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA2MjpcXHRcXHR9XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdHJldHVybiBmaWx0ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjE1LjYwNTE2Mjc5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODQ1ODM3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgRmlsdGVyIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmlsdGVyIGlzIGFsbG9jYXRlZCBhbmQgcGFyc2VkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHpvbmUgZmlsdGVyaW5nLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIHN0YXJ0aW5nIHdpdGggYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLCB3aGVyZSB0aGUgYGZpbHRlcmAgc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgY3JpdGljYWwgYXMgaXQgemVyb2VzIG91dCBhbGwgZmllbGRzLCBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cblxuTm93LCB0aGUgZmxvdy4gRmlyc3QsIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgaXMgY2FsbGVkLiBJZiB0aGUgQ29tbW9uIERhdGEgQXR0cmlidXRlIChDREEpIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlcmAgaXMgc2V0IHRvIGB0cnVlYCBhbmQgdGhlIHpvbmUgaXMgcGFyc2VkLiBPdGhlcndpc2UsIG5vdGhpbmcgaGFwcGVucyBhdCB0aGlzIHN0YWdlIGFuZCBgem9uZV9maWx0ZXJgIHJlbWFpbnMgYGZhbHNlYC5cblxuVGhlbiwgYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgIGtpY2tzIGluLiBIZXJlJ3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSW5zaWRlIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgdGhlIHByZXNlbmNlIG9mIGEgbmVzdGVkIGF0dHJpYnV0ZSBgQ1RBX0ZJTFRFUl9aT05FYCB3aXRoaW4gdGhlIENEQSB0YWJsZSBzZXRzIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgIHRvIGB0cnVlYC4gVGhpcyBjcmVhdGVzIGEgcG90ZW50aWFsIGNvbmZsaWN0LlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgdGhpcyBjaGVjazogYGlmIChmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFjZGFbQ1RBX1pPTkVdKWAuIElmIGBDVEFfRklMVEVSX1pPTkVgIGlzIHNldCwgYW5kICpvbmx5KiBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBzZXQgKGJ1dCBub3QgdGhlIGBDVEFfWk9ORWApLCBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBiZWNvbWVzIGB0cnVlYCBiZWNhdXNlIHRoZSBuZXN0ZWQgYXR0cmlidXRlIHNldHMgaXQuIEJ1dCB0aGUgc3Vic2VxdWVudCBjaGVjayBpbW1lZGlhdGVseSBlcnJvcnMgb3V0ISBJdCdzIGFuIGBFSU5WQUxgIGVycm9yLiBUaGlzIG1lYW5zIHlvdSBjYW4ndCBzcGVjaWZ5IGEgem9uZSBmaWx0ZXIgbmVzdGVkIHdpdGhpbiB0aGUgZmlsdGVyIGl0c2VsZiB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGBDVEFfWk9ORWAgaW4gdGhlIHRvcCBsZXZlbC4gVGhlIGRlc2lnbiBzZWVtcyB0byBoYXZlIGEgcHJvYmxlbS5cblxuQmFzaWNhbGx5LCBpZiB0aGUgb3V0ZXIgYENUQV9aT05FYCBpcyAqbm90KiBwcmVzZW50IGJ1dCB0aGUgaW5uZXIgYENUQV9GSUxURVJfWk9ORWAgaXMsIHRoZW4geW91IGltbWVkaWF0ZWx5IGdldCBhbiBpbnZhbGlkIGFyZ3VtZW50IGVycm9yLiBJdCBzdWdnZXN0cyB0aGVyZSdzIHNvbWUga2luZCBvZiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9yIGluY29uc2lzdGVuY3kgaW4gdGhlIGV4cGVjdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZGlnIGludG8gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlcmAgYW5kIGBmaWx0ZXItXHUwMDNlem9uZWAgYXJlICphY3R1YWxseSogdXNlZC4gVGhhdCdsbCB0ZWxsIG1lIGlmIHRoaXMgaXMganVzdCBhIG1pbm9yIHZhbGlkYXRpb24gZXJyb3IsIG9yIGEgZnVuZGFtZW50YWwgZmxhdyBpbiB0aGUgZmlsdGVyaW5nIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCwgYW5kIGlmIHRoZSBmaWx0ZXJpbmcgcHJvY2VzcyBjYW4gZXZlbiBvcGVyYXRlIGNvcnJlY3RseSB3aGVuIHRoaXMgc2NlbmFyaW8gaXMgcHJldmVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjE5LjQ1MTAwNDA2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNjA6XFx0XFx0cmV0dXJuIDE7XFxuMTE2MTpcXHR9XFxuMTE2MjpcXHRcXG4xMTYzOlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuMTE2NDpcXHR7XFxuMTE2NTpcXHRcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyID0gZGF0YTtcXG4xMTY2OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlO1xcbjExNjc6XFx0XFx0dTMyIHN0YXR1cztcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0aWYgKGZpbHRlciA9PSBOVUxMKVxcbjExNzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MTpcXHRcXG4xMTcyOlxcdFxcdC8qIE1hdGNoIGVudHJpZXMgb2YgYSBnaXZlbiBMMyBwcm90b2NvbCBudW1iZXIuXFxuMTE3MzpcXHRcXHQgKiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCBpZS4gbDNwcm90byA9PSAwLFxcbjExNzQ6XFx0XFx0ICogdGhlbiBtYXRjaCBldmVyeXRoaW5nLlxcbjExNzU6XFx0XFx0ICovXFxuMTE3NjpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VmYW1pbHkgXFx1MDAyNlxcdTAwMjYgbmZfY3RfbDNudW0oY3QpICE9IGZpbHRlci1cXHUwMDNlZmFtaWx5KVxcbjExNzc6XFx0XFx0XFx0Z290byBpZ25vcmVfZW50cnk7XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyIFxcdTAwMjZcXHUwMDI2XFxuMTE4MDpcXHRcXHQgICAgIW5mX2N0X3pvbmVfZXF1YWxfYW55KGN0LCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKSlcXG4xMTgxOlxcdFxcdFxcdGdvdG8gaWdub3JlX2VudHJ5O1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzKSB7XFxuMTE4NDpcXHRcXHRcXHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xcbjExODU6XFx0XFx0XFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFxcdTAwMjZmaWx0ZXItXFx1MDAzZW9yaWcsIHR1cGxlLFxcbjExODY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmaWx0ZXItXFx1MDAzZW9yaWdfZmxhZ3MsXFxuMTE4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlZmFtaWx5KSlcXG4xMTg4OlxcdFxcdFxcdFxcdGdvdG8gaWdub3JlX2VudHJ5O1xcbjExODk6XFx0XFx0fVxcbjExOTA6XFx0XFxuMTE5MTpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncykge1xcbjExOTI6XFx0XFx0XFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX1JFUExZKTtcXG4xMTkzOlxcdFxcdFxcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyZXBseSwgdHVwbGUsXFxuMTE5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MsXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlZmFtaWx5KSlcXG4xMTk2OlxcdFxcdFxcdFxcdGdvdG8gaWdub3JlX2VudHJ5O1xcbjExOTc6XFx0XFx0fVxcbjExOTg6XFx0XFxuMTE5OTpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjE5LjQ1MTIyNjI5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODg0MTI1ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBOZXcgRmlsdGVyIFBvbGljeSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgc3RydWN0dXJlLiBJIHNlZSB0aGF0IGBDVEFfRklMVEVSX1pPTkVgIGlzIHNldCB0byBgLnR5cGUgPSBOTEFfRkxBR2AgaW4gdGhlcmUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgYWxzbyB2ZXJpZmllZCB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGVudW0gYGN0YXR0cl9maWx0ZXJgIGluY2x1ZGVzIGBDVEFfRklMVEVSX1pPTkVgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBjb25zaXN0ZW5jeS5cblxuSSd2ZSBhbHNvIG1hZGUgc3VyZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHNlbGZ0ZXN0cyBhcmUgdXAgdG8gZGF0ZSwgY292ZXJpbmcgdGhpcyBuZXcgYWRkaXRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSBvdGhlciBwb2ludHMgaW4gdGhlIGNvZGViYXNlIHdoZXJlIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBwZXJoYXBzIHRoZSBvbGRlciBgem9uZV9maWx0ZXJgIGlzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBjbGVhbiBhbmQgZG9lc24ndCBjb25mbGljdCB3aXRoIG90aGVyIGFyZWFzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlICpvbmx5KiBwbGFjZSB0aGlzIHpvbmUgZmlsdGVyIGZsYWcgaXMgYmVpbmcgdXNlZC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjoyMS4zMzUzNTU3OThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTQyODU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1RBX0ZJTFRFUl9aT05FXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPTI4ND1lbnVtIGN0YXR0cl9maWx0ZXIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgtMjg3LVxcdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmg6Mjg4OlxcdENUQV9GSUxURVJfWk9ORSxcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaC0yODktXFx0X19DVEFfRklMVEVSX01BWFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTEzLVxcdFtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5MTQ6XFx0W0NUQV9GSUxURVJfWk9ORV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MTUtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTMzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5MzQ6XFx0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNS1cXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODk9Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDEzOlxcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTQtXFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDI3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDI4OlxcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjktXFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYz0yMTg9c3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy0yMjYtXFx0XFx0bmVzdCA9IG1ubF9hdHRyX25lc3Rfc3RhcnQobmxoLCBDVEFfRklMVEVSKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmM6MjI3OlxcdFxcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTIyOC1cXHRcXHRtbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jPTQ1OT1GSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTQ3My1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jOjQ3NDpcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENUQV9GSUxURVJfWk9ORVxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy00NzUtXFx0XFx0QVNTRVJUX0dFKHJldCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjIzLjY4OTY0NzMzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTAzNjkyMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzY3J1dGluaXplIGl0IGZvciBhbnkgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhpbmdlcyBvbiBob3cgYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgaGFuZGxlcyB0aGUgYFtDVEFfRklMVEVSX1pPTkVdYCBhdHRyaWJ1dGUgLSBzcGVjaWZpY2FsbHkgdGhlIGBOTEFfRkxBR2AgdHlwZS4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIGFyZSBvcGVuaW5nIG91cnNlbHZlcyB1cCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Gcm9tIHdoYXQgSSBjYW4gc2VlLCBgZmlsdGVyYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBlbnN1cmVzIGV2ZXJ5IGZpZWxkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBzdGFydHMgd2l0aCBhIGtub3duIHplcm8gdmFsdWUuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIG1pdGlnYXRpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMuXG5cbk5vdywgbG9va2luZyBmdXJ0aGVyLCBgdGJbQ1RBX0ZJTFRFUl9aT05FXWAgc2V0cyBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCB0byB0cnVlLiBTbywgd2UndmUgZ290IGEgYm9vbGVhbiBmbGFnIGJlaW5nIGV4cGxpY2l0bHkgc2V0LiBBbmQgdGhlbiB0aGVyZSdzIGFuIGVhcmx5IGVycm9yIGNoZWNrOiBpZiBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBpcyB0cnVlLCAqYW5kKiBgY2RhW0NUQV9aT05FXWAgaXMgKm5vdCogcHJlc2VudCAoaS5lLiwgbm90IGRlZmluZWQpLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGEgdXNlZnVsIGNoZWNrLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGxpY2F0aW9ucy5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGNvbWVzIGluIHRoZSBmaW5hbCBjb25kaXRpb246IGlmIGBjZGFbQ1RBX1pPTkVdYCAqaXMqIGRlZmluZWQsIHRoZW4gYGZpbHRlci1cdTAwM2V6b25lYCBpcyBwb3B1bGF0ZWQgdmlhIHRoZSBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgLiBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgKmFsd2F5cyogc2V0cyBhbGwgbWVtYmVycyBvZiBgZmlsdGVyLVx1MDAzZXpvbmVgIHRvIGEga25vd24sIHZhbGlkIHZhbHVlLiBJZiBpdCBmYWlscyB0byBkbyBzbywgd2UgbWlnaHQgZmluZCBvdXJzZWx2ZXMgd2l0aCBhIG1lbW9yeSBsZWFrIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcy4gU28sIGxldCdzIGdvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODkwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjI2Ljc5MzM0NDU0NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4MTA1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX3BhcnNlX3pvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxNz1zdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjk0MDpzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTk0MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTQtXFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAxNTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNDE5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTQyMDpjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNDIxLVxcdFxcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE0MzY9Y3RuZXRsaW5rX3BhcnNlX3R1cGxlX3pvbmUoc3RydWN0IG5sYXR0ciAqYXR0ciwgZW51bSBjdGF0dHJfdHlwZSB0eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE0NDMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE0NDQ6XFx0cmV0ID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoYXR0ciwgem9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE0NDUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTYyND1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTYzNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTYzNTpcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MzYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTY3Nz1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTcwMDpcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE3MDEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjM5Nj1zdGF0aWMgaW50IGN0bmV0bGlua19uZXdfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjQwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjQwNzpcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI0MDgtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzI3Mz1zdGF0aWMgaW50IGN0bmV0bGlua19kdW1wX2V4cF9jdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMyOTYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjMyOTc6XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFxcdTAwMjZ6b25lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzI5OC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zMzIwPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zMzQzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozMzQ0OlxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzNDUtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQxNj1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQyNy1cXHRcXHQvKiBkZWxldGUgYSBzaW5nbGUgZXhwZWN0IGJ5IHR1cGxlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0Mjg6XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFxcdTAwMjZ6b25lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQyOS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNjU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX25ld19leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNjY4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjY5OlxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2NzAtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjI2Ljg2NzE2MDI2NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjA4MzY1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGN0bmV0bGlua19wYXJzZV96b25lYCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgem9uZS1yZWxhdGVkIE5ldGxpbmsgbWVzc2FnZXMsIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBzdGFydCBieSByZXZpZXdpbmcgaXRzIHN0cnVjdHVyZSwgaG93IGl0IHBhcnNlcyB0aGUgaW5jb21pbmcgZGF0YSwgYW5kIHdoYXQgYWN0aW9ucyBpdCB0YWtlcyBiYXNlZCBvbiB0aGUgcGFyc2VkIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgdGhhdCBpdCBjb3JyZWN0bHkgbWFuYWdlcyBkaWZmZXJlbnQgZXJyb3IgY29uZGl0aW9ucyB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkgYW0gYWxzbyBnb2luZyB0byBzZWUgaWYgSSBjYW4gZmluZCBhcmVhcyBvZiBvcHRpbWl6YXRpb24gdG8gaW1wcm92ZSB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDI4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MjguNDc1NTI4Njk0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxOCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxODpcXHRcXG4xNDE5OlxcdHN0YXRpYyBpbnRcXG4xNDIwOlxcdGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuMTQyMTpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSlcXG4xNDIyOlxcdHtcXG4xNDIzOlxcdFxcdG5mX2N0X3pvbmVfaW5pdCh6b25lLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsXFxuMTQyNDpcXHRcXHRcXHRcXHRORl9DVF9ERUZBVUxUX1pPTkVfRElSLCAwKTtcXG4xNDI1OlxcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTXFxuMTQyNjpcXHRcXHRpZiAoYXR0cilcXG4xNDI3OlxcdFxcdFxcdHpvbmUtXFx1MDAzZWlkID0gbnRvaHMobmxhX2dldF9iZTE2KGF0dHIpKTtcXG4xNDI4OlxcdCNlbHNlXFxuMTQyOTpcXHRcXHRpZiAoYXR0cilcXG4xNDMwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNDMxOlxcdCNlbmRpZlxcbjE0MzI6XFx0XFx0cmV0dXJuIDA7XFxuMTQzMzpcXHR9XFxuMTQzNDpcXHRcXG4xNDM1OlxcdHN0YXRpYyBpbnRcXG4xNDM2OlxcdGN0bmV0bGlua19wYXJzZV90dXBsZV96b25lKHN0cnVjdCBubGF0dHIgKmF0dHIsIGVudW0gY3RhdHRyX3R5cGUgdHlwZSxcXG4xNDM3OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSlcXG4xNDM4OlxcdHtcXG4xNDM5OlxcdFxcdGludCByZXQ7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdGlmICh6b25lLVxcdTAwM2VpZCAhPSBORl9DVF9ERUZBVUxUX1pPTkVfSUQpXFxuMTQ0MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MjguNDc1Nzg1NjY0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTAyMDA3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaXNrIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIFRoaXMgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSB0aGF0IGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgaW5pdGlhbGl6ZXMgdGhlIHpvbmUgdGhyb3VnaCBgbmZfY3Rfem9uZV9pbml0YCwgd2hpY2ggaXMgZ29vZC4gVGhlIGBmaWx0ZXJgIG9iamVjdCwgYSBrZXkgZWxlbWVudCwgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhhdCdzIGEgc29saWQgc3RhcnQuXG5cbk5vdywgdGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgd2l0aGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGBDVEFfRklMVEVSYCBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBJZiBpdCdzIHByZXNlbnQsIGFzIGluZGljYXRlZCBieSB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nLCBpdCBzZXRzIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgIHRvIHRydWUuIFRoZSB2YWxpZGF0aW9uIHN0ZXAgaXMgY3JpdGljYWwgaGVyZTogaXQgZW5zdXJlcyB0aGF0IGlmIGB6b25lX2ZpbHRlcmAgaXMgdHJ1ZSwgdGhlIGBDVEFfWk9ORWAgYXR0cmlidXRlICptdXN0KiBhbHNvIGJlIHByZXNlbnQuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrIHRvIHByZXZlbnQgYSBzY2VuYXJpbyB3aGVyZSB0aGUgem9uZSBpc24ndCBwcm9wZXJseSBkZWZpbmVkLiBXaGVuIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGN0bmV0bGlua19wYXJzZV96b25lYCBwYXJzZXMgdGhlIHpvbmUgaW50byBgZmlsdGVyLVx1MDAzZXpvbmVgLlxuXG5GaW5hbGx5LCB0aGUgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9uIHVzZXMgdGhpcyBkYXRhLiBJIHNlZSBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIW5mX2N0X3pvbmVfZXF1YWxfYW55KGN0LCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSkpIGdvdG8gaWdub3JlX2VudHJ5O2AuIFRoaXMgbWVhbnMgaWYgYHpvbmVfZmlsdGVyYCBpcyBlbmFibGVkLCBpdCBjaGVja3MgaWYgdGhlIHpvbmVzIGFyZSBlcXVhbCB0byBwcmV2ZW50IHRoZSBlbnRyeSBmcm9tIGdvaW5nIG9uLlxuXG5Db25zaWRlcmluZyBhbGwgdGhpcywgaXQgKmFwcGVhcnMqIHRoYXQgdGhlcmUgYXJlIG5vIGltbWVkaWF0ZSByaXNrcy4gSSBkb24ndCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgbWVtb3J5IGxlYWtzIG9yIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmVuJ3QgYW55IGJ1ZmZlciBsZW5ndGggb3IgYm91bmQgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgZWl0aGVyLiBTbywgaW4gbXkgZXhwZXJ0IG9waW5pb24sIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4uIFRoZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgc3VpdGVzIHNob3VsZCBiZSBjb21wbGV0ZWx5IHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgaXNzdWVzLlxuXG5Ob3csIGxldCdzIHByZXBhcmUgdGhlIHRvb2wgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYwNywiT3V0cHV0VG9rZW5zIjoyMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjozMi43MjU5ODk0NDhaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eTpcXG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cXG4yLiBUaGUgYXR0cmlidXRlIHBvbGljeSBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBkZWZpbmVkIGFzIGBOTEFfRkxBR2AsIHBhcnNlZCB2aWEgbmV0bGluayBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgKGBubGFfcGFyc2VfbmVzdGVkYCkuXFxuMy4gWm9uZSBwYXJzaW5nIGluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmUgY29tcGxldGVseSB2aWEgYG5mX2N0X3pvbmVfaW5pdCgpYC5cXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDVEFfRklMVEVSX1pPTkUsIGFsbG93aW5nIGNvbm50cmFjayBkdW1wcyBhbmQgZmx1c2hlcyB0byBmaWx0ZXIgZW50cmllcyBieSB6b25lLiBcXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5OlxcbjEuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLlxcbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cXG4zLiBab25lIHBhcnNpbmcgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZSBjb21wbGV0ZWx5IHZpYSBgbmZfY3Rfem9uZV9pbml0KClgLlxcbjQuIFN0cmljdCB2YWxpZGF0aW9uIGVuc3VyZXMgYENUQV9aT05FYCBtdXN0IGJlIHByZXNlbnQgaWYgYHpvbmVfZmlsdGVyYCBpcyBzZXQuXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzl8kd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 04:55:01 +0000 UTC FinishedAt: 2026-09-06 05:42:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "NETFILTER_NETLINK", "NETFILTER" ], "series_id": "6f0c73e9-bea4-425a-aec3-fa949f5b6d12" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctnetlink_parse_filter", "ctnetlink_alloc_filter", "ctnetlink_filter_match", "ctnetlink_flush_conntrack", "ctnetlink_dump_table", "ctnetlink_get_conntrack", "ctnetlink_del_conntrack" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19wYXJzZV9maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENUQV9GSUxURVJfWk9ORSwgYWxsb3dpbmcgY29ubnRyYWNrIGR1bXBzIGFuZCBmbHVzaGVzIHRvIGZpbHRlciBlbnRyaWVzIGJ5IHpvbmUuIFxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5OlxuMS4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChgc3RydWN0IGN0bmV0bGlua19maWx0ZXJgKSBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMgaW5jbHVkaW5nIGB6b25lX2ZpbHRlcmAuXG4yLiBUaGUgYXR0cmlidXRlIHBvbGljeSBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBkZWZpbmVkIGFzIGBOTEFfRkxBR2AsIHBhcnNlZCB2aWEgbmV0bGluayBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgKGBubGFfcGFyc2VfbmVzdGVkYCkuXG4zLiBab25lIHBhcnNpbmcgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZSBjb21wbGV0ZWx5IHZpYSBgbmZfY3Rfem9uZV9pbml0KClgLlxuNC4gU3RyaWN0IHZhbGlkYXRpb24gZW5zdXJlcyBgQ1RBX1pPTkVgIG11c3QgYmUgcHJlc2VudCBpZiBgem9uZV9maWx0ZXJgIGlzIHNldC5cbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIENUQV9GSUxURVJfWk9ORSBhdHRyaWJ1dGUgc3VwcG9ydCB0byB0aGUgY29ubnRyYWNrIG5ldGxpbmsgZmlsdGVyaW5nIGludGVyZmFjZSwgdXBkYXRpbmcgbmV0bGluayBwb2xpY3kgYW5kIHBhcnNpbmcgbG9naWMgaW4gbmZfY29ubnRyYWNrX25ldGxpbmsuYy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBORVRMSU5LX05FVEZJTFRFUiBjb25udHJhY2sgZHVtcCBhbmQgZmx1c2ggcmVxdWVzdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcbmluZGV4IGIxZWIxMDJhYjg0MzIuLmNmYzExM2JhMzQwMjkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuQEAgLTM3MSw2ICYjNDM7MzcxLDExIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogcmVwbHktZmxhZ3NcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBiaXRtYXNrIG9mIHR1cGxlIGZpZWxkcyB0byBmaWx0ZXIgb24sIHJlcGx5IGRpcmVjdGlvblxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogem9uZVxuJiM0MzsgICAgICAgIHR5cGU6IGZsYWdcbiYjNDM7ICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lXG4mIzQzOyAgICAgICAgICAoYGBDVEFfWk9ORWBgKSBhdHRyaWJ1dGVcbiAgIC1cbiAgICAgbmFtZTogY29ubnRyYWNrLWF0dHJzXG4gICAgIGF0dHJpYnV0ZXM6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaFxuaW5kZXggNDMyMzNhZjc1YjlkNS4uOTg1ZjljMDhkM2U5YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaFxuQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgZW51bSBjdGF0dHJfZmlsdGVyIHtcbiBcdENUQV9GSUxURVJfVU5TUEVDLFxuIFx0Q1RBX0ZJTFRFUl9PUklHX0ZMQUdTLFxuIFx0Q1RBX0ZJTFRFUl9SRVBMWV9GTEFHUyxcbiYjNDM7XHRDVEFfRklMVEVSX1pPTkUsXG4gXHRfX0NUQV9GSUxURVJfTUFYXG4gfTtcbiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTkxMSw2ICYjNDM7OTExLDcgQEAgc3RydWN0IGN0bmV0bGlua19maWx0ZXIge1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV0gPSB7XG4gXHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcbiBcdFtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4mIzQzO1x0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuQEAgLTkzMCw2ICYjNDM7OTMxLDkgQEAgc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHRpZiAodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pXG4gXHRcdGZpbHRlci1cdTAwM2VyZXBseV9mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKTtcbiBcbiYjNDM7XHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcbiYjNDM7XHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMDYsNiAmIzQzOzEwMTAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZmlsdGVyO1xuIFxuJiM0MztcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4gXHRpZiAoY2RhW0NUQV9aT05FXSkge1xuIFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG5AQCAtMTAyMCw2ICYjNDM7MTAyNSwxMiBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZmlsdGVyO1xuIFxuJiM0MztcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXG4mIzQzO1x0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9maWx0ZXI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChmaWx0ZXItXHUwMDNlb3JpZ19mbGFncykge1xuIFx0XHRpZiAoIWNkYVtDVEFfVFVQTEVfT1JJR10pIHtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xuaW5kZXggMzFiODI1MGRkYzUzZC4uNjNmNDEzNTZmZTZkNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG5AQCAtMjE1LDcgJiM0MzsyMTUsMjIgQEAgc3RhdGljIGludCBjb3VudF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIE1OTF9DQl9PSztcbiB9XG4gXG4tc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiYjNDM7c3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcbiYjNDM7XHRcdFx0ICBib29sIHVzZV9jdGFfZmlsdGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqbmVzdDtcbiYjNDM7XG4mIzQzO1x0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VfY3RhX2ZpbHRlcikge1xuJiM0MztcdFx0bmVzdCA9IG1ubF9hdHRyX25lc3Rfc3RhcnQobmxoLCBDVEFfRklMVEVSKTtcbiYjNDM7XHRcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XG4mIzQzO1x0XHRtbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSxcbiYjNDM7XHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjM1LDcgJiM0MzsyNTAsNyBAQCBzdGF0aWMgaW50IGNvbm50cmFja19jb3VudF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuIFx0bmZoLVx1MDAzZXZlcnNpb24gPSBORk5FVExJTktfVjA7XG4gXHRuZmgtXHUwMDNlcmVzX2lkID0gMDtcbiBcbi1cdG1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpO1xuJiM0MztcdHB1dF96b25lX2F0dHIobmxoLCB6b25lLCB1c2VfY3RhX2ZpbHRlcik7XG4gXG4gXHRyZXQgPSBtbmxfc29ja2V0X3NlbmR0byhzb2NrLCBubGgsIG5saC1cdTAwM2VubG1zZ19sZW4pO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuQEAgLTI2MSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiBcdHJldHVybiByZXBseV9jb3VudGVyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuJiM0MztzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lLFxuJiM0MztcdFx0XHRcdGJvb2wgdXNlX2N0YV9maWx0ZXIpXG4ge1xuIFx0Y2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07XG4gXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbkBAIC0yODEsNyAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4mIzQzO1x0cHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTtcbiBcbiBcdHJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLVx1MDAzZW5sbXNnX2xlbik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG5AQCAtMzA0LDQzICYjNDM7MzIwLDQwIEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tRklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaClcbi17XG4tXHRzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaztcbi19O1xuLVxuLUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4mIzQzO3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBtbmxfc29ja2V0ICoqc29jaylcbiB7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgc3JjLCBkc3Q7XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2VsZi1cdTAwM2Vzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTtcbi1cdGlmICghc2VsZi1cdTAwM2Vzb2NrKSB7XG4mIzQzO1x0KnNvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpO1xuJiM0MztcdGlmICghKnNvY2spIHtcbiBcdFx0cGVycm9yKFwmIzM0O21ubF9zb2NrZXRfb3BlblwmIzM0Oyk7XG4tXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcJiMzNDspO1xuJiM0MztcdFx0U0tJUChyZXR1cm4gLTEsIFwmIzM0O2Nhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldFwmIzM0Oyk7XG4gXHR9XG4gXG4tXHRyZXQgPSBtbmxfc29ja2V0X2JpbmQoc2VsZi1cdTAwM2Vzb2NrLCAwLCBNTkxfU09DS0VUX0FVVE9QSUQpO1xuJiM0MztcdHJldCA9IG1ubF9zb2NrZXRfYmluZCgqc29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVQRVJNKVxuLVx0XHRTS0lQKHJldHVybiwgXCYjMzQ7TmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcJiMzNDspO1xuJiM0MztcdFx0U0tJUChyZXR1cm4gLTEsIFwmIzM0O05lZWRzIHRvIGJlIHJ1biBhcyByb290XCYjMzQ7KTtcbiBcdGVsc2UgaWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU9QTk9UU1VQUClcbi1cdFx0U0tJUChyZXR1cm4sIFwmIzM0O0tlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCYjMzQ7KTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuIC0xLFxuJiM0MztcdFx0ICAgICBcJiMzNDtLZXJuZWwgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGNvbm50cmFjayB6b25lc1wmIzM0Oyk7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXHUwMDNlc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbiBcdFx0XHRcdFx0IFRFU1RfWk9ORV9JRCAmIzQzOyAyKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuIFx0XHRcdFx0XHQgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTM1OCw5ICYjNDM7MzcxLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiBcdFx0XHQweDAyMDAwMDAwXG4gXHRcdH1cbiBcdH19O1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cdTAwM2Vzb2NrLCBzcmMsIGRzdCxcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zNzcsOSAmIzQzOzM5MCw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwNDAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICYjNDM7IDEpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zOTYsOSAmIzQzOzQwOSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwNjAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICYjNDM7IDIpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG5AQCAtNDE2LDE0ICYjNDM7NDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwODAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4mIzQzO3tcbiYjNDM7XHRib29sIHVzZV9jdGFfZmlsdGVyO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChjb25udHJhY2tfZHVtcF9mbHVzaCwgY3RhX3pvbmUpXG4mIzQzO3tcbiYjNDM7XHQudXNlX2N0YV9maWx0ZXIgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV9maWx0ZXIpXG4mIzQzO3tcbiYjNDM7XHQudXNlX2N0YV9maWx0ZXIgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb25udHJhY2tfem9uZV9zZXR1cChfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlc29jaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XG4gXHRFWFBFQ1RfR0UocmV0LCAyKTtcbiBcdGlmIChyZXQgXHUwMDNlIDIpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBmaWx0ZXJpbmcgYnkgem9uZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXVzZV9jdGFfZmlsdGVyKSB7XG4mIzQzO1x0XHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDVEFfRklMVEVSX1pPTkVcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0dFKHJldCwgMCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBGSVhUVVJFX1RFQVJET1dOKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuQEAgLTQzNCwzOSAmIzQzOzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsXG4mIzQzO1x0XHRcdFx0ICAgdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbiB9XG4gXG4gVEVTVF9GKGNvbm50cmFja19kdW1wX2ZsdXNoLCB0ZXN0X2ZsdXNoX2J5X3pvbmUpXG4ge1xuJiM0MztcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMik7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpXG4ge1xuJiM0MztcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbiYjNDM7XHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMik7XG4mIzQzO1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuJiM0MztcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19wYXJzZV9maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGFjZTk4NWYyZmQyNThhNmUwOTgxM2Y1YTQ0YjUzZTI1MWQ5NGMzYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6NDE6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwKaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbApAQCAtMzcxLDYgJiM0MzszNzEsMTEgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IHJlcGx5LWZsYWdzCiAgICAgICAgIHR5cGU6IHUzMgogICAgICAgICBkb2M6IGJpdG1hc2sgb2YgdHVwbGUgZmllbGRzIHRvIGZpbHRlciBvbiwgcmVwbHkgZGlyZWN0aW9uCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogem9uZQomIzQzOyAgICAgICAgdHlwZTogZmxhZwomIzQzOyAgICAgICAgZG9jOiBmaWx0ZXIgb24gY29ubnRyYWNrIHpvbmUgaWQ7IHJlcXVpcmVzIHRoZSB0b3AtbGV2ZWwgem9uZQomIzQzOyAgICAgICAgICAoYGBDVEFfWk9ORWBgKSBhdHRyaWJ1dGUKICAgLQogICAgIG5hbWU6IGNvbm50cmFjay1hdHRycwogICAgIGF0dHJpYnV0ZXM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCmluZGV4IDQzMjMzYWY3NWI5ZDUuLjk4NWY5YzA4ZDNlOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIGVudW0gY3RhdHRyX2ZpbHRlciB7CiAJQ1RBX0ZJTFRFUl9VTlNQRUMsCiAJQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTLAogCUNUQV9GSUxURVJfUkVQTFlfRkxBR1MsCiYjNDM7CUNUQV9GSUxURVJfWk9ORSwKIAlfX0NUQV9GSUxURVJfTUFYCiB9OwogI2RlZmluZSBDVEFfRklMVEVSX01BWCAoX19DVEFfRklMVEVSX01BWCAtIDEpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggOWI0ZTI5NTU3ZWMzMy4uZmZjMjlhNDA3NzQ5ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtOTExLDYgJiM0Mzs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0gewogCVtDVEFfRklMVEVSX09SSUdfRkxBR1NdCQk9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSwKIAlbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10JPSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksCiYjNDM7CVtDVEFfRklMVEVSX1pPTkVdCQk9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCkBAIC05MzAsNiAmIzQzOzkzMSw5IEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCWlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSkKIAkJZmlsdGVyLSZndDtyZXBseV9mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKTsKIAomIzQzOwlpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSkKJiM0MzsJCWZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgPSB0cnVlOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMDA2LDYgJiM0MzsxMDEwLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSkKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9maWx0ZXI7CiAKJiM0MzsJLyogQ1RBX1pPTkUgaXMgYWxsb3dlZCB3aXRob3V0IENUQV9GSUxURVJfWk9ORS4gKi8KIAlpZiAoY2RhW0NUQV9aT05FXSkgewogCQllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCAmYW1wO2ZpbHRlci0mZ3Q7em9uZSk7CiAJCWlmIChlcnIgJmx0OyAwKQpAQCAtMTAyMCw2ICYjNDM7MTAyNSwxMiBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KQogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl9maWx0ZXI7CiAKJiM0MzsJLyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi8KJiM0MzsJaWYgKGZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgJmFtcDsmYW1wOyAhY2RhW0NUQV9aT05FXSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX2ZpbHRlcjsKJiM0MzsJfQomIzQzOwogCWlmIChmaWx0ZXItJmd0O29yaWdfZmxhZ3MpIHsKIAkJaWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7CiAJCQllcnIgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jCmluZGV4IDMxYjgyNTBkZGM1M2QuLjYzZjQxMzU2ZmU2ZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMKQEAgLTIxNSw3ICYjNDM7MjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gTU5MX0NCX09LOwogfQogCi1zdGF0aWMgaW50IGNvbm50cmFja19jb3VudF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQomIzQzO3N0YXRpYyB2b2lkIHB1dF96b25lX2F0dHIoc3RydWN0IG5sbXNnaGRyICpubGgsIHVpbnQxNl90IHpvbmUsCiYjNDM7CQkJICBib29sIHVzZV9jdGFfZmlsdGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5sYXR0ciAqbmVzdDsKJiM0MzsKJiM0MzsJbW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7CiYjNDM7CiYjNDM7CWlmICh1c2VfY3RhX2ZpbHRlcikgewomIzQzOwkJbmVzdCA9IG1ubF9hdHRyX25lc3Rfc3RhcnQobmxoLCBDVEFfRklMVEVSKTsKJiM0MzsJCW1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7CiYjNDM7CQltbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsCiYjNDM7CQkJCWJvb2wgdXNlX2N0YV9maWx0ZXIpCiB7CiAJY2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CkBAIC0yMzUsNyAmIzQzOzI1MCw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpCiAJbmZoLSZndDt2ZXJzaW9uID0gTkZORVRMSU5LX1YwOwogCW5maC0mZ3Q7cmVzX2lkID0gMDsKIAotCW1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpOwomIzQzOwlwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpOwogCiAJcmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtJmd0O25sbXNnX2xlbik7CiAJaWYgKHJldCAmbHQ7IDApIHsKQEAgLTI2MSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKIAlyZXR1cm4gcmVwbHlfY291bnRlcjsKIH0KIAotc3RhdGljIGludCBjb25udHJhY2tfZmx1c2hfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKJiM0MztzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lLAomIzQzOwkJCQlib29sIHVzZV9jdGFfZmlsdGVyKQogewogCWNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwpAQCAtMjgxLDcgJiM0MzsyOTcsNyBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQogCW5maC0mZ3Q7dmVyc2lvbiA9IE5GTkVUTElOS19WMDsKIAluZmgtJmd0O3Jlc19pZCA9IDA7CiAKLQltbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTsKJiM0MzsJcHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTsKIAogCXJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLSZndDtubG1zZ19sZW4pOwogCWlmIChyZXQgJmx0OyAwKSB7CkBAIC0zMDQsNDMgJiM0MzszMjAsNDAgQEAgc3RhdGljIGludCBjb25udHJhY2tfZmx1c2hfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKIAlyZXR1cm4gMDsKIH0KIAotRklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaCkKLXsKLQlzdHJ1Y3QgbW5sX3NvY2tldCAqc29jazsKLX07Ci0KLUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiYjNDM7c3RhdGljIGludCBjb25udHJhY2tfem9uZV9zZXR1cChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiYjNDM7CQkJCXN0cnVjdCBtbmxfc29ja2V0ICoqc29jaykKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgc3JjLCBkc3Q7CiAJaW50IHJldDsKIAotCXNlbGYtJmd0O3NvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpOwotCWlmICghc2VsZi0mZ3Q7c29jaykgewomIzQzOwkqc29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7CiYjNDM7CWlmICghKnNvY2spIHsKIAkJcGVycm9yKCYjMzQ7bW5sX3NvY2tldF9vcGVuJiMzNDspOwotCQlTS0lQKHJldHVybiwgJiMzNDtjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXQmIzM0Oyk7CiYjNDM7CQlTS0lQKHJldHVybiAtMSwgJiMzNDtjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXQmIzM0Oyk7CiAJfQogCi0JcmV0ID0gbW5sX3NvY2tldF9iaW5kKHNlbGYtJmd0O3NvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7CiYjNDM7CXJldCA9IG1ubF9zb2NrZXRfYmluZCgqc29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKIAotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTsKIAlpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVQRVJNKQotCQlTS0lQKHJldHVybiwgJiMzNDtOZWVkcyB0byBiZSBydW4gYXMgcm9vdCYjMzQ7KTsKJiM0MzsJCVNLSVAocmV0dXJuIC0xLCAmIzM0O05lZWRzIHRvIGJlIHJ1biBhcyByb290JiMzNDspOwogCWVsc2UgaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFT1BOT1RTVVBQKQotCQlTS0lQKHJldHVybiwgJiMzNDtLZXJuZWwgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGNvbm50cmFjayB6b25lcyYjMzQ7KTsKJiM0MzsJCVNLSVAocmV0dXJuIC0xLAomIzQzOwkJICAgICAmIzM0O0tlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzJiMzNDspOwogCi0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi0mZ3Q7c29jaywgMHhmMGYwZjBmMCwgMHhmMWYxZjFmMSwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsCiAJCQkJCSBURVNUX1pPTkVfSUQpOwotCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtJmd0O3NvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsCiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmMmYyZjJmMiwgMHhmM2YzZjNmMywKIAkJCQkJIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLSZndDtzb2NrLCAweGY0ZjRmNGY0LCAweGY1ZjVmNWY1LAomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsCiAJCQkJCSBURVNUX1pPTkVfSUQgJiM0MzsgMik7Ci0JRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi0mZ3Q7c29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNywKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LAogCQkJCQkgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAKIAlzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7ewogCQkuX191Nl9hZGRyMzIgPSB7CkBAIC0zNTgsOSAmIzQzOzM3MSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiAJCQkweDAyMDAwMDAwCiAJCX0KIAl9fTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLSZndDtzb2NrLCBzcmMsIGRzdCwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LAogCQkJCQkgVEVTVF9aT05FX0lEKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAJc3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3sKIAkJLl9fdTZfYWRkcjMyID0gewogCQkJMHhiODBkMDEyMCwKQEAgLTM3Nyw5ICYjNDM7MzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKIAkJCTB4MDQwMDAwMDAKIAkJfQogCX19OwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtJmd0O3NvY2ssIHNyYywgZHN0LAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsCiAJCQkJCSBURVNUX1pPTkVfSUQgJiM0MzsgMSk7Ci0JRVhQRUNUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwogCXNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7CiAJCS5fX3U2X2FkZHIzMiA9IHsKIAkJCTB4YjgwZDAxMjAsCkBAIC0zOTYsOSAmIzQzOzQwOSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiAJCQkweDA2MDAwMDAwCiAJCX0KIAl9fTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLSZndDtzb2NrLCBzcmMsIGRzdCwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LAogCQkJCQkgVEVTVF9aT05FX0lEICYjNDM7IDIpOwotCUVYUEVDVF9FUShyZXQsIDApOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKIAogCXNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7CiAJCS5fX3U2X2FkZHIzMiA9IHsKQEAgLTQxNiwxNCAmIzQzOzQyOSw1MSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKQogCQkJMHgwODAwMDAwMAogCQl9CiAJfX07Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi0mZ3Q7c29jaywgc3JjLCBkc3QsCiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCwKIAkJCQkJIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7Ci0JRVhQRUNUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwogCi0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW5sX3NvY2tldCAqc29jazsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVChjb25udHJhY2tfZHVtcF9mbHVzaCkKJiM0Mzt7CiYjNDM7CWJvb2wgdXNlX2N0YV9maWx0ZXI7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfem9uZSkKJiM0Mzt7CiYjNDM7CS51c2VfY3RhX2ZpbHRlciA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChjb25udHJhY2tfZHVtcF9mbHVzaCwgY3RhX2ZpbHRlcikKJiM0Mzt7CiYjNDM7CS51c2VfY3RhX2ZpbHRlciA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvbm50cmFja196b25lX3NldHVwKF9tZXRhZGF0YSwgJmFtcDtzZWxmLSZndDtzb2NrKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7CiAJRVhQRUNUX0dFKHJldCwgMik7CiAJaWYgKHJldCAmZ3Q7IDIpCiAJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lJiMzNDspOwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dXNlX2N0YV9maWx0ZXIpIHsKJiM0MzsJCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCwgdHJ1ZSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCkKJiM0MzsJCQlTS0lQKHJldHVybiwgJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBDVEFfRklMVEVSX1pPTkUmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfR0UocmV0LCAwKTsKJiM0MzsJfQogfQogCiBGSVhUVVJFX1RFQVJET1dOKGNvbm50cmFja19kdW1wX2ZsdXNoKQpAQCAtNDM0LDM5ICYjNDM7NDg0LDQyIEBAIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9kdW1wX2J5X3pvbmUpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCwKJiM0MzsJCQkJICAgdmFyaWFudC0mZ3Q7dXNlX2N0YV9maWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwogfQogCiBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZmx1c2hfYnlfem9uZSkKIHsKJiM0MzsJYm9vbCBmaWx0ZXIgPSB2YXJpYW50LSZndDt1c2VfY3RhX2ZpbHRlcjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAxLCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAyKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDIsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwogfQogCiBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZmx1c2hfYnlfem9uZV9kZWZhdWx0KQogewomIzQzOwlib29sIGZpbHRlciA9IHZhcmlhbnQtJmd0O3VzZV9jdGFfZmlsdGVyOwogCWludCByZXQ7CiAKLQlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDEsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDIpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAyKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU1NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIGZvciBwb3RlbnRpYWwgZnV6emluZyB3aXRoIHN5emthbGxlci4gRnJvbSB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGlzIHNlZW1zIGxpa2Ugc3RyYWlnaHRmb3J3YXJkIGtlcm5lbCBRQSB3b3JrLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBkZWZlbnNpdmUgc2VjdXJpdHkg4oCTIG5vdGhpbmcgdG9vIHJpc2t5LiBNeSByaXNrIGFuYWx5c2lzIGNvbmZpcm1zIHRoaXM6IHdlJiMzOTtyZSBldmFsdWF0aW5nIGNvZGUgZm9yIGZ1enppbmcgcHVycG9zZXMsIHdoaWNoIGlzIGEgZmFpcmx5IGJlbmlnbiB0YXNrLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxgLCBgaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmhgLCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNgLiBLbm93aW5nIHRoZSBmaWxlcyBpbnZvbHZlZCBnaXZlcyBtZSBhIGhhbmRsZSBvbiB0aGUgYXJlYSBvZiB0aGUga2VybmVsIGJlaW5nIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBtb2RpZmllZCBjb2RlLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggZnJvbSBhbiBpbXBsZW1lbnRhdGlvbiBwb2ludCBvZiB2aWV3LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdFx0dV9pbnQzMl90IG9yaWdfZmxhZ3M7XG4gOTAxOlx0XHR1X2ludDMyX3QgcmVwbHlfZmxhZ3M7XG4gOTAyOlx0XG4gOTAzOlx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG9yaWc7XG4gOTA0Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGx5O1xuIDkwNTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XG4gOTA2Olx0XG4gOTA3Olx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcbiA5MDg6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XG4gOTA5Olx0fTtcbiA5MTA6XHRcbiA5MTE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0ge1xuIDkxMjpcdFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gOTEzOlx0XHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuIDkxNDpcdFx0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiA5MTU6XHR9O1xuIDkxNjpcdFxuIDkxNzpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDkxODpcdFx0XHRcdFx0ICBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyKVxuIDkxOTpcdHtcbiA5MjA6XHRcdHN0cnVjdCBubGF0dHIgKnRiW0NUQV9GSUxURVJfTUFYICYjNDM7IDFdO1xuIDkyMTpcdFx0aW50IHJldCA9IDA7XG4gOTIyOlx0XG4gOTIzOlx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfRklMVEVSX01BWCwgYXR0ciwgY3RhX2ZpbHRlcl9ubGFfcG9saWN5LFxuIDkyNDpcdFx0XHRcdCAgICAgICBOVUxMKTtcbiA5MjU6XHRcdGlmIChyZXQpXG4gOTI2Olx0XHRcdHJldHVybiByZXQ7XG4gOTI3Olx0XG4gOTI4Olx0XHRpZiAodGJbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXSlcbiA5Mjk6XHRcdFx0ZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltDVEFfRklMVEVSX09SSUdfRkxBR1NdKTtcbiA5MzA6XHRcbiA5MzE6XHRcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcbiA5MzI6XHRcdFx0ZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xuIDkzMzpcdFxuIDkzNDpcdFx0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXG4gOTM1Olx0XHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4gOTM2Olx0XG4gOTM3Olx0XHRyZXR1cm4gMDtcbiA5Mzg6XHR9XG4gOTM5Olx0XG4gOTQwOlx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIDk0MTpcdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKTtcbiA5NDI6XHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLFxuIDk0MzpcdFx0XHRcdFx0XHQgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXG4gOTQ0Olx0XHRcdFx0XHRcdCB1MzIgdHlwZSwgdV9pbnQ4X3QgbDNudW0sXG4gOTQ1Olx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUsXG4gOTQ2Olx0XHRcdFx0XHRcdCB1X2ludDMyX3QgZmxhZ3MpO1xuIDk0NzpcdFxuIDk0ODpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqbWFyayxcbiA5NDk6XHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4gOTUwOlx0e1xuIDk1MTpcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUktcbiA5NTI6XHRcdGlmIChjZGFbQ1RBX01BUktdKSB7XG4gOTUzOlx0XHRcdG1hcmstXHUwMDNldmFsID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfTUFSS10pKTtcbiA5NTQ6XHRcbiA5NTU6XHRcdFx0aWYgKGNkYVtDVEFfTUFSS19NQVNLXSlcbiA5NTY6XHRcdFx0XHRtYXJrLVx1MDAzZW1hc2sgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLX01BU0tdKSk7XG4gOTU3Olx0XHRcdGVsc2VcbiA5NTg6XHRcdFx0XHRtYXJrLVx1MDAzZW1hc2sgPSAweGZmZmZmZmZmO1xuIDk1OTpcdFx0fSBlbHNlIGlmIChjZGFbQ1RBX01BUktfTUFTS10pIHtcbiA5NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTYxOlx0XHR9XG4gOTYyOlx0I2VuZGlmXG4gOTYzOlx0XHRyZXR1cm4gMDtcbiA5NjQ6XHR9XG4gOTY1Olx0XG4gOTY2Olx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgKnN0YXR1cyxcbiA5Njc6XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcbiA5Njg6XHR7XG4gOTY5Olx0XHRpZiAoY2RhW0NUQV9TVEFUVVNdKSB7XG4gOTcwOlx0XHRcdHN0YXR1cy1cdTAwM2V2YWwgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9TVEFUVVNdKSk7XG4gOTcxOlx0XHRcdGlmIChjZGFbQ1RBX1NUQVRVU19NQVNLXSlcbiA5NzI6XHRcdFx0XHRzdGF0dXMtXHUwMDNlbWFzayA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1NUQVRVU19NQVNLXSkpO1xuIDk3MzpcdFx0XHRlbHNlXG4gOTc0Olx0XHRcdFx0c3RhdHVzLVx1MDAzZW1hc2sgPSBzdGF0dXMtXHUwMDNldmFsO1xuIDk3NTpcdFxuIDk3NjpcdFx0XHQvKiBzdGF0dXMtXHUwMDNldmFsID09IDA/IGFsd2F5cyB0cnVlLCBlbHNlIGFsd2F5cyBmYWxzZS4gKi9cbiA5Nzc6XHRcdFx0aWYgKHN0YXR1cy1cdTAwM2VtYXNrID09IDApXG4gOTc4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTc5Olx0XHR9IGVsc2UgaWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKSB7XG4gOTgwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk4MTpcdFx0fVxuIDk4MjpcdFxuIDk4MzpcdFx0LyogQ1RBX1NUQVRVUyBpcyBOTEFfVTMyLCBpZiB0aGlzIGZpcmVzIFVBUEkgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgKi9cbiA5ODQ6XHRcdEJVSUxEX0JVR19PTihfX0lQU19NQVhfQklUIFx1MDAzZT0gMzIpO1xuIDk4NTpcdFx0cmV0dXJuIDA7XG4gOTg2Olx0fVxuIDk4NzpcdFxuIDk4ODpcdHN0YXRpYyBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqXG4gOTg5Olx0Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbiA5OTA6XHR7XG4gOTkxOlx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyO1xuIDk5MjpcdFx0aW50IGVycjtcbiA5OTM6XHRcbiA5OTQ6XHQjaWZuZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xuIDk5NTpcdFx0aWYgKGNkYVtDVEFfTUFSS10gfHwgY2RhW0NUQV9NQVJLX01BU0tdKVxuIDk5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4gOTk3Olx0I2VuZGlmXG4gOTk4Olx0XG4gOTk5Olx0XHRmaWx0ZXIgPSBremFsbG9jX29iaigqZmlsdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCBhbmQgaXRzIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIGlzIGJlaW5nIGFsbG9jYXRlZCBhbmQsIGNydWNpYWxseSwgd2hlcmUgaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBKdXN0IHNlZWluZyB0aGUgYWxsb2NhdGlvbiBpcyBvbmx5IGhhbGYgdGhlIHN0b3J5LiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdGhlIGZpbHRlciBpc24mIzM5O3QgaGFuZGxlZCBjb3JyZWN0bHkgZG93bnN0cmVhbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgJiMzNDtmaWx0ZXImIzM0OyB2YXJpYWJsZSB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBvcGVyYXRpb25zIGhhcHBlbmluZyB0byBpdC4gV2hhdCBhcmUgdGhlIHJlYWQgYW5kIHdyaXRlIHBhdHRlcm5zPyBJcyB0aGVyZSBhIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHdlIGNhbiBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0aWYgKGZpbHRlciA9PSBOVUxMKVxuMTAwMTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjEwMDI6XHRcbjEwMDM6XHRcdGZpbHRlci1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4xMDA0Olx0XG4xMDA1Olx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXHUwMDI2ZmlsdGVyLVx1MDAzZW1hcmssIGNkYSk7XG4xMDA2Olx0XHRpZiAoZXJyKVxuMTAwNzpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDA4Olx0XG4xMDA5Olx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcdTAwMjZmaWx0ZXItXHUwMDNlc3RhdHVzLCBjZGEpO1xuMTAxMDpcdFx0aWYgKGVycilcbjEwMTE6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAxMjpcdFxuMTAxMzpcdFx0LyogQ1RBX1pPTkUgaXMgYWxsb3dlZCB3aXRob3V0IENUQV9GSUxURVJfWk9ORS4gKi9cbjEwMTQ6XHRcdGlmIChjZGFbQ1RBX1pPTkVdKSB7XG4xMDE1Olx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sIFx1MDAyNmZpbHRlci1cdTAwM2V6b25lKTtcbjEwMTY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMTc6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDE4Olx0XHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4xMDE5Olx0XHR9XG4xMDIwOlx0XG4xMDIxOlx0XHRpZiAoIWNkYVtDVEFfRklMVEVSXSlcbjEwMjI6XHRcdFx0cmV0dXJuIGZpbHRlcjtcbjEwMjM6XHRcbjEwMjQ6XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY2RhW0NUQV9GSUxURVJdLCBmaWx0ZXIpO1xuMTAyNTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwMjY6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAyNzpcdFxuMTAyODpcdFx0LyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi9cbjEwMjk6XHRcdGlmIChmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFjZGFbQ1RBX1pPTkVdKSB7XG4xMDMwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMDMxOlx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMzI6XHRcdH1cbjEwMzM6XHRcbjEwMzQ6XHRcdGlmIChmaWx0ZXItXHUwMDNlb3JpZ19mbGFncykge1xuMTAzNTpcdFx0XHRpZiAoIWNkYVtDVEFfVFVQTEVfT1JJR10pIHtcbjEwMzY6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTAzNzpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMzg6XHRcdFx0fVxuMTAzOTpcdFxuMTA0MDpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGVfZmlsdGVyKGNkYSwgXHUwMDI2ZmlsdGVyLVx1MDAzZW9yaWcsXG4xMDQxOlx0XHRcdFx0XHRcdFx0ICAgQ1RBX1RVUExFX09SSUcsXG4xMDQyOlx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZWZhbWlseSxcbjEwNDM6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSxcbjEwNDQ6XHRcdFx0XHRcdFx0XHQgICBmaWx0ZXItXHUwMDNlb3JpZ19mbGFncyk7XG4xMDQ1Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDQ2Olx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTA0NzpcdFx0fVxuMTA0ODpcdFxuMTA0OTpcdFx0aWYgKGZpbHRlci1cdTAwM2VyZXBseV9mbGFncykge1xuMTA1MDpcdFx0XHRpZiAoIWNkYVtDVEFfVFVQTEVfUkVQTFldKSB7XG4xMDUxOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEwNTI6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDUzOlx0XHRcdH1cbjEwNTQ6XHRcbjEwNTU6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFx1MDAyNmZpbHRlci1cdTAwM2VyZXBseSxcbjEwNTY6XHRcdFx0XHRcdFx0XHQgICBDVEFfVFVQTEVfUkVQTFksXG4xMDU3Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZWZhbWlseSxcbjEwNTg6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSxcbjEwNTk6XHRcdFx0XHRcdFx0XHQgICBmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpO1xuMTA2MDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTA2MTpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwNjI6XHRcdH1cbjEwNjM6XHRcbjEwNjQ6XHRcdHJldHVybiBmaWx0ZXI7XG4xMDY1Olx0XG4xMDY2Olx0ZXJyX2ZpbHRlcjpcbjEwNjc6XHRcdGtmcmVlKGZpbHRlcik7XG4xMDY4Olx0XG4xMDY5Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMTA3MDpcdH1cbjEwNzE6XHRcbjEwNzI6XHRzdGF0aWMgYm9vbCBjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKHU4IGZhbWlseSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEpXG4xMDczOlx0e1xuMTA3NDpcdFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcbjEwNzU6XHR9XG4xMDc2Olx0XG4xMDc3Olx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMTA3ODpcdHtcbjEwNzk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhID0gY2ItXHUwMDNlZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAzNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGN0bmV0bGlua19maWx0ZXJgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBkZWZpbml0aW9uIG9mIGBjdG5ldGxpbmtfZmlsdGVyYC4gSSByZWNhbGwgaXQgYmVpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDg5MCwgZ2l2ZSBvciB0YWtlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgbmV0bGluayBmaWx0ZXIgdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHRvIGhvbGQgdGhlIGtleSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzIGF0IHRoZSBOZXRsaW5rIGxldmVsLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIGlzIGVzc2VudGlhbCB0byBncmFzcCBob3cgdGhlIHBvbGljeSBpcyBpbXBsZW1lbnRlZCwgYW55IGxpbWl0cyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcy4gS25vd2luZyB0aGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdCBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3IgZXh0ZW5kaW5nIHRoZSBmaWx0ZXIgY2FwYWJpbGl0aWVzLiBUaW1lIHRvIGdvIGh1bnRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5MDpcdFxuIDg5MTpcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiB7XG4gODkyOlx0XHR1MzIgdmFsO1xuIDg5MzpcdFx0dTMyIG1hc2s7XG4gODk0Olx0fTtcbiA4OTU6XHRcbiA4OTY6XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG4gODk3Olx0XHR1OCBmYW1pbHk7XG4gODk4Olx0XHRib29sIHpvbmVfZmlsdGVyO1xuIDg5OTpcdFxuIDkwMDpcdFx0dV9pbnQzMl90IG9yaWdfZmxhZ3M7XG4gOTAxOlx0XHR1X2ludDMyX3QgcmVwbHlfZmxhZ3M7XG4gOTAyOlx0XG4gOTAzOlx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG9yaWc7XG4gOTA0Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGx5O1xuIDkwNTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XG4gOTA2Olx0XG4gOTA3Olx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcbiA5MDg6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XG4gOTA5Olx0fTtcbiA5MTA6XHRcbiA5MTE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0ge1xuIDkxMjpcdFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gOTEzOlx0XHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuIDkxNDpcdFx0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIGFwcGxpY2F0aW9uIG9mIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGlzIGFjY2Vzc2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBnb2FsIGhlcmUgaXMgYSBmdWxsIGFuZCBjb21wbGV0ZSBjb21wcmVoZW5zaW9uIG9mIGl0cyByb2xlIGFuZCBzY29wZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLCBzbyBJIHdhbnQgdG8ga25vdyBldmVyeXdoZXJlIGl0IGNvbWVzIGludG8gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBuZXRsaW5rIGNvbnRleHQsIHdoaWNoIGhvcGVmdWxseSB3aWxsIHJldmVhbCB0aGUgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTg5Nj1zdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk3LVx0dTggZmFtaWx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjg5ODpcdGJvb2wgem9uZV9maWx0ZXI7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNC1cdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkzNTpcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE3LVx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDE4Olx0XHRmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTktXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjgtXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwMjk6XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMzAtXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTExNjM9c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc5Olx0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgwLVx0ICAgICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGN0bmV0bGlua2AgZmlsdGVyIGFuZCB0aGUgZHVtcC9mbHVzaCBvcGVyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsdGVycyB3b3JrIGF0IHRoZSBuZXRsaW5rIGxldmVsLgoKKipEZWVwIERpdmUgaW50byBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AqKgoKUmlnaHQsIHNvIHRoYXQgd291bGQgcHV0IHRoZSByZWxldmFudCBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEwNzAgdG8gMTI1MC4gVGhhdCByYW5nZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgdGhlIGhhbmRsZXJzIGFuZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBob3cgdGhlIGRhdGEgaXMgYmVpbmcgY29uc3RydWN0ZWQsIHRyYW5zbWl0dGVkIHZpYSBuZXRsaW5rLCBhbmQgcHJvY2Vzc2VkIG9uIHRoZSBvdGhlciBlbmQuIEkgc2hvdWxkIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgc3RydWN0dXJlcyB0aGVyZS4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCByZXZlYWwgdGhlIG1lY2hhbmlzbXMgZm9yIGJvdGggZmlsdGVyaW5nICphbmQqIHRoZSBkdW1wL2ZsdXNoIHByb2NlZHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3MDpcdH1cbjEwNzE6XHRcbjEwNzI6XHRzdGF0aWMgYm9vbCBjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKHU4IGZhbWlseSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEpXG4xMDczOlx0e1xuMTA3NDpcdFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcbjEwNzU6XHR9XG4xMDc2Olx0XG4xMDc3Olx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMTA3ODpcdHtcbjEwNzk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhID0gY2ItXHUwMDNlZGF0YTtcbjEwODA6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIgPSBOVUxMO1xuMTA4MTpcdFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbjEwODI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbjEwODM6XHRcbjEwODQ6XHRcdGlmIChjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKGZhbWlseSwgY2RhKSkge1xuMTA4NTpcdFx0XHRmaWx0ZXIgPSBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNkYSwgZmFtaWx5KTtcbjEwODY6XHRcdFx0aWYgKElTX0VSUihmaWx0ZXIpKVxuMTA4NzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZpbHRlcik7XG4xMDg4Olx0XHR9XG4xMDg5Olx0XG4xMDkwOlx0XHRjYi1cdTAwM2VkYXRhID0gZmlsdGVyO1xuMTA5MTpcdFx0cmV0dXJuIDA7XG4xMDkyOlx0fVxuMTA5MzpcdFxuMTA5NDpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG4xMDk1Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxuMTA5NjpcdFx0XHRcdFx0XHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXG4xMDk3Olx0e1xuMTA5ODpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbjEwOTk6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuMTEwMDpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTEwMTpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudTMuaXApXG4xMTAyOlx0XHRcdFx0cmV0dXJuICAwO1xuMTEwMzpcdFxuMTEwNDpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuMTEwNTpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pcCAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudTMuaXApXG4xMTA2Olx0XHRcdFx0cmV0dXJuICAwO1xuMTEwNzpcdFx0XHRicmVhaztcbjExMDg6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTEwOTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTExMDpcdFx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4xMTExOlx0XHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbjExMTI6XHRcdFx0XHRyZXR1cm4gMDtcbjExMTM6XHRcbjExMTQ6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcdTAwMjZcdTAwMjZcbjExMTU6XHRcdFx0ICAgICFpcHY2X2FkZHJfY21wKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudTMuaW42LFxuMTExNjpcdFx0XHRcdFx0ICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlZHN0LnUzLmluNikpXG4xMTE3Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTE4Olx0XHRcdGJyZWFrO1xuMTExOTpcdFx0fVxuMTEyMDpcdFxuMTEyMTpcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19OVU0pKSBcdTAwMjZcdTAwMjZcbjExMjI6XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtICE9IGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSlcbjExMjM6XHRcdFx0cmV0dXJuIDA7XG4xMTI0Olx0XG4xMTI1Olx0XHRzd2l0Y2ggKGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSkge1xuMTEyNjpcdFx0Y2FzZSBJUFBST1RPX1RDUDpcbjExMjc6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMTI4Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcdTAwMjZcdTAwMjZcbjExMjk6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydClcbjExMzA6XHRcdFx0XHRyZXR1cm4gMDtcbjExMzE6XHRcbjExMzI6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19EU1RfUE9SVCkpIFx1MDAyNlx1MDAyNlxuMTEzMzpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0KVxuMTEzNDpcdFx0XHRcdHJldHVybiAwO1xuMTEzNTpcdFx0XHRicmVhaztcbjExMzY6XHRcdGNhc2UgSVBQUk9UT19JQ01QOlxuMTEzNzpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFx1MDAyNlx1MDAyNlxuMTEzODpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LmljbXAudHlwZSAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUpXG4xMTM5Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTQwOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9DT0RFKSkgXHUwMDI2XHUwMDI2XG4xMTQxOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAuY29kZSlcbjExNDI6XHRcdFx0XHRyZXR1cm4gMDtcbjExNDM6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0lEKSkgXHUwMDI2XHUwMDI2XG4xMTQ0Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS5pY21wLmlkKVxuMTE0NTpcdFx0XHRcdHJldHVybiAwO1xuMTE0NjpcdFx0XHRicmVhaztcbjExNDc6XHRcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4xMTQ4Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUFY2X1RZUEUpKSBcdTAwMjZcdTAwMjZcbjExNDk6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC50eXBlKVxuMTE1MDpcdFx0XHRcdHJldHVybiAwO1xuMTE1MTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBWNl9DT0RFKSkgXHUwMDI2XHUwMDI2XG4xMTUyOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAuY29kZSlcbjExNTM6XHRcdFx0XHRyZXR1cm4gMDtcbjExNTQ6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QVjZfSUQpKSBcdTAwMjZcdTAwMjZcbjExNTU6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudS5pY21wLmlkICE9IGN0X3R1cGxlLVx1MDAzZXNyYy51LmljbXAuaWQpXG4xMTU2Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTU3Olx0XHRcdGJyZWFrO1xuMTE1ODpcdFx0fVxuMTE1OTpcdFxuMTE2MDpcdFx0cmV0dXJuIDE7XG4xMTYxOlx0fVxuMTE2MjpcdFxuMTE2MzpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXG4xMTY0Olx0e1xuMTE2NTpcdFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlciA9IGRhdGE7XG4xMTY2Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbjExNjc6XHRcdHUzMiBzdGF0dXM7XG4xMTY4Olx0XG4xMTY5Olx0XHRpZiAoZmlsdGVyID09IE5VTEwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTQ3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLY29uZmlnIE9wdGlvbnMgZm9yIG5mX2Nvbm50cmFja19uZXRsaW5rLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBnb3Zlcm4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJiMzOTttIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBhIHBhcnRpY3VsYXIgZmlsZSBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2x1ZXMgdGhhdCBNYWtlZmlsZSBob2xkcy4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvZGUgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHRoYXQgdGhlIE1ha2VmaWxlIGdpdmVzIG1lIGEgY2xlYXIgaW5kaWNhdGlvbi4gTm8gdGltZSB0byB3YXN0ZSwgbGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgJiM0Mzs9IG5mX2Nvbm50cmFjay5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zNi0jIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBuZl9jb25udHJhY2tcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICYjNDM7PSBuZl9jb25udHJhY2tfbmV0bGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICYjNDM7PSBuZm5ldGxpbmtfY3R0aW1lb3V0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIE5ldGZpbHRlciYjMzk7cyBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZC4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgS2NvbmZpZyBmaWxlIGZvciBuZXRmaWx0ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBDT05GSUdfTkZfQ1RfTkVUTElOS2Agd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgd2hldGhlciBOZXRsaW5rIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGF0IGlzIHRoZSBpbml0aWFsIHBpZWNlIG9mIGRhdGEgSSByZXF1aXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY3LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzc0LVx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyBgbmV0L25ldGZpbHRlci9LY29uZmlnYCAtIExpbmUgMzY2IGFuZCBTdXJyb3VuZHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gbGluZXMgYXJvdW5kIDM2Ni4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2Ygd2hhdCYjMzk7cyBiZWluZyBjb25maWd1cmVkIHRoZXJlLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCB0aGUgYmxvY2sgb2Ygb3B0aW9ucywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRpb25zaGlwcyBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgZGVmaW5pbmcgb3IgY29uZmlndXJpbmcgc29tZSBhc3BlY3Qgb2YgbmV0ZmlsdGVyLCBsaWtlbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgbW9kdWxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlICYjMzQ7Y29uZmlnLCYjMzQ7ICYjMzQ7dHJpc3RhdGUsJiMzNDsgJiMzNDtib29sLCYjMzQ7ICYjMzQ7ZGVwZW5kcyBvbiwmIzM0OyAmIzM0O3NlbGVjdCwmIzM0OyBhbmQgJiMzNDtoZWxwJiMzNDsgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnVuY3Rpb25zIGFuZCBpbnRlcmFjdHMgd2l0aGluIHRoZSBvdmVyYWxsIG5ldGZpbHRlciBmcmFtZXdvcmsuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgbW9yZSBjb21wbGV4IG9uZS4gRWl0aGVyIHdheSwgbXkgYWltIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIG5ldGZpbHRlciBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cbiAzNjE6XHRcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xuIDM2MjpcdFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXG4gMzYzOlx0XG4gMzY0Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDM2NTpcdFxuIDM2NjpcdGNvbmZpZyBORl9DVF9ORVRMSU5LXG4gMzY3Olx0XHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuIDM2ODpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzY5Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAzNzA6XHRcdGhlbHBcbiAzNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZVxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcbiAzNzQ6XHRcdHRyaXN0YXRlICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsmIzM5O1xuIDM3NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDM3NzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxuIDM3ODpcdFx0aGVscFxuIDM3OTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxuIDM4MDpcdFx0ICBmaW5lLWdyYWluIHR1bmluZy4gVGhpcyBhbGxvd3MgeW91IHRvIGF0dGFjaCBzcGVjaWZpYyB0aW1lb3V0XG4gMzgxOlx0XHQgIHBvbGljaWVzIHRvIGZsb3dzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBnbG9iYWwgdGltZW91dCBwb2xpY3kuXG4gMzgyOlx0XG4gMzgzOlx0XHQgIElmIHVuc3VyZSwgc2F5IGBOJiMzOTsuXG4gMzg0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgTkZfQ1RfTkVUTElOS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NUX05FVExJTktgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMsIGxpa2VseSBsaWtlIGBORl9DT05OVFJBQ0tgIG9yIHRoZSBicm9hZGVyIGBORVRGSUxURVJgIHN1YnN5c3RlbSwgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcy4KClRoZXJlZm9yZSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uc3VsdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYG1lbnVjb25maWcgTkZfQ09OTlRSQUNLYCBlbnRyeSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgYW5kIGxpbmthZ2Ugd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLCBlbmFibGluZyBtZSB0byBtYXAgZGVwZW5kZW5jaWVzLCB1bmRlcnN0YW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHNlZSBob3cgYE5GX0NUX05FVExJTktgIGZpdHMgd2l0aGluIHRoZSBicm9hZGVyIG5ldGZpbHRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIGN0bmV0bGluayBGaWx0ZXIgQWxsb2NhdGlvbiBhbmQgUGFyc2luZyoqCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgIGFuZCBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHRyYWNlIHRoZWlyIGNhbGwgaGllcmFyY2h5IGFuZCBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmaWx0ZXIgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgdGhhdCBtZWFucyBzZWVpbmcgKndobyogY2FsbHMgdGhlbS4gRmlyc3Qgc3RlcCBpcyB0byB1c2Ugc29tZSBzZWFyY2ggdG9vbHMgdG8gZmluZCB3aGVyZSBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgaXMgaW52b2tlZCB3aXRoaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmaWx0ZXIgYWxsb2NhdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdG5ldGxpbmtfYWxsb2NfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODg9c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5ODk6Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05OTAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4NC1cdGlmIChjdG5ldGxpbmtfbmVlZHNfZmlsdGVyKGZhbWlseSwgY2RhKSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6XHRcdGZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhLCBmYW1pbHkpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwODYtXHRcdGlmIChJU19FUlIoZmlsdGVyKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5OT1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjEwLVx0aWYgKGN0bmV0bGlua19uZWVkc19maWx0ZXIoZmFtaWx5LCBjZGEpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTYxMTpcdFx0ZmlsdGVyID0gY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjZGEsIGZhbWlseSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTYxMi1cdFx0aWYgKElTX0VSUihmaWx0ZXIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAyNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldGxpbmsgQ29ubnRyYWNrIEludGVyZmFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgbmV0bGluayBjb25udHJhY2sgZnVuY3Rpb25zLi4uIEkgc2VlIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLCBgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja2AsIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAsIGBjdG5ldGxpbmtfZGVsX2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGhzLiBMZXQgbWUgY2hlY2s6IGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAsIGBjdG5ldGxpbmtfc3RhcnRgLCBgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja2AsIGFuZCBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gVGhlbiBJIHNob3VsZCBmb2N1cyBvbiBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgIGFuZCBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgLCBhbmQgcHJvYmFibHkgb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2l0aGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIG1hbmFnZXMgY29ubnRyYWNrIGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE1OTQ9c3RhdGljIGludCBjdG5ldGxpbmtfZmx1c2hfaXRlcmF0ZShzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1OTgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTU5OTpzdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MDAtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTYyND1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2NDctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY0ODpcdFx0cmV0dXJuIGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soaW5mby1cdTAwM2VuZXQsIGNkYSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjQ5LVx0XHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBleGFjdGx5IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGluaXRpYWxpemVkIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGNvbm50cmFjayBuZXRsaW5rIGludGVyZmFjZSBzdGFydHMgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgZnVuY3Rpb24sIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1c2VyLXNwYWNlIHRvb2xzIGZvciByZXRyaWV2aW5nIGNvbm50cmFjayBpbmZvcm1hdGlvbi4gQnV0IHRoYXQmIzM5O3MgYSBkdW1wIGZ1bmN0aW9uLCBub3QgbmVjZXNzYXJpbHkgdGhlIGluaXRpYWxpemF0aW9uIGl0c2VsZiwgYWx0aG91Z2ggaXQgbWlnaHQgcHJvdmlkZSBjbHVlcyB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSByZWZlcmVuY2VzIHRvIGBjdG5ldGxpbmtfc3RhcnRgIGFzIHdlbGwuIFRoYXQgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UsIHNvIEkmIzM5O2xsIHByaW9yaXRpemUgdGhvc2UgY2FsbHMuIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBuZXRsaW5rIGludGVyZmFjZSBnZXRzIHJlZ2lzdGVyZWQgYW5kIGFjdGl2YXRlZCwgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZyb20gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjb25udHJhY2sgc3RhdGUgbWFjaGluZSYjMzk7cyBpbml0aWFsIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdG5ldGxpbmtfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNzI9c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDc2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwNzc6c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNzgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5MC1cdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY5MTpcdFx0XHQuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5Mi1cdFx0XHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBjdG5ldGxpbmtgIHN0dWZmLCBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgZm9jdXMgb24gd2hhdCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGRvZXMgZXhhY3RseS4gVGhhdCYjMzk7cyB0aGUgY29yZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEyMjE9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEyMjI6Y3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMjMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5MS1cdFx0XHQuc3RhcnQgPSBjdG5ldGxpbmtfc3RhcnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY5MjpcdFx0XHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2OTMtXHRcdFx0LmRvbmUgPSBjdG5ldGxpbmtfZG9uZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MzgKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogMTAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYENUQV9GSUxURVJfWk9ORWAgYXR0cmlidXRlIG5lc3RlZCB3aXRoaW4gYENUQV9GSUxURVJgIGZvciBjb25udHJhY2sgZmlsdGVyaW5nLiBMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0OgoKMS4gICoqQXR0cmlidXRlIEFkZGl0aW9uOioqIGBDVEFfRklMVEVSX1pPTkVgIGdldHMgYWRkZWQgdG8gYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgYXMgYSBmbGFnIChgTkxBX0ZMQUdgKS4gV2hlbiBwYXJzaW5nLCBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcigpYCBub3cgY2hlY2tzIGZvciB0aGlzIGZsYWcgYW5kIHNldHMgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgPSB0cnVlO2AgaWYgaXQmIzM5O3MgcHJlc2VudC4gSW4gYWxsb2NhdGlvbiB3aXRoIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKClgLCB0aGVyZSYjMzk7cyBhIGNydWNpYWwgY2hlY2s6IGlmIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCBpcyB0cnVlIChtZWFuaW5nIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBgQ1RBX1pPTkVgIHdhcyBzZXQpLCBidXQgdGhlIHRvcC1sZXZlbCBgQ1RBX1pPTkVgIGlzICpub3QqIHByZXNlbnQgKGAhY2RhW0NUQV9aT05FXWApLCBpdCBlcnJvcnMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGtleS4gVGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgb24gaXRzIG93biBjYW4gdHJpZ2dlciBhbiBlcnJvci4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCB3b3VsZCBiZSBzZXQgdHJ1ZSBpZiB0aGUgdG9wLWxldmVsIGBDVEFfWk9ORWAgd2FzIHByZXNlbnQsIG5vdyBpZiBhIHVzZXIgc2V0cyB0aGUgYENUQV9GSUxURVJfWk9ORWAgaXQgd2lsbCBiZSB0cnVlLCBidXQgaXQgZmFpbHMgaWYgdGhlcmUgaXNuJiMzOTt0IGEgY29ycmVzcG9uZGluZyBgQ1RBX1pPTkVgIG9uIHRoZSBtYWluIG1lc3NhZ2UuCgoyLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFVzZXIgc3BhY2UsIGJvdGggdW5wcml2aWxlZ2VkIGFuZCBwcml2aWxlZ2VkIChvciB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHdpdGggbmV0bGluay9uZXRmaWx0ZXIgYWNjZXNzKSwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGUgTmV0bGluayBtZXNzYWdlIHR5cGVzIGFyZSBgTkZOTF9TVUJTWVNfQ1RORVRMSU5LYCwgYElQQ1ROTF9NU0dfQ1RfR0VUYCwgYW5kIGBJUENUTkxfTVNHX0NUX0RFTEVURWAsIGFsbCBoYW5kbGVkIG92ZXIgdGhlIGBORVRMSU5LX05FVEZJTFRFUmAgc29ja2V0LCB1c2luZyBgQ1RBX0ZJTFRFUmAgYW5kIGBDVEFfWk9ORWAuIFRoaXMgaXMgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LCB0b3VjaGluZyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcy4gUUVNVS9zeXprYWxsZXIgc2hvdWxkIGJlIHBlcmZlY3RseSBmaW5lIGZvciB0ZXN0aW5nLgoKMy4gICoqV29ydGhGdXp6aW5nPXRydWU/OioqIEFic29sdXRlbHkhIFRoZSByZWFjaGFiaWxpdHksIE5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZywgYW5kIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb3JlIG1ha2UgdGhpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZnV6emluZy4KCjQuICAqKkZvY3VzIFN5bWJvbHM6KiogVGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZToKCiAgICAqICAgYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgCiAgICAqICAgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgCiAgICAqICAgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgCiAgICAqICAgYGN0bmV0bGlua19zdGFydGAKICAgICogICBgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja2AKICAgICogICBgY3RuZXRsaW5rX2R1bXBfdGFibGVgCiAgICAqICAgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYAogICAgKiAgIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AKCiAgICBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgLmNgIGZpbGUgY2FuIGJlIHZpc2libGUgaW4ga2FsbHN5bXMgaW4gbW9kZXJuIGtlcm5lbHMsIHBhcnRpY3VsYXJseSB3aXRoIEtBU0FOL0tDT1YuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlc2UgbWF0Y2ggdGhlIG9uZXMgYXZhaWxhYmxlIGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4KCjUuICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBUaGUgZm9sbG93aW5nIGtlcm5lbCBjb25maWdzIGFyZSBlc3NlbnRpYWw6CgogICAgKiAgIGBORl9DT05OVFJBQ0tgCiAgICAqICAgYE5GX0NUX05FVExJTktgCiAgICAqICAgYE5FVEZJTFRFUl9ORVRMSU5LYCAoc2VsZWN0ZWQgYnkgYE5GX0NUX05FVExJTktgLCBidXQgZ29vZCB0byBpbmNsdWRlKQogICAgKiAgIGBORVRGSUxURVJgCgogICAgQSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBjb25maXJtczogYE5GX0NUX05FVExJTktgIGRlcGVuZHMgb24gYE5GX0NPTk5UUkFDS2AgYW5kIHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kIGBORl9DT05OVFJBQ0tgIGRlcGVuZHMgb24gYE5FVEZJTFRFUmAuIEFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjbGVhci4KCkV2ZXJ5dGhpbmcgbG9va3MgY29ycmVjdC4gSSBjYW4gbm93IHZlcmlmeSB0aGUgcmVzdWx0cyBhcmUgYWNjdXJhdGUgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0bmV0bGlua19wYXJzZV9maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfcGFyc2VfZmlsdGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19maWx0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19nZXRfY29ubnRyYWNrJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kZWxfY29ubnRyYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQ1RBX0ZJTFRFUl9aT05FIGF0dHJpYnV0ZSBzdXBwb3J0IHRvIHRoZSBjb25udHJhY2sgbmV0bGluayBmaWx0ZXJpbmcgaW50ZXJmYWNlLCB1cGRhdGluZyBuZXRsaW5rIHBvbGljeSBhbmQgcGFyc2luZyBsb2dpYyBpbiBuZl9jb25udHJhY2tfbmV0bGluay5jLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIE5FVExJTktfTkVURklMVEVSIGNvbm50cmFjayBkdW1wIGFuZCBmbHVzaCByZXF1ZXN0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHk6XG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cbjMuIFpvbmUgcGFyc2luZyBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlIGNvbXBsZXRlbHkgdmlhIGBuZl9jdF96b25lX2luaXQoKWAuXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbAppbmRleCBiMWViMTAyYWI4NDMyLi5jZmMxMTNiYTM0MDI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sCkBAIC0zNzEsNiAmIzQzOzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgbmFtZTogcmVwbHktZmxhZ3MKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb24KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB6b25lCiYjNDM7ICAgICAgICB0eXBlOiBmbGFnCiYjNDM7ICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lCiYjNDM7ICAgICAgICAgIChgYENUQV9aT05FYGApIGF0dHJpYnV0ZQogICAtCiAgICAgbmFtZTogY29ubnRyYWNrLWF0dHJzCiAgICAgYXR0cmlidXRlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKaW5kZXggNDMyMzNhZjc1YjlkNS4uOTg1ZjljMDhkM2U5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKQEAgLTI4NSw2ICYjNDM7Mjg1LDcgQEAgZW51bSBjdGF0dHJfZmlsdGVyIHsKIAlDVEFfRklMVEVSX1VOU1BFQywKIAlDVEFfRklMVEVSX09SSUdfRkxBR1MsCiAJQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHUywKJiM0MzsJQ1RBX0ZJTFRFUl9aT05FLAogCV9fQ1RBX0ZJTFRFUl9NQVgKIH07CiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA5YjRlMjk1NTdlYzMzLi5mZmMyOWE0MDc3NDlkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC05MTEsNiAmIzQzOzkxMSw3IEBAIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV0gPSB7CiAJW0NUQV9GSUxURVJfT1JJR19GTEFHU10JCT0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLAogCVtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXQk9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSwKJiM0MzsJW0NUQV9GSUxURVJfWk9ORV0JCT0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiB9OwogCiBzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwKQEAgLTkzMCw2ICYjNDM7OTMxLDkgQEAgc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJaWYgKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKQogCQlmaWx0ZXItJmd0O3JlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pOwogCiYjNDM7CWlmICh0YltDVEFfRklMVEVSX1pPTkVdKQomIzQzOwkJZmlsdGVyLSZndDt6b25lX2ZpbHRlciA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDYsNiAmIzQzOzEwMTAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZpbHRlcjsKIAomIzQzOwkvKiBDVEFfWk9ORSBpcyBhbGxvd2VkIHdpdGhvdXQgQ1RBX0ZJTFRFUl9aT05FLiAqLwogCWlmIChjZGFbQ1RBX1pPTkVdKSB7CiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sICZhbXA7ZmlsdGVyLSZndDt6b25lKTsKIAkJaWYgKGVyciAmbHQ7IDApCkBAIC0xMDIwLDYgJiM0MzsxMDI1LDEyIEBAIGN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpCiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX2ZpbHRlcjsKIAomIzQzOwkvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqLwomIzQzOwlpZiAoZmlsdGVyLSZndDt6b25lX2ZpbHRlciAmYW1wOyZhbXA7ICFjZGFbQ1RBX1pPTkVdKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfZmlsdGVyOwomIzQzOwl9CiYjNDM7CiAJaWYgKGZpbHRlci0mZ3Q7b3JpZ19mbGFncykgewogCQlpZiAoIWNkYVtDVEFfVFVQTEVfT1JJR10pIHsKIAkJCWVyciA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMKaW5kZXggMzFiODI1MGRkYzUzZC4uNjNmNDEzNTZmZTZkNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYwpAQCAtMjE1LDcgJiM0MzsyMTUsMjIgQEAgc3RhdGljIGludCBjb3VudF9lbnRyaWVzKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpkYXRhKQogCXJldHVybiBNTkxfQ0JfT0s7CiB9CiAKLXN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpCiYjNDM7c3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSwKJiM0MzsJCQkgIGJvb2wgdXNlX2N0YV9maWx0ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxhdHRyICpuZXN0OwomIzQzOwomIzQzOwltbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTsKJiM0MzsKJiM0MzsJaWYgKHVzZV9jdGFfZmlsdGVyKSB7CiYjNDM7CQluZXN0ID0gbW5sX2F0dHJfbmVzdF9zdGFydChubGgsIENUQV9GSUxURVIpOwomIzQzOwkJbW5sX2F0dHJfcHV0KG5saCwgQ1RBX0ZJTFRFUl9aT05FLCAwLCBOVUxMKTsKJiM0MzsJCW1ubF9hdHRyX25lc3RfZW5kKG5saCwgbmVzdCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSwKJiM0MzsJCQkJYm9vbCB1c2VfY3RhX2ZpbHRlcikKIHsKIAljaGFyIGJ1ZltNTkxfU09DS0VUX0JVRkZFUl9TSVpFXTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKQEAgLTIzNSw3ICYjNDM7MjUwLDcgQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSkKIAluZmgtJmd0O3ZlcnNpb24gPSBORk5FVExJTktfVjA7CiAJbmZoLSZndDtyZXNfaWQgPSAwOwogCi0JbW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7CiYjNDM7CXB1dF96b25lX2F0dHIobmxoLCB6b25lLCB1c2VfY3RhX2ZpbHRlcik7CiAKIAlyZXQgPSBtbmxfc29ja2V0X3NlbmR0byhzb2NrLCBubGgsIG5saC0mZ3Q7bmxtc2dfbGVuKTsKIAlpZiAocmV0ICZsdDsgMCkgewpAQCAtMjYxLDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19jb3VudF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQogCXJldHVybiByZXBseV9jb3VudGVyOwogfQogCi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQomIzQzO3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsCiYjNDM7CQkJCWJvb2wgdXNlX2N0YV9maWx0ZXIpCiB7CiAJY2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CkBAIC0yODEsNyAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpCiAJbmZoLSZndDt2ZXJzaW9uID0gTkZORVRMSU5LX1YwOwogCW5maC0mZ3Q7cmVzX2lkID0gMDsKIAotCW1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpOwomIzQzOwlwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpOwogCiAJcmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtJmd0O25sbXNnX2xlbik7CiAJaWYgKHJldCAmbHQ7IDApIHsKQEAgLTMwNCw0MyAmIzQzOzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKQogCXJldHVybiAwOwogfQogCi1GSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKQotewotCXN0cnVjdCBtbmxfc29ja2V0ICpzb2NrOwotfTsKLQotRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKJiM0MztzdGF0aWMgaW50IGNvbm50cmFja196b25lX3NldHVwKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKJiM0MzsJCQkJc3RydWN0IG1ubF9zb2NrZXQgKipzb2NrKQogewogCXN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDsKIAlpbnQgcmV0OwogCi0Jc2VsZi0mZ3Q7c29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7Ci0JaWYgKCFzZWxmLSZndDtzb2NrKSB7CiYjNDM7CSpzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTsKJiM0MzsJaWYgKCEqc29jaykgewogCQlwZXJyb3IoJiMzNDttbmxfc29ja2V0X29wZW4mIzM0Oyk7Ci0JCVNLSVAocmV0dXJuLCAmIzM0O2Nhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldCYjMzQ7KTsKJiM0MzsJCVNLSVAocmV0dXJuIC0xLCAmIzM0O2Nhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldCYjMzQ7KTsKIAl9CiAKLQlyZXQgPSBtbmxfc29ja2V0X2JpbmQoc2VsZi0mZ3Q7c29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTsKJiM0MzsJcmV0ID0gbW5sX3NvY2tldF9iaW5kKCpzb2NrLCAwLCBNTkxfU09DS0VUX0FVVE9QSUQpOwogCUVYUEVDVF9FUShyZXQsIDApOwogCi0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoKnNvY2ssIFRFU1RfWk9ORV9JRCwgZmFsc2UpOwogCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRVBFUk0pCi0JCVNLSVAocmV0dXJuLCAmIzM0O05lZWRzIHRvIGJlIHJ1biBhcyByb290JiMzNDspOwomIzQzOwkJU0tJUChyZXR1cm4gLTEsICYjMzQ7TmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QmIzM0Oyk7CiAJZWxzZSBpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVPUE5PVFNVUFApCi0JCVNLSVAocmV0dXJuLCAmIzM0O0tlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzJiMzNDspOwomIzQzOwkJU0tJUChyZXR1cm4gLTEsCiYjNDM7CQkgICAgICYjMzQ7S2VybmVsIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCBjb25udHJhY2sgem9uZXMmIzM0Oyk7CiAKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLSZndDtzb2NrLCAweGYwZjBmMGYwLCAweGYxZjFmMWYxLAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmMGYwZjBmMCwgMHhmMWYxZjFmMSwKIAkJCQkJIFRFU1RfWk9ORV9JRCk7Ci0JRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi0mZ3Q7c29jaywgMHhmMmYyZjJmMiwgMHhmM2YzZjNmMywKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLAogCQkJCQkgVEVTVF9aT05FX0lEICYjNDM7IDEpOwotCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtJmd0O3NvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsCiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSwKIAkJCQkJIFRFU1RfWk9ORV9JRCAmIzQzOyAyKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLSZndDtzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LAomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjZmNmY2ZjYsIDB4ZjdmN2Y3ZjcsCiAJCQkJCSBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwotCUVYUEVDVF9FUShyZXQsIDApOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKIAogCXNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7CiAJCS5fX3U2X2FkZHIzMiA9IHsKQEAgLTM1OCw5ICYjNDM7MzcxLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKIAkJCTB4MDIwMDAwMDAKIAkJfQogCX19OwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtJmd0O3NvY2ssIHNyYywgZHN0LAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsCiAJCQkJCSBURVNUX1pPTkVfSUQpOwotCUVYUEVDVF9FUShyZXQsIDApOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKIAlzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7ewogCQkuX191Nl9hZGRyMzIgPSB7CiAJCQkweGI4MGQwMTIwLApAQCAtMzc3LDkgJiM0MzszOTAsOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKQogCQkJMHgwNDAwMDAwMAogCQl9CiAJfX07Ci0JcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi0mZ3Q7c29jaywgc3JjLCBkc3QsCiYjNDM7CXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCwKIAkJCQkJIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAJc3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3sKIAkJLl9fdTZfYWRkcjMyID0gewogCQkJMHhiODBkMDEyMCwKQEAgLTM5Niw5ICYjNDM7NDA5LDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaCkKIAkJCTB4MDYwMDAwMDAKIAkJfQogCX19OwotCXJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtJmd0O3NvY2ssIHNyYywgZHN0LAomIzQzOwlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsCiAJCQkJCSBURVNUX1pPTkVfSUQgJiM0MzsgMik7Ci0JRVhQRUNUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwogCiAJc3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3sKIAkJLl9fdTZfYWRkcjMyID0gewpAQCAtNDE2LDE0ICYjNDM7NDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiAJCQkweDA4MDAwMDAwCiAJCX0KIAl9fTsKLQlyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLSZndDtzb2NrLCBzcmMsIGRzdCwKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LAogCQkJCQkgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTsKLQlFWFBFQ1RfRVEocmV0LCAwKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbmxfc29ja2V0ICpzb2NrOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGNvbm50cmFja19kdW1wX2ZsdXNoKQomIzQzO3sKJiM0MzsJYm9vbCB1c2VfY3RhX2ZpbHRlcjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV96b25lKQomIzQzO3sKJiM0MzsJLnVzZV9jdGFfZmlsdGVyID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfZmlsdGVyKQomIzQzO3sKJiM0MzsJLnVzZV9jdGFfZmlsdGVyID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoY29ubnRyYWNrX3pvbmVfc2V0dXAoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O3NvY2spKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTsKIAlFWFBFQ1RfR0UocmV0LCAyKTsKIAlpZiAocmV0ICZndDsgMikKIAkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgZmlsdGVyaW5nIGJ5IHpvbmUmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDt1c2VfY3RhX2ZpbHRlcikgewomIzQzOwkJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCB0cnVlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMKQomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENUQV9GSUxURVJfWk9ORSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9HRShyZXQsIDApOwomIzQzOwl9CiB9CiAKIEZJWFRVUkVfVEVBUkRPV04oY29ubnRyYWNrX2R1bXBfZmx1c2gpCkBAIC00MzQsMzkgJiM0Mzs0ODQsNDIgQEAgVEVTVF9GKGNvbm50cmFja19kdW1wX2ZsdXNoLCB0ZXN0X2R1bXBfYnlfem9uZSkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELAomIzQzOwkJCQkgICB2YXJpYW50LSZndDt1c2VfY3RhX2ZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7CiB9CiAKIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKQogewomIzQzOwlib29sIGZpbHRlciA9IHZhcmlhbnQtJmd0O3VzZV9jdGFfZmlsdGVyOwogCWludCByZXQ7CiAKLQlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMCk7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDApOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDEsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDIpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMiwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAyKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7CiB9CiAKIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpCiB7CiYjNDM7CWJvb2wgZmlsdGVyID0gdmFyaWFudC0mZ3Q7dXNlX2N0YV9maWx0ZXI7CiAJaW50IHJldDsKIAotCXJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7CiAJRVhQRUNUX0VRKHJldCwgMik7Ci0JcmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi0mZ3Q7c29jaywgVEVTVF9aT05FX0lEICYjNDM7IDEpOwomIzQzOwlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMSwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAyKTsKLQlyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLSZndDtzb2NrLCBURVNUX1pPTkVfSUQgJiM0MzsgMik7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIFRFU1RfWk9ORV9JRCAmIzQzOyAyLCBmaWx0ZXIpOwogCUVYUEVDVF9FUShyZXQsIDIpOwotCXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7CiYjNDM7CXJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtJmd0O3NvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCwgZmlsdGVyKTsKIAlFWFBFQ1RfRVEocmV0LCAwKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoqKkFuYWx5emluZyBUaGlzIENvZGUgQ2hhbmdlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGlzIGFjdHVhbGx5IHV0aWxpemVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBnby10byB0b29scywgcHJvYmFibHkgYGdyZXBgIGFuZCBhIGByZWFkLWZpbGVgIGNvbW1hbmQsIHRvIGVmZmVjdGl2ZWx5IG5hdmlnYXRlIGFuZCBkaXNzZWN0IHRoZSBjb2RlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIGlkZWEgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pvbmVfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTg5Nj1zdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk3LVx0dTggZmFtaWx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjg5ODpcdGJvb2wgem9uZV9maWx0ZXI7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNC1cdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkzNTpcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE3LVx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDE4Olx0XHRmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTktXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjgtXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwMjk6XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMzAtXHRcdGVyciA9IC1FSU5WQUw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTExNjM9c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc5Olx0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgwLVx0ICAgICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRhc2ssIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byBkZWx2ZSBpbnRvIHRoZSBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AgZmlsZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvIGV4YW1pbmUgdGhlIGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmAgYW5kIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG5ldGxpbmsgZmlsdGVycyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbm50cmFjayBmcmFtZXdvcmsuIFdoYXQgZmllbGRzIGRvZXMgYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCBjb250YWluPyBXaGF0IGRvZXMgaXQgdXNlIHRvIHJlcHJlc2VudCB0aGUgY3JpdGVyaWEgZm9yIGZpbHRlcmluZyBjb25udHJhY2sgZW50cmllcz8gSXMgaXQgYmFzZWQgb24gYXR0cmlidXRlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZXNlIGZpbHRlciBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBhbmQsIGltcGxpY2l0bHksIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBmb3IgdGhlIGZpbHRlcmluZyBwcm9jZXNzLiBJcyBpdCBhbGxvY2F0aW5nIGEgc2ltcGxlIHN0cnVjdHVyZSwgb3IgaXMgdGhlcmUgYSBkeW5hbWljIGNvbXBvbmVudD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBsZWFrcyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb21lIHRvIG1pbmQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnMgZHVyaW5nIHRoZSBhbGxvY2F0aW9uPyBIb3cgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB1c2VkIGluIHRoZSBicm9hZGVyIG5ldGxpbmsgdHJhbnNhY3Rpb24gZmxvdyBmb3IgY29ubnRyYWNrIGRhdGE/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZmlsdGVyJiMzOTtzIGxpZmVjeWNsZS4gSG93IGFyZSBmaWx0ZXJzIGNyZWF0ZWQsIG1vZGlmaWVkIChpZiBhdCBhbGwpLCBhbmQgZGVzdHJveWVkPyBJcyB0aGVyZSBhIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20/IEFuZCB2ZXJ5IGltcG9ydGFudGx5LCBob3cgYXJlIHRoZXNlIGZpbHRlcnMgYWN0dWFsbHkgKnVzZWQqIHRvIG1hdGNoIGFnYWluc3QgY29ubnRyYWNrIGVudHJpZXM/IFdoYXQgaXMgdGhlIG1hdGNoaW5nIGFsZ29yaXRobSwgYW5kIHdoZXJlIGlzIGl0IGltcGxlbWVudGVkPwoKSSBhbHNvIHdhbnQgdG8gdHJ5IGFuZCBkZWR1Y2UgYW55IGltcGxpY2F0aW9ucyBmcm9tIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGVtc2VsdmVzLiBGb3IgZXhhbXBsZSwgdGhlIGBjdG5ldGxpbmtfYCBwcmVmaXggaGludHMgdGhhdCB0aGlzIGNvZGUgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyB0aGlzIGZpbHRlcmluZyBjYXBhYmlsaXR5IGludGVyZmFjZXMgd2l0aCB0aGUgdXNlciBzcGFjZSBjb25udHJhY2sgdXRpbGl0aWVzLiBJcyB0aGVyZSBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGNvbm50cmFjayBhbmQgd2hhdCYjMzk7cyBleHBvc2VkIHZpYSBuZXRsaW5rPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5NTpcdFxuIDg5NjpcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHtcbiA4OTc6XHRcdHU4IGZhbWlseTtcbiA4OTg6XHRcdGJvb2wgem9uZV9maWx0ZXI7XG4gODk5Olx0XG4gOTAwOlx0XHR1X2ludDMyX3Qgb3JpZ19mbGFncztcbiA5MDE6XHRcdHVfaW50MzJfdCByZXBseV9mbGFncztcbiA5MDI6XHRcbiA5MDM6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3JpZztcbiA5MDQ6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgcmVwbHk7XG4gOTA1Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgem9uZTtcbiA5MDY6XHRcbiA5MDc6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBtYXJrO1xuIDkwODpcdFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyIHN0YXR1cztcbiA5MDk6XHR9O1xuIDkxMDpcdFxuIDkxMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV0gPSB7XG4gOTEyOlx0XHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcbiA5MTM6XHRcdFtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gOTE0Olx0XHRbQ1RBX0ZJTFRFUl9aT05FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIDkxNTpcdH07XG4gOTE2Olx0XG4gOTE3Olx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gOTE4Olx0XHRcdFx0XHQgIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIpXG4gOTE5Olx0e1xuIDkyMDpcdFx0c3RydWN0IG5sYXR0ciAqdGJbQ1RBX0ZJTFRFUl9NQVggJiM0MzsgMV07XG4gOTIxOlx0XHRpbnQgcmV0ID0gMDtcbiA5MjI6XHRcbiA5MjM6XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9GSUxURVJfTUFYLCBhdHRyLCBjdGFfZmlsdGVyX25sYV9wb2xpY3ksXG4gOTI0Olx0XHRcdFx0ICAgICAgIE5VTEwpO1xuIDkyNTpcdFx0aWYgKHJldClcbiA5MjY6XHRcdFx0cmV0dXJuIHJldDtcbiA5Mjc6XHRcbiA5Mjg6XHRcdGlmICh0YltDVEFfRklMVEVSX09SSUdfRkxBR1NdKVxuIDkyOTpcdFx0XHRmaWx0ZXItXHUwMDNlb3JpZ19mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfT1JJR19GTEFHU10pO1xuIDkzMDpcdFxuIDkzMTpcdFx0aWYgKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKVxuIDkzMjpcdFx0XHRmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSk7XG4gOTMzOlx0XG4gOTM0Olx0XHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcbiA5MzU6XHRcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbiA5MzY6XHRcbiA5Mzc6XHRcdHJldHVybiAwO1xuIDkzODpcdH1cbiA5Mzk6XHRcbiA5NDA6XHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gOTQxOlx0XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpO1xuIDk0MjpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sXG4gOTQzOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcbiA5NDQ6XHRcdFx0XHRcdFx0IHUzMiB0eXBlLCB1X2ludDhfdCBsM251bSxcbiA5NDU6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSxcbiA5NDY6XHRcdFx0XHRcdFx0IHVfaW50MzJfdCBmbGFncyk7XG4gOTQ3Olx0XG4gOTQ4Olx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoc3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyICptYXJrLFxuIDk0OTpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcbiA5NTA6XHR7XG4gOTUxOlx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xuIDk1MjpcdFx0aWYgKGNkYVtDVEFfTUFSS10pIHtcbiA5NTM6XHRcdFx0bWFyay1cdTAwM2V2YWwgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLXSkpO1xuIDk1NDpcdFxuIDk1NTpcdFx0XHRpZiAoY2RhW0NUQV9NQVJLX01BU0tdKVxuIDk1NjpcdFx0XHRcdG1hcmstXHUwMDNlbWFzayA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX01BUktfTUFTS10pKTtcbiA5NTc6XHRcdFx0ZWxzZVxuIDk1ODpcdFx0XHRcdG1hcmstXHUwMDNlbWFzayA9IDB4ZmZmZmZmZmY7XG4gOTU5Olx0XHR9IGVsc2UgaWYgKGNkYVtDVEFfTUFSS19NQVNLXSkge1xuIDk2MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5NjE6XHRcdH1cbiA5NjI6XHQjZW5kaWZcbiA5NjM6XHRcdHJldHVybiAwO1xuIDk2NDpcdH1cbiA5NjU6XHRcbiA5NjY6XHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfcGFyc2Vfc3RhdHVzKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqc3RhdHVzLFxuIDk2NzpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxuIDk2ODpcdHtcbiA5Njk6XHRcdGlmIChjZGFbQ1RBX1NUQVRVU10pIHtcbiA5NzA6XHRcdFx0c3RhdHVzLVx1MDAzZXZhbCA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1NUQVRVU10pKTtcbiA5NzE6XHRcdFx0aWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKVxuIDk3MjpcdFx0XHRcdHN0YXR1cy1cdTAwM2VtYXNrID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfU1RBVFVTX01BU0tdKSk7XG4gOTczOlx0XHRcdGVsc2VcbiA5NzQ6XHRcdFx0XHRzdGF0dXMtXHUwMDNlbWFzayA9IHN0YXR1cy1cdTAwM2V2YWw7XG4gOTc1Olx0XG4gOTc2Olx0XHRcdC8qIHN0YXR1cy1cdTAwM2V2YWwgPT0gMD8gYWx3YXlzIHRydWUsIGVsc2UgYWx3YXlzIGZhbHNlLiAqL1xuIDk3NzpcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZW1hc2sgPT0gMClcbiA5Nzg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5Nzk6XHRcdH0gZWxzZSBpZiAoY2RhW0NUQV9TVEFUVVNfTUFTS10pIHtcbiA5ODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTgxOlx0XHR9XG4gOTgyOlx0XG4gOTgzOlx0XHQvKiBDVEFfU1RBVFVTIGlzIE5MQV9VMzIsIGlmIHRoaXMgZmlyZXMgVUFQSSBuZWVkcyB0byBiZSBleHRlbmRlZCAqL1xuIDk4NDpcdFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXHUwMDNlPSAzMik7XG4gOTg1Olx0XHRyZXR1cm4gMDtcbiA5ODY6XHR9XG4gOTg3Olx0XG4gOTg4Olx0c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcbiA5ODk6XHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIDk5MDpcdHtcbiA5OTE6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXI7XG4gOTkyOlx0XHRpbnQgZXJyO1xuIDk5MzpcdFxuIDk5NDpcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBuZl9jb25udHJhY2tfbmV0bGluay5jOiBMaW5lcyA5OTUtMTA2MCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA5OTUgdG8gMTA2MCBvZiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFJpZ2h0LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgcHJvYmFibHkgaGFuZGxpbmcgYSBzcGVjaWZpYyBjb21tYW5kIG9yIGF0dHJpYnV0ZSBzZXQuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIGVpdGhlciBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uIHJldHJpZXZhbCwgbW9kaWZpY2F0aW9uLCBvciBtYXliZSBldmVudCBub3RpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkIGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIGhhbmRsaW5nIHRoZSB2YXJpb3VzIG5ldGxpbmsgbWVzc2FnZXMsIGVzcGVjaWFsbHkgaWYgdGhlcmUmIzM5O3MgYW55IGNvbXBsZXggYXR0cmlidXRlIHBhcnNpbmcgb3IgZXJyb3IgY2hlY2tpbmcgaW52b2x2ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZsb3cgb2YgZGF0YTogd2hlcmUgaXQmIzM5O3MgY29taW5nIGZyb20sIGhvdyBpdCYjMzk7cyBiZWluZyBpbnRlcnByZXRlZCwgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIGJlaW5nIHRyaWdnZXJlZCBiYXNlZCBvbiB0aGUgZGF0YS4gSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIG1hbmFnZWQgY29ycmVjdGx5IGFuZCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgaW50ZXJmYWNpbmcgdGhlIGNvbm50cmFjayBzeXN0ZW0gd2l0aCB1c2VyIHNwYWNlLCBzbyBhbnkgZWZmaWNpZW5jeSBib3R0bGVuZWNrcyBoZXJlIHdvdWxkIGJlIGV4dHJlbWVseSBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IGF0dHJpYnV0ZSB0eXBlcyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGlrZSBidWZmZXIgb3ZlcmZsb3dzIG9yIGluamVjdGlvbiBmbGF3cy4gQW55IHNwZWNpYWwgY2FyZSByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYWxzbyBpbXBvcnRhbnQgLSBsZWFrcyBhcmUgbmV2ZXIgYWNjZXB0YWJsZS4gQWxzbywgSSYjMzk7bSBjdXJpb3VzIHdoZXRoZXIgYW55IHNwZWNpZmljIGZpbHRlcmluZyBvciBtYXRjaGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5NTpcdFx0aWYgKGNkYVtDVEFfTUFSS10gfHwgY2RhW0NUQV9NQVJLX01BU0tdKVxuIDk5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4gOTk3Olx0I2VuZGlmXG4gOTk4Olx0XG4gOTk5Olx0XHRmaWx0ZXIgPSBremFsbG9jX29iaigqZmlsdGVyKTtcbjEwMDA6XHRcdGlmIChmaWx0ZXIgPT0gTlVMTClcbjEwMDE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xMDAyOlx0XG4xMDAzOlx0XHRmaWx0ZXItXHUwMDNlZmFtaWx5ID0gZmFtaWx5O1xuMTAwNDpcdFxuMTAwNTpcdFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKFx1MDAyNmZpbHRlci1cdTAwM2VtYXJrLCBjZGEpO1xuMTAwNjpcdFx0aWYgKGVycilcbjEwMDc6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAwODpcdFxuMTAwOTpcdFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9zdGF0dXMoXHUwMDI2ZmlsdGVyLVx1MDAzZXN0YXR1cywgY2RhKTtcbjEwMTA6XHRcdGlmIChlcnIpXG4xMDExOlx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMTI6XHRcbjEwMTM6XHRcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4xMDE0Olx0XHRpZiAoY2RhW0NUQV9aT05FXSkge1xuMTAxNTpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4xMDE2Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDE3Olx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAxODpcdFx0XHRmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xuMTAxOTpcdFx0fVxuMTAyMDpcdFxuMTAyMTpcdFx0aWYgKCFjZGFbQ1RBX0ZJTFRFUl0pXG4xMDIyOlx0XHRcdHJldHVybiBmaWx0ZXI7XG4xMDIzOlx0XG4xMDI0Olx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNkYVtDVEFfRklMVEVSXSwgZmlsdGVyKTtcbjEwMjU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMDI2Olx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMjc6XHRcbjEwMjg6XHRcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXG4xMDI5Olx0XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xuMTAzMDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTAzMTpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDMyOlx0XHR9XG4xMDMzOlx0XG4xMDM0Olx0XHRpZiAoZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpIHtcbjEwMzU6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7XG4xMDM2Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEwMzc6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDM4Olx0XHRcdH1cbjEwMzk6XHRcbjEwNDA6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFx1MDAyNmZpbHRlci1cdTAwM2VvcmlnLFxuMTA0MTpcdFx0XHRcdFx0XHRcdCAgIENUQV9UVVBMRV9PUklHLFxuMTA0MjpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDQzOlx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDQ0Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpO1xuMTA0NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTA0NjpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdGlmIChmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpIHtcbjEwNTA6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX1JFUExZXSkge1xuMTA1MTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMDUyOlx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTA1MzpcdFx0XHR9XG4xMDU0Olx0XG4xMDU1Olx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmVwbHksXG4xMDU2Olx0XHRcdFx0XHRcdFx0ICAgQ1RBX1RVUExFX1JFUExZLFxuMTA1NzpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDU4Olx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDU5Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzKTtcbjEwNjA6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwNjE6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XG4xMDY0Olx0XHRyZXR1cm4gZmlsdGVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEZpbHRlciBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZpbHRlciBpcyBhbGxvY2F0ZWQgYW5kIHBhcnNlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB6b25lIGZpbHRlcmluZy4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAsIHdoZXJlIHRoZSBgZmlsdGVyYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBpcyBjcml0aWNhbCBhcyBpdCB6ZXJvZXMgb3V0IGFsbCBmaWVsZHMsIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLgoKTm93LCB0aGUgZmxvdy4gRmlyc3QsIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgaXMgY2FsbGVkLiBJZiB0aGUgQ29tbW9uIERhdGEgQXR0cmlidXRlIChDREEpIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGlzIHNldCB0byBgdHJ1ZWAgYW5kIHRoZSB6b25lIGlzIHBhcnNlZC4gT3RoZXJ3aXNlLCBub3RoaW5nIGhhcHBlbnMgYXQgdGhpcyBzdGFnZSBhbmQgYHpvbmVfZmlsdGVyYCByZW1haW5zIGBmYWxzZWAuCgpUaGVuLCBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcmAga2lja3MgaW4uIEhlcmUmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSW5zaWRlIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgdGhlIHByZXNlbmNlIG9mIGEgbmVzdGVkIGF0dHJpYnV0ZSBgQ1RBX0ZJTFRFUl9aT05FYCB3aXRoaW4gdGhlIENEQSB0YWJsZSBzZXRzIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCB0byBgdHJ1ZWAuIFRoaXMgY3JlYXRlcyBhIHBvdGVudGlhbCBjb25mbGljdC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB0aGlzIGNoZWNrOiBgaWYgKGZpbHRlci0mZ3Q7em9uZV9maWx0ZXIgJmFtcDsmYW1wOyAhY2RhW0NUQV9aT05FXSlgLiBJZiBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBzZXQsIGFuZCAqb25seSogYENUQV9GSUxURVJfWk9ORWAgaXMgc2V0IChidXQgbm90IHRoZSBgQ1RBX1pPTkVgKSwgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGJlY29tZXMgYHRydWVgIGJlY2F1c2UgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgc2V0cyBpdC4gQnV0IHRoZSBzdWJzZXF1ZW50IGNoZWNrIGltbWVkaWF0ZWx5IGVycm9ycyBvdXQhIEl0JiMzOTtzIGFuIGBFSU5WQUxgIGVycm9yLiBUaGlzIG1lYW5zIHlvdSBjYW4mIzM5O3Qgc3BlY2lmeSBhIHpvbmUgZmlsdGVyIG5lc3RlZCB3aXRoaW4gdGhlIGZpbHRlciBpdHNlbGYgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBgQ1RBX1pPTkVgIGluIHRoZSB0b3AgbGV2ZWwuIFRoZSBkZXNpZ24gc2VlbXMgdG8gaGF2ZSBhIHByb2JsZW0uCgpCYXNpY2FsbHksIGlmIHRoZSBvdXRlciBgQ1RBX1pPTkVgIGlzICpub3QqIHByZXNlbnQgYnV0IHRoZSBpbm5lciBgQ1RBX0ZJTFRFUl9aT05FYCBpcywgdGhlbiB5b3UgaW1tZWRpYXRlbHkgZ2V0IGFuIGludmFsaWQgYXJndW1lbnQgZXJyb3IuIEl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9yIGluY29uc2lzdGVuY3kgaW4gdGhlIGV4cGVjdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZGlnIGludG8gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGZpbHRlci0mZ3Q7em9uZV9maWx0ZXJgIGFuZCBgZmlsdGVyLSZndDt6b25lYCBhcmUgKmFjdHVhbGx5KiB1c2VkLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoaXMgaXMganVzdCBhIG1pbm9yIHZhbGlkYXRpb24gZXJyb3IsIG9yIGEgZnVuZGFtZW50YWwgZmxhdyBpbiB0aGUgZmlsdGVyaW5nIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCwgYW5kIGlmIHRoZSBmaWx0ZXJpbmcgcHJvY2VzcyBjYW4gZXZlbiBvcGVyYXRlIGNvcnJlY3RseSB3aGVuIHRoaXMgc2NlbmFyaW8gaXMgcHJldmVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE2MDpcdFx0cmV0dXJuIDE7XG4xMTYxOlx0fVxuMTE2MjpcdFxuMTE2MzpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXG4xMTY0Olx0e1xuMTE2NTpcdFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlciA9IGRhdGE7XG4xMTY2Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbjExNjc6XHRcdHUzMiBzdGF0dXM7XG4xMTY4Olx0XG4xMTY5Olx0XHRpZiAoZmlsdGVyID09IE5VTEwpXG4xMTcwOlx0XHRcdGdvdG8gb3V0O1xuMTE3MTpcdFxuMTE3MjpcdFx0LyogTWF0Y2ggZW50cmllcyBvZiBhIGdpdmVuIEwzIHByb3RvY29sIG51bWJlci5cbjExNzM6XHRcdCAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIGllLiBsM3Byb3RvID09IDAsXG4xMTc0Olx0XHQgKiB0aGVuIG1hdGNoIGV2ZXJ5dGhpbmcuXG4xMTc1Olx0XHQgKi9cbjExNzY6XHRcdGlmIChmaWx0ZXItXHUwMDNlZmFtaWx5IFx1MDAyNlx1MDAyNiBuZl9jdF9sM251bShjdCkgIT0gZmlsdGVyLVx1MDAzZWZhbWlseSlcbjExNzc6XHRcdFx0Z290byBpZ25vcmVfZW50cnk7XG4xMTc4Olx0XG4xMTc5Olx0XHRpZiAoZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyIFx1MDAyNlx1MDAyNlxuMTE4MDpcdFx0ICAgICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpKVxuMTE4MTpcdFx0XHRnb3RvIGlnbm9yZV9lbnRyeTtcbjExODI6XHRcbjExODM6XHRcdGlmIChmaWx0ZXItXHUwMDNlb3JpZ19mbGFncykge1xuMTE4NDpcdFx0XHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xuMTE4NTpcdFx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoXHUwMDI2ZmlsdGVyLVx1MDAzZW9yaWcsIHR1cGxlLFxuMTE4NjpcdFx0XHRcdFx0XHRcdCAgZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MsXG4xMTg3Olx0XHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlZmFtaWx5KSlcbjExODg6XHRcdFx0XHRnb3RvIGlnbm9yZV9lbnRyeTtcbjExODk6XHRcdH1cbjExOTA6XHRcbjExOTE6XHRcdGlmIChmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpIHtcbjExOTI6XHRcdFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX1JFUExZKTtcbjExOTM6XHRcdFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFx1MDAyNmZpbHRlci1cdTAwM2VyZXBseSwgdHVwbGUsXG4xMTk0Olx0XHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MsXG4xMTk1Olx0XHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlZmFtaWx5KSlcbjExOTY6XHRcdFx0XHRnb3RvIGlnbm9yZV9lbnRyeTtcbjExOTc6XHRcdH1cbjExOTg6XHRcbjExOTk6XHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIE5ldyBGaWx0ZXIgUG9saWN5IEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjdGFfZmlsdGVyX25sYV9wb2xpY3lgIHN0cnVjdHVyZS4gSSBzZWUgdGhhdCBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBzZXQgdG8gYC50eXBlID0gTkxBX0ZMQUdgIGluIHRoZXJlLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIGFsc28gdmVyaWZpZWQgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBlbnVtIGBjdGF0dHJfZmlsdGVyYCBpbmNsdWRlcyBgQ1RBX0ZJTFRFUl9aT05FYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgY29uc2lzdGVuY3kuCgpJJiMzOTt2ZSBhbHNvIG1hZGUgc3VyZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHNlbGZ0ZXN0cyBhcmUgdXAgdG8gZGF0ZSwgY292ZXJpbmcgdGhpcyBuZXcgYWRkaXRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSBvdGhlciBwb2ludHMgaW4gdGhlIGNvZGViYXNlIHdoZXJlIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBwZXJoYXBzIHRoZSBvbGRlciBgem9uZV9maWx0ZXJgIGlzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBjbGVhbiBhbmQgZG9lc24mIzM5O3QgY29uZmxpY3Qgd2l0aCBvdGhlciBhcmVhcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogcGxhY2UgdGhpcyB6b25lIGZpbHRlciBmbGFnIGlzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1RBX0ZJTFRFUl9aT05FJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPTI4ND1lbnVtIGN0YXR0cl9maWx0ZXIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oLTI4Ny1cdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaDoyODg6XHRDVEFfRklMVEVSX1pPTkUsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaC0yODktXHRfX0NUQV9GSUxURVJfTUFYXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MTMtXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkxNDpcdFtDVEFfRklMVEVSX1pPTkVdXHRcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTE1LX07XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxNz1zdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTMzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjkzNDpcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNS1cdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9OTg5PWN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAxMzpcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNC1cdGlmIChjZGFbQ1RBX1pPTkVdKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAyODpcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAyOS1cdGlmIChmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFjZGFbQ1RBX1pPTkVdKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jPTIxOD1zdGF0aWMgdm9pZCBwdXRfem9uZV9hdHRyKHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1aW50MTZfdCB6b25lLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy0yMjYtXHRcdG5lc3QgPSBtbmxfYXR0cl9uZXN0X3N0YXJ0KG5saCwgQ1RBX0ZJTFRFUik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmM6MjI3Olx0XHRtbmxfYXR0cl9wdXQobmxoLCBDVEFfRklMVEVSX1pPTkUsIDAsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTIyOC1cdFx0bW5sX2F0dHJfbmVzdF9lbmQobmxoLCBuZXN0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmM9NDU5PUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTQ3My1cdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jOjQ3NDpcdFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ1RBX0ZJTFRFUl9aT05FXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy00NzUtXHRcdEFTU0VSVF9HRShyZXQsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzY3J1dGluaXplIGl0IGZvciBhbnkgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhpbmdlcyBvbiBob3cgYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgaGFuZGxlcyB0aGUgYFtDVEFfRklMVEVSX1pPTkVdYCBhdHRyaWJ1dGUgLSBzcGVjaWZpY2FsbHkgdGhlIGBOTEFfRkxBR2AgdHlwZS4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIGFyZSBvcGVuaW5nIG91cnNlbHZlcyB1cCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKRnJvbSB3aGF0IEkgY2FuIHNlZSwgYGZpbHRlcmAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGdvb2QuIFRoYXQgZW5zdXJlcyBldmVyeSBmaWVsZCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgc3RhcnRzIHdpdGggYSBrbm93biB6ZXJvIHZhbHVlLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCBpbiBtaXRpZ2F0aW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHJlYWQgaXNzdWVzLgoKTm93LCBsb29raW5nIGZ1cnRoZXIsIGB0YltDVEFfRklMVEVSX1pPTkVdYCBzZXRzIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCB0byB0cnVlLiBTbywgd2UmIzM5O3ZlIGdvdCBhIGJvb2xlYW4gZmxhZyBiZWluZyBleHBsaWNpdGx5IHNldC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYW4gZWFybHkgZXJyb3IgY2hlY2s6IGlmIGBmaWx0ZXItJmd0O3pvbmVfZmlsdGVyYCBpcyB0cnVlLCAqYW5kKiBgY2RhW0NUQV9aT05FXWAgaXMgKm5vdCogcHJlc2VudCAoaS5lLiwgbm90IGRlZmluZWQpLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGEgdXNlZnVsIGNoZWNrLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGxpY2F0aW9ucy4KClRoZSByZWFsIG1lYXQgb2YgdGhlIG1hdHRlciBjb21lcyBpbiB0aGUgZmluYWwgY29uZGl0aW9uOiBpZiBgY2RhW0NUQV9aT05FXWAgKmlzKiBkZWZpbmVkLCB0aGVuIGBmaWx0ZXItJmd0O3pvbmVgIGlzIHBvcHVsYXRlZCB2aWEgdGhlIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgYGN0bmV0bGlua19wYXJzZV96b25lYCAqYWx3YXlzKiBzZXRzIGFsbCBtZW1iZXJzIG9mIGBmaWx0ZXItJmd0O3pvbmVgIHRvIGEga25vd24sIHZhbGlkIHZhbHVlLiBJZiBpdCBmYWlscyB0byBkbyBzbywgd2UgbWlnaHQgZmluZCBvdXJzZWx2ZXMgd2l0aCBhIG1lbW9yeSBsZWFrIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcy4gU28sIGxldCYjMzk7cyBnbyBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdG5ldGxpbmtfcGFyc2Vfem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5NDA6c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTk0MS1cdFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE0LVx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDE1Olx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTQxOT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTQyMDpjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE0MjEtXHRcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNDM2PWN0bmV0bGlua19wYXJzZV90dXBsZV96b25lKHN0cnVjdCBubGF0dHIgKmF0dHIsIGVudW0gY3RhdHRyX3R5cGUgdHlwZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTQ0My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNDQ0Olx0cmV0ID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoYXR0ciwgem9uZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTQ0NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE2MjQ9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjM0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2MzU6XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZ6b25lKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjM2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTY3Nz1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2OTktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTcwMDpcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE3MDEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yMzk2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX25ld19jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjQwNi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNDA3Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXHUwMDI2em9uZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjQwOC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTMyNzM9c3RhdGljIGludCBjdG5ldGxpbmtfZHVtcF9leHBfY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqY3RubCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzI5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozMjk3Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMyOTgtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zMzIwPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM0My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozMzQ0Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzNDUtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNDE2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQyNy1cdFx0LyogZGVsZXRlIGEgc2luZ2xlIGV4cGVjdCBieSB0dXBsZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0Mjg6XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcdTAwMjZ6b25lKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDI5LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNjU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX25ld19leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzY2OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjY5Olx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFx1MDAyNnpvbmUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2NzAtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAyOAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGN0bmV0bGlua19wYXJzZV96b25lYCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgem9uZS1yZWxhdGVkIE5ldGxpbmsgbWVzc2FnZXMsIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBzdGFydCBieSByZXZpZXdpbmcgaXRzIHN0cnVjdHVyZSwgaG93IGl0IHBhcnNlcyB0aGUgaW5jb21pbmcgZGF0YSwgYW5kIHdoYXQgYWN0aW9ucyBpdCB0YWtlcyBiYXNlZCBvbiB0aGUgcGFyc2VkIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwsIG1ha2luZyBzdXJlIHRoYXQgaXQgY29ycmVjdGx5IG1hbmFnZXMgZGlmZmVyZW50IGVycm9yIGNvbmRpdGlvbnMgdG8gcHJldmVudCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJIGFtIGFsc28gZ29pbmcgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYXJlYXMgb2Ygb3B0aW1pemF0aW9uIHRvIGltcHJvdmUgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxODpcdFxuMTQxOTpcdHN0YXRpYyBpbnRcbjE0MjA6XHRjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuMTQyMTpcdFx0XHQgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSlcbjE0MjI6XHR7XG4xNDIzOlx0XHRuZl9jdF96b25lX2luaXQoem9uZSwgTkZfQ1RfREVGQVVMVF9aT05FX0lELFxuMTQyNDpcdFx0XHRcdE5GX0NUX0RFRkFVTFRfWk9ORV9ESVIsIDApO1xuMTQyNTpcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTXG4xNDI2Olx0XHRpZiAoYXR0cilcbjE0Mjc6XHRcdFx0em9uZS1cdTAwM2VpZCA9IG50b2hzKG5sYV9nZXRfYmUxNihhdHRyKSk7XG4xNDI4Olx0I2Vsc2VcbjE0Mjk6XHRcdGlmIChhdHRyKVxuMTQzMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNDMxOlx0I2VuZGlmXG4xNDMyOlx0XHRyZXR1cm4gMDtcbjE0MzM6XHR9XG4xNDM0Olx0XG4xNDM1Olx0c3RhdGljIGludFxuMTQzNjpcdGN0bmV0bGlua19wYXJzZV90dXBsZV96b25lKHN0cnVjdCBubGF0dHIgKmF0dHIsIGVudW0gY3RhdHRyX3R5cGUgdHlwZSxcbjE0Mzc6XHRcdFx0XHQgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpXG4xNDM4Olx0e1xuMTQzOTpcdFx0aW50IHJldDtcbjE0NDA6XHRcbjE0NDE6XHRcdGlmICh6b25lLVx1MDAzZWlkICE9IE5GX0NUX0RFRkFVTFRfWk9ORV9JRClcbjE0NDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjA3CgkJCQkJCQlvdXRwdXQ6IDIzOAoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJpc2sgb2YgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gVGhpcyBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBzZWUgdGhhdCBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgIGluaXRpYWxpemVzIHRoZSB6b25lIHRocm91Z2ggYG5mX2N0X3pvbmVfaW5pdGAsIHdoaWNoIGlzIGdvb2QuIFRoZSBgZmlsdGVyYCBvYmplY3QsIGEga2V5IGVsZW1lbnQsIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4KCk5vdywgdGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgd2l0aGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGBDVEFfRklMVEVSYCBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBJZiBpdCYjMzk7cyBwcmVzZW50LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZywgaXQgc2V0cyBgZmlsdGVyLSZndDt6b25lX2ZpbHRlcmAgdG8gdHJ1ZS4gVGhlIHZhbGlkYXRpb24gc3RlcCBpcyBjcml0aWNhbCBoZXJlOiBpdCBlbnN1cmVzIHRoYXQgaWYgYHpvbmVfZmlsdGVyYCBpcyB0cnVlLCB0aGUgYENUQV9aT05FYCBhdHRyaWJ1dGUgKm11c3QqIGFsc28gYmUgcHJlc2VudC4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgdG8gcHJldmVudCBhIHNjZW5hcmlvIHdoZXJlIHRoZSB6b25lIGlzbiYjMzk7dCBwcm9wZXJseSBkZWZpbmVkLiBXaGVuIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGN0bmV0bGlua19wYXJzZV96b25lYCBwYXJzZXMgdGhlIHpvbmUgaW50byBgZmlsdGVyLSZndDt6b25lYC4KCkZpbmFsbHksIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24gdXNlcyB0aGlzIGRhdGEuIEkgc2VlIGEgY29uZGl0aW9uYWwgY2hlY2s6IGBpZiAoZmlsdGVyLSZndDt6b25lX2ZpbHRlciAmYW1wOyZhbXA7ICFuZl9jdF96b25lX2VxdWFsX2FueShjdCwgJmFtcDtmaWx0ZXItJmd0O3pvbmUpKSBnb3RvIGlnbm9yZV9lbnRyeTtgLiBUaGlzIG1lYW5zIGlmIGB6b25lX2ZpbHRlcmAgaXMgZW5hYmxlZCwgaXQgY2hlY2tzIGlmIHRoZSB6b25lcyBhcmUgZXF1YWwgdG8gcHJldmVudCB0aGUgZW50cnkgZnJvbSBnb2luZyBvbi4KCkNvbnNpZGVyaW5nIGFsbCB0aGlzLCBpdCAqYXBwZWFycyogdGhhdCB0aGVyZSBhcmUgbm8gaW1tZWRpYXRlIHJpc2tzLiBJIGRvbiYjMzk7dCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgbWVtb3J5IGxlYWtzIG9yIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBidWZmZXIgbGVuZ3RoIG9yIGJvdW5kIGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIGVpdGhlci4gU28sIGluIG15IGV4cGVydCBvcGluaW9uLCB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTi4gVGhlIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBzdWl0ZXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDVEFfRklMVEVSX1pPTkUsIGFsbG93aW5nIGNvbm50cmFjayBkdW1wcyBhbmQgZmx1c2hlcyB0byBmaWx0ZXIgZW50cmllcyBieSB6b25lLiBcblxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eTpcbjEuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLlxuMi4gVGhlIGF0dHJpYnV0ZSBwb2xpY3kgYENUQV9GSUxURVJfWk9ORWAgaXMgZGVmaW5lZCBhcyBgTkxBX0ZMQUdgLCBwYXJzZWQgdmlhIG5ldGxpbmsgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nIChgbmxhX3BhcnNlX25lc3RlZGApLlxuMy4gWm9uZSBwYXJzaW5nIGluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmUgY29tcGxldGVseSB2aWEgYG5mX2N0X3pvbmVfaW5pdCgpYC5cbjQuIFN0cmljdCB2YWxpZGF0aW9uIGVuc3VyZXMgYENUQV9aT05FYCBtdXN0IGJlIHByZXNlbnQgaWYgYHpvbmVfZmlsdGVyYCBpcyBzZXQuXG41LiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHk6XG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cbjMuIFpvbmUgcGFyc2luZyBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlIGNvbXBsZXRlbHkgdmlhIGBuZl9jdF96b25lX2luaXQoKWAuXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjE1Ljc3MzgxNTIxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTUyMjE4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0bmV0bGlua19wYXJzZV9maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImN0bmV0bGlua19mbHVzaF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kdW1wX3RhYmxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9jb25udHJhY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eTpcXG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cXG4yLiBUaGUgYXR0cmlidXRlIHBvbGljeSBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBkZWZpbmVkIGFzIGBOTEFfRkxBR2AsIHBhcnNlZCB2aWEgbmV0bGluayBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgKGBubGFfcGFyc2VfbmVzdGVkYCkuXFxuMy4gWm9uZSBwYXJzaW5nIGluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmUgY29tcGxldGVseSB2aWEgYG5mX2N0X3pvbmVfaW5pdCgpYC5cXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MToxNS43NzM4MjAyMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDI0MjI2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6NDE6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sXFxuaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvY29ubnRyYWNrLnlhbWxcXG5AQCAtMzcxLDYgKzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICBuYW1lOiByZXBseS1mbGFnc1xcbiAgICAgICAgIHR5cGU6IHUzMlxcbiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb25cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHpvbmVcXG4rICAgICAgICB0eXBlOiBmbGFnXFxuKyAgICAgICAgZG9jOiBmaWx0ZXIgb24gY29ubnRyYWNrIHpvbmUgaWQ7IHJlcXVpcmVzIHRoZSB0b3AtbGV2ZWwgem9uZVxcbisgICAgICAgICAgKGBgQ1RBX1pPTkVgYCkgYXR0cmlidXRlXFxuICAgLVxcbiAgICAgbmFtZTogY29ubnRyYWNrLWF0dHJzXFxuICAgICBhdHRyaWJ1dGVzOlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXFxuaW5kZXggNDMyMzNhZjc1YjlkNS4uOTg1ZjljMDhkM2U5YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXFxuQEAgLTI4NSw2ICsyODUsNyBAQCBlbnVtIGN0YXR0cl9maWx0ZXIge1xcbiBcXHRDVEFfRklMVEVSX1VOU1BFQyxcXG4gXFx0Q1RBX0ZJTFRFUl9PUklHX0ZMQUdTLFxcbiBcXHRDVEFfRklMVEVSX1JFUExZX0ZMQUdTLFxcbitcXHRDVEFfRklMVEVSX1pPTkUsXFxuIFxcdF9fQ1RBX0ZJTFRFUl9NQVhcXG4gfTtcXG4gI2RlZmluZSBDVEFfRklMVEVSX01BWCAoX19DVEFfRklMVEVSX01BWCAtIDEpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTkxMSw2ICs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggKyAxXSA9IHtcXG4gXFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcXG4gXFx0W0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuK1xcdFtDVEFfRklMVEVSX1pPTkVdXFx0XFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbkBAIC05MzAsNiArOTMxLDkgQEAgc3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcXG4gXFx0XFx0ZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdKTtcXG4gXFxuK1xcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxcbitcXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDA2LDYgKzEwMTAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuIFxcbitcXHQvKiBDVEFfWk9ORSBpcyBhbGxvd2VkIHdpdGhvdXQgQ1RBX0ZJTFRFUl9aT05FLiAqL1xcbiBcXHRpZiAoY2RhW0NUQV9aT05FXSkge1xcbiBcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuQEAgLTEwMjAsNiArMTAyNSwxMiBAQCBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbiBcXG4rXFx0LyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi9cXG4rXFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzKSB7XFxuIFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNcXG5pbmRleCAzMWI4MjUwZGRjNTNkLi42M2Y0MTM1NmZlNmQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY1xcbkBAIC0yMTUsNyArMjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSlcXG4gXFx0cmV0dXJuIE1OTF9DQl9PSztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4rc3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcXG4rXFx0XFx0XFx0ICBib29sIHVzZV9jdGFfZmlsdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuK1xcbitcXHRtbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTtcXG4rXFxuK1xcdGlmICh1c2VfY3RhX2ZpbHRlcikge1xcbitcXHRcXHRuZXN0ID0gbW5sX2F0dHJfbmVzdF9zdGFydChubGgsIENUQV9GSUxURVIpO1xcbitcXHRcXHRtbmxfYXR0cl9wdXQobmxoLCBDVEFfRklMVEVSX1pPTkUsIDAsIE5VTEwpO1xcbitcXHRcXHRtbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXFxuK1xcdFxcdFxcdFxcdGJvb2wgdXNlX2N0YV9maWx0ZXIpXFxuIHtcXG4gXFx0Y2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07XFxuIFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbkBAIC0yMzUsNyArMjUwLDcgQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4gXFx0bmZoLVxcdTAwM2V2ZXJzaW9uID0gTkZORVRMSU5LX1YwO1xcbiBcXHRuZmgtXFx1MDAzZXJlc19pZCA9IDA7XFxuIFxcbi1cXHRtbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTtcXG4rXFx0cHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTtcXG4gXFxuIFxcdHJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLVxcdTAwM2VubG1zZ19sZW4pO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbkBAIC0yNjEsNyArMjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4gXFx0cmV0dXJuIHJlcGx5X2NvdW50ZXI7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXFxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXFxuK1xcdFxcdFxcdFxcdGJvb2wgdXNlX2N0YV9maWx0ZXIpXFxuIHtcXG4gXFx0Y2hhciBidWZbTU5MX1NPQ0tFVF9CVUZGRVJfU0laRV07XFxuIFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbkBAIC0yODEsNyArMjk3LDcgQEAgc3RhdGljIGludCBjb25udHJhY2tfZmx1c2hfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcXG4gXFx0bmZoLVxcdTAwM2V2ZXJzaW9uID0gTkZORVRMSU5LX1YwO1xcbiBcXHRuZmgtXFx1MDAzZXJlc19pZCA9IDA7XFxuIFxcbi1cXHRtbmxfYXR0cl9wdXRfdTE2KG5saCwgQ1RBX1pPTkUsIGh0b25zKHpvbmUpKTtcXG4rXFx0cHV0X3pvbmVfYXR0cihubGgsIHpvbmUsIHVzZV9jdGFfZmlsdGVyKTtcXG4gXFxuIFxcdHJldCA9IG1ubF9zb2NrZXRfc2VuZHRvKHNvY2ssIG5saCwgbmxoLVxcdTAwM2VubG1zZ19sZW4pO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbkBAIC0zMDQsNDMgKzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tRklYVFVSRShjb25udHJhY2tfZHVtcF9mbHVzaClcXG4te1xcbi1cXHRzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaztcXG4tfTtcXG4tXFxuLUZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbW5sX3NvY2tldCAqKnNvY2spXFxuIHtcXG4gXFx0c3RydWN0IGluNl9hZGRyIHNyYywgZHN0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2VsZi1cXHUwMDNlc29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7XFxuLVxcdGlmICghc2VsZi1cXHUwMDNlc29jaykge1xcbitcXHQqc29jayA9IG1ubF9zb2NrZXRfb3BlbihORVRMSU5LX05FVEZJTFRFUik7XFxuK1xcdGlmICghKnNvY2spIHtcXG4gXFx0XFx0cGVycm9yKFxcXCJtbmxfc29ja2V0X29wZW5cXFwiKTtcXG4tXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcXFwiKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4gLTEsIFxcXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcXFwiKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gbW5sX3NvY2tldF9iaW5kKHNlbGYtXFx1MDAzZXNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XFxuK1xcdHJldCA9IG1ubF9zb2NrZXRfYmluZCgqc29jaywgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuIFxcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZSgqc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVQRVJNKVxcbi1cXHRcXHRTS0lQKHJldHVybiwgXFxcIk5lZWRzIHRvIGJlIHJ1biBhcyByb290XFxcIik7XFxuK1xcdFxcdFNLSVAocmV0dXJuIC0xLCBcXFwiTmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcXFwiKTtcXG4gXFx0ZWxzZSBpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFT1BOT1RTVVBQKVxcbi1cXHRcXHRTS0lQKHJldHVybiwgXFxcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXFxcIik7XFxuK1xcdFxcdFNLSVAocmV0dXJuIC0xLFxcbitcXHRcXHQgICAgIFxcXCJLZXJuZWwgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IGNvbm50cmFjayB6b25lc1xcXCIpO1xcbiBcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cXHUwMDNlc29jaywgMHhmMGYwZjBmMCwgMHhmMWYxZjFmMSxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXFxuIFxcdFxcdFxcdFxcdFxcdCBURVNUX1pPTkVfSUQpO1xcbi1cXHRFWFBFQ1RfRVEocmV0LCAwKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cXHUwMDNlc29jaywgMHhmMmYyZjJmMiwgMHhmM2YzZjNmMyxcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLFxcbiBcXHRcXHRcXHRcXHRcXHQgVEVTVF9aT05FX0lEICsgMSk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVxcdTAwM2Vzb2NrLCAweGY0ZjRmNGY0LCAweGY1ZjVmNWY1LFxcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsXFxuIFxcdFxcdFxcdFxcdFxcdCBURVNUX1pPTkVfSUQgKyAyKTtcXG4tXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuLVxcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXFx1MDAzZXNvY2ssIDB4ZjZmNmY2ZjYsIDB4ZjdmN2Y3ZjcsXFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNyxcXG4gXFx0XFx0XFx0XFx0XFx0IE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFxuIFxcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XFxuIFxcdFxcdC5fX3U2X2FkZHIzMiA9IHtcXG5AQCAtMzU4LDkgKzM3MSw5IEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuIFxcdFxcdFxcdDB4MDIwMDAwMDBcXG4gXFx0XFx0fVxcbiBcXHR9fTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cXHUwMDNlc29jaywgc3JjLCBkc3QsXFxuK1xcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCxcXG4gXFx0XFx0XFx0XFx0XFx0IFRFU1RfWk9ORV9JRCk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcXG4gXFx0XFx0Ll9fdTZfYWRkcjMyID0ge1xcbiBcXHRcXHRcXHQweGI4MGQwMTIwLFxcbkBAIC0zNzcsOSArMzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4gXFx0XFx0XFx0MHgwNDAwMDAwMFxcbiBcXHRcXHR9XFxuIFxcdH19O1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVxcdTAwM2Vzb2NrLCBzcmMsIGRzdCxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgVEVTVF9aT05FX0lEICsgMSk7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcXG4gXFx0XFx0Ll9fdTZfYWRkcjMyID0ge1xcbiBcXHRcXHRcXHQweGI4MGQwMTIwLFxcbkBAIC0zOTYsOSArNDA5LDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4gXFx0XFx0XFx0MHgwNjAwMDAwMFxcbiBcXHRcXHR9XFxuIFxcdH19O1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVxcdTAwM2Vzb2NrLCBzcmMsIGRzdCxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgVEVTVF9aT05FX0lEICsgMik7XFxuLVxcdEVYUEVDVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4gXFxuIFxcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XFxuIFxcdFxcdC5fX3U2X2FkZHIzMiA9IHtcXG5AQCAtNDE2LDE0ICs0MjksNTEgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4gXFx0XFx0XFx0MHgwODAwMDAwMFxcbiBcXHRcXHR9XFxuIFxcdH19O1xcbi1cXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVxcdTAwM2Vzb2NrLCBzcmMsIGRzdCxcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcXG4tXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbiBcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK0ZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuK3tcXG4rXFx0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoY29ubnRyYWNrX2R1bXBfZmx1c2gpXFxuK3tcXG4rXFx0Ym9vbCB1c2VfY3RhX2ZpbHRlcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV96b25lKVxcbit7XFxuK1xcdC51c2VfY3RhX2ZpbHRlciA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChjb25udHJhY2tfZHVtcF9mbHVzaCwgY3RhX2ZpbHRlcilcXG4re1xcbitcXHQudXNlX2N0YV9maWx0ZXIgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGNvbm50cmFja196b25lX3NldHVwKF9tZXRhZGF0YSwgXFx1MDAyNnNlbGYtXFx1MDAzZXNvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcXG4gXFx0RVhQRUNUX0dFKHJldCwgMik7XFxuIFxcdGlmIChyZXQgXFx1MDAzZSAyKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lXFxcIik7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNldXNlX2N0YV9maWx0ZXIpIHtcXG4rXFx0XFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCB0cnVlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENUQV9GSUxURVJfWk9ORVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfR0UocmV0LCAwKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBGSVhUVVJFX1RFQVJET1dOKGNvbm50cmFja19kdW1wX2ZsdXNoKVxcbkBAIC00MzQsMzkgKzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsXFxuK1xcdFxcdFxcdFxcdCAgIHZhcmlhbnQtXFx1MDAzZXVzZV9jdGFfZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMik7XFxuIH1cXG4gXFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKVxcbiB7XFxuK1xcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cXHUwMDNldXNlX2N0YV9maWx0ZXI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XFxuIFxcdEVYUEVDVF9FUShyZXQsIDApO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XFxuIFxcdEVYUEVDVF9FUShyZXQsIDApO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAxKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSwgZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMik7XFxuLVxcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDIpO1xcbitcXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyLCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAyKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAyKTtcXG4gfVxcbiBcXG4gVEVTVF9GKGNvbm50cmFja19kdW1wX2ZsdXNoLCB0ZXN0X2ZsdXNoX2J5X3pvbmVfZGVmYXVsdClcXG4ge1xcbitcXHRib29sIGZpbHRlciA9IHZhcmlhbnQtXFx1MDAzZXVzZV9jdGFfZmlsdGVyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2ZsdXNoX3pvbmUoc2VsZi1cXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAwKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmaWx0ZXIpO1xcbiBcXHRFWFBFQ1RfRVEocmV0LCAyKTtcXG4tXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSk7XFxuK1xcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDEsIGZpbHRlcik7XFxuIFxcdEVYUEVDVF9FUShyZXQsIDIpO1xcbi1cXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVxcdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyKTtcXG4rXFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMiwgZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMik7XFxuLVxcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XFxuK1xcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXFx1MDAzZXNvY2ssIE5GX0NUX0RFRkFVTFRfWk9ORV9JRCwgZmlsdGVyKTtcXG4gXFx0RVhQRUNUX0VRKHJldCwgMCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjE3LjQxOTI1MjMyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY4NDg0NzgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RuZXRsaW5rX3BhcnNlX2ZpbHRlclwiLFxuICAgIFwiY3RuZXRsaW5rX2FsbG9jX2ZpbHRlclwiLFxuICAgIFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2R1bXBfdGFibGVcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZGVsX2Nvbm50cmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQ1RBX0ZJTFRFUl9aT05FIGF0dHJpYnV0ZSBzdXBwb3J0IHRvIHRoZSBjb25udHJhY2sgbmV0bGluayBmaWx0ZXJpbmcgaW50ZXJmYWNlLCB1cGRhdGluZyBuZXRsaW5rIHBvbGljeSBhbmQgcGFyc2luZyBsb2dpYyBpbiBuZl9jb25udHJhY2tfbmV0bGluay5jLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIE5FVExJTktfTkVURklMVEVSIGNvbm50cmFjayBkdW1wIGFuZCBmbHVzaCByZXF1ZXN0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sXG5AQCAtMzcxLDYgKzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IHJlcGx5LWZsYWdzXG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb25cbisgICAgICAtXG4rICAgICAgICBuYW1lOiB6b25lXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lXG4rICAgICAgICAgIChgYENUQV9aT05FYGApIGF0dHJpYnV0ZVxuICAgLVxuICAgICBuYW1lOiBjb25udHJhY2stYXR0cnNcbiAgICAgYXR0cmlidXRlczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5pbmRleCA0MzIzM2FmNzViOWQ1Li45ODVmOWMwOGQzZTliIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5AQCAtMjg1LDYgKzI4NSw3IEBAIGVudW0gY3RhdHRyX2ZpbHRlciB7XG4gXHRDVEFfRklMVEVSX1VOU1BFQyxcbiBcdENUQV9GSUxURVJfT1JJR19GTEFHUyxcbiBcdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXG4rXHRDVEFfRklMVEVSX1pPTkUsXG4gXHRfX0NUQV9GSUxURVJfTUFYXG4gfTtcbiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTkxMSw2ICs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0YV9maWx0ZXJfbmxhX3BvbGljeVtDVEFfRklMVEVSX01BWCArIDFdID0ge1xuIFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuK1x0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuQEAgLTkzMCw2ICs5MzEsOSBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcbiBcdFx0ZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xuIFxuK1x0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXG4rXHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTAwNiw2ICsxMDEwLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbHRlcjtcbiBcbitcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4gXHRpZiAoY2RhW0NUQV9aT05FXSkge1xuIFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG5AQCAtMTAyMCw2ICsxMDI1LDEyIEBAIGN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9maWx0ZXI7XG4gXG4rXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xuK1x0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfZmlsdGVyO1xuK1x0fVxuK1xuIFx0aWYgKGZpbHRlci1cdTAwM2VvcmlnX2ZsYWdzKSB7XG4gXHRcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG5pbmRleCAzMWI4MjUwZGRjNTNkLi42M2Y0MTM1NmZlNmQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNcbkBAIC0yMTUsNyArMjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiBNTkxfQ0JfT0s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4rc3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcbitcdFx0XHQgIGJvb2wgdXNlX2N0YV9maWx0ZXIpXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqbmVzdDtcbitcbitcdG1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpO1xuK1xuK1x0aWYgKHVzZV9jdGFfZmlsdGVyKSB7XG4rXHRcdG5lc3QgPSBtbmxfYXR0cl9uZXN0X3N0YXJ0KG5saCwgQ1RBX0ZJTFRFUik7XG4rXHRcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XG4rXHRcdG1ubF9hdHRyX25lc3RfZW5kKG5saCwgbmVzdCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjM1LDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0yNjEsNyArMjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiBcdHJldHVybiByZXBseV9jb3VudGVyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjgxLDcgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0zMDQsNDMgKzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLUZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4te1xuLVx0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XG4tfTtcbi1cbi1GSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdFx0c3RydWN0IG1ubF9zb2NrZXQgKipzb2NrKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZWxmLVx1MDAzZXNvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpO1xuLVx0aWYgKCFzZWxmLVx1MDAzZXNvY2spIHtcbitcdCpzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTtcbitcdGlmICghKnNvY2spIHtcbiBcdFx0cGVycm9yKFwibW5sX3NvY2tldF9vcGVuXCIpO1xuLVx0XHRTS0lQKHJldHVybiwgXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcIik7XG4rXHRcdFNLSVAocmV0dXJuIC0xLCBcImNhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldFwiKTtcbiBcdH1cbiBcbi1cdHJldCA9IG1ubF9zb2NrZXRfYmluZChzZWxmLVx1MDAzZXNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4rXHRyZXQgPSBtbmxfc29ja2V0X2JpbmQoKnNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVQRVJNKVxuLVx0XHRTS0lQKHJldHVybiwgXCJOZWVkcyB0byBiZSBydW4gYXMgcm9vdFwiKTtcbitcdFx0U0tJUChyZXR1cm4gLTEsIFwiTmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcIik7XG4gXHRlbHNlIGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApXG4tXHRcdFNLSVAocmV0dXJuLCBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuK1x0XHRTS0lQKHJldHVybiAtMSxcbitcdFx0ICAgICBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGYwZjBmMGYwLCAweGYxZjFmMWYxLFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMSk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXHUwMDNlc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQgKyAyKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNyxcbiBcdFx0XHRcdFx0IE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTM1OCw5ICszNzEsOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDIwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zNzcsOSArMzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiBcdFx0XHQweDA0MDAwMDAwXG4gXHRcdH1cbiBcdH19O1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cdTAwM2Vzb2NrLCBzcmMsIGRzdCxcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCxcbiBcdFx0XHRcdFx0IFRFU1RfWk9ORV9JRCArIDEpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XG4gXHRcdC5fX3U2X2FkZHIzMiA9IHtcbiBcdFx0XHQweGI4MGQwMTIwLFxuQEAgLTM5Niw5ICs0MDksOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDYwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMik7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTQxNiwxNCArNDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwODAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsXG4gXHRcdFx0XHRcdCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbitGSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdGJvb2wgdXNlX2N0YV9maWx0ZXI7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfem9uZSlcbit7XG4rXHQudXNlX2N0YV9maWx0ZXIgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV9maWx0ZXIpXG4re1xuK1x0LnVzZV9jdGFfZmlsdGVyID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb25udHJhY2tfem9uZV9zZXR1cChfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlc29jaykpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XG4gXHRFWFBFQ1RfR0UocmV0LCAyKTtcbiBcdGlmIChyZXQgXHUwMDNlIDIpXG4gXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lXCIpO1xuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpIHtcbitcdFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIHRydWUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ1RBX0ZJTFRFUl9aT05FXCIpO1xuK1x0XHRBU1NFUlRfR0UocmV0LCAwKTtcbitcdH1cbiB9XG4gXG4gRklYVFVSRV9URUFSRE9XTihjb25udHJhY2tfZHVtcF9mbHVzaClcbkBAIC00MzQsMzkgKzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCxcbitcdFx0XHRcdCAgIHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKVxuIHtcbitcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDEsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMik7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDIsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpXG4ge1xuK1x0Ym9vbCBmaWx0ZXIgPSB2YXJpYW50LVx1MDAzZXVzZV9jdGFfZmlsdGVyO1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAxKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MToxNy40MTkyNTQ0NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5NTk2ODI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm50cmFjayBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gYXNzZXNzIHRoaXMgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBmb3IgcG90ZW50aWFsIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZyb20gdGhlIGluc3RydWN0aW9ucywgdGhpcyBzZWVtcyBsaWtlIHN0cmFpZ2h0Zm9yd2FyZCBrZXJuZWwgUUEgd29yaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZGVmZW5zaXZlIHNlY3VyaXR5IOKAkyBub3RoaW5nIHRvbyByaXNreS4gTXkgcmlzayBhbmFseXNpcyBjb25maXJtcyB0aGlzOiB3ZSdyZSBldmFsdWF0aW5nIGNvZGUgZm9yIGZ1enppbmcgcHVycG9zZXMsIHdoaWNoIGlzIGEgZmFpcmx5IGJlbmlnbiB0YXNrLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBmaWxlczogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbGAsIGBpbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaGAsIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guY2AuIEtub3dpbmcgdGhlIGZpbGVzIGludm9sdmVkIGdpdmVzIG1lIGEgaGFuZGxlIG9uIHRoZSBhcmVhIG9mIHRoZSBrZXJuZWwgYmVpbmcgbW9kaWZpZWQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIG5ldGZpbHRlciBjb25udHJhY2sgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scywgbGlrZWx5IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBtb2RpZmllZCBjb2RlLiBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBmcm9tIGFuIGltcGxlbWVudGF0aW9uIHBvaW50IG9mIHZpZXcuIExldCdzIHNlZSB3aGF0J3MgY2hhbmdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjI4LjUxNTIyNTI4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkwMDpcXHRcXHR1X2ludDMyX3Qgb3JpZ19mbGFncztcXG4gOTAxOlxcdFxcdHVfaW50MzJfdCByZXBseV9mbGFncztcXG4gOTAyOlxcdFxcbiA5MDM6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvcmlnO1xcbiA5MDQ6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSByZXBseTtcXG4gOTA1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcXG4gOTA4OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XFxuIDkwOTpcXHR9O1xcbiA5MTA6XFx0XFxuIDkxMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICsgMV0gPSB7XFxuIDkxMjpcXHRcXHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxcbiA5MTM6XFx0XFx0W0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuIDkxNDpcXHRcXHRbQ1RBX0ZJTFRFUl9aT05FXVxcdFxcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuIDkxNTpcXHR9O1xcbiA5MTY6XFx0XFxuIDkxNzpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gOTE4OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcilcXG4gOTE5OlxcdHtcXG4gOTIwOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW0NUQV9GSUxURVJfTUFYICsgMV07XFxuIDkyMTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0ZJTFRFUl9NQVgsIGF0dHIsIGN0YV9maWx0ZXJfbmxhX3BvbGljeSxcXG4gOTI0OlxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4gOTI1OlxcdFxcdGlmIChyZXQpXFxuIDkyNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5Mjc6XFx0XFxuIDkyODpcXHRcXHRpZiAodGJbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXSlcXG4gOTI5OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyA9IG5sYV9nZXRfdTMyKHRiW0NUQV9GSUxURVJfT1JJR19GTEFHU10pO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRpZiAodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pXFxuIDkzMjpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xcbiA5MzM6XFx0XFxuIDkzNDpcXHRcXHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcXG4gOTM1OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRyZXR1cm4gMDtcXG4gOTM4OlxcdH1cXG4gOTM5OlxcdFxcbiA5NDA6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA5NDE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKTtcXG4gOTQyOlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sXFxuIDk0MzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsXFxuIDk0NDpcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIHR5cGUsIHVfaW50OF90IGwzbnVtLFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSxcXG4gOTQ2OlxcdFxcdFxcdFxcdFxcdFxcdCB1X2ludDMyX3QgZmxhZ3MpO1xcbiA5NDc6XFx0XFxuIDk0ODpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfcGFyc2VfbWFyayhzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgKm1hcmssXFxuIDk0OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbiA5NTA6XFx0e1xcbiA5NTE6XFx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xcbiA5NTI6XFx0XFx0aWYgKGNkYVtDVEFfTUFSS10pIHtcXG4gOTUzOlxcdFxcdFxcdG1hcmstXFx1MDAzZXZhbCA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX01BUktdKSk7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdFxcdGlmIChjZGFbQ1RBX01BUktfTUFTS10pXFxuIDk1NjpcXHRcXHRcXHRcXHRtYXJrLVxcdTAwM2VtYXNrID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfTUFSS19NQVNLXSkpO1xcbiA5NTc6XFx0XFx0XFx0ZWxzZVxcbiA5NTg6XFx0XFx0XFx0XFx0bWFyay1cXHUwMDNlbWFzayA9IDB4ZmZmZmZmZmY7XFxuIDk1OTpcXHRcXHR9IGVsc2UgaWYgKGNkYVtDVEFfTUFSS19NQVNLXSkge1xcbiA5NjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk2MTpcXHRcXHR9XFxuIDk2MjpcXHQjZW5kaWZcXG4gOTYzOlxcdFxcdHJldHVybiAwO1xcbiA5NjQ6XFx0fVxcbiA5NjU6XFx0XFxuIDk2NjpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfcGFyc2Vfc3RhdHVzKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqc3RhdHVzLFxcbiA5Njc6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcXG4gOTY4OlxcdHtcXG4gOTY5OlxcdFxcdGlmIChjZGFbQ1RBX1NUQVRVU10pIHtcXG4gOTcwOlxcdFxcdFxcdHN0YXR1cy1cXHUwMDNldmFsID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfU1RBVFVTXSkpO1xcbiA5NzE6XFx0XFx0XFx0aWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKVxcbiA5NzI6XFx0XFx0XFx0XFx0c3RhdHVzLVxcdTAwM2VtYXNrID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfU1RBVFVTX01BU0tdKSk7XFxuIDk3MzpcXHRcXHRcXHRlbHNlXFxuIDk3NDpcXHRcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZW1hc2sgPSBzdGF0dXMtXFx1MDAzZXZhbDtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0XFx0Lyogc3RhdHVzLVxcdTAwM2V2YWwgPT0gMD8gYWx3YXlzIHRydWUsIGVsc2UgYWx3YXlzIGZhbHNlLiAqL1xcbiA5Nzc6XFx0XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlbWFzayA9PSAwKVxcbiA5Nzg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk3OTpcXHRcXHR9IGVsc2UgaWYgKGNkYVtDVEFfU1RBVFVTX01BU0tdKSB7XFxuIDk4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTgxOlxcdFxcdH1cXG4gOTgyOlxcdFxcbiA5ODM6XFx0XFx0LyogQ1RBX1NUQVRVUyBpcyBOTEFfVTMyLCBpZiB0aGlzIGZpcmVzIFVBUEkgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgKi9cXG4gOTg0OlxcdFxcdEJVSUxEX0JVR19PTihfX0lQU19NQVhfQklUIFxcdTAwM2U9IDMyKTtcXG4gOTg1OlxcdFxcdHJldHVybiAwO1xcbiA5ODY6XFx0fVxcbiA5ODc6XFx0XFxuIDk4ODpcXHRzdGF0aWMgc3RydWN0IGN0bmV0bGlua19maWx0ZXIgKlxcbiA5ODk6XFx0Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcXG4gOTkwOlxcdHtcXG4gOTkxOlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXI7XFxuIDk5MjpcXHRcXHRpbnQgZXJyO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHQjaWZuZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSS1xcbiA5OTU6XFx0XFx0aWYgKGNkYVtDVEFfTUFSS10gfHwgY2RhW0NUQV9NQVJLX01BU0tdKVxcbiA5OTY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbiA5OTc6XFx0I2VuZGlmXFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKCpmaWx0ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MToyOC41MTU1MzM0OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODgxNDA0MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGFuZCBpdHMgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIGlzIGJlaW5nIGFsbG9jYXRlZCBhbmQsIGNydWNpYWxseSwgd2hlcmUgaXQncyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEp1c3Qgc2VlaW5nIHRoZSBhbGxvY2F0aW9uIGlzIG9ubHkgaGFsZiB0aGUgc3RvcnkuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoZSBmaWx0ZXIgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgZG93bnN0cmVhbS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgXCJmaWx0ZXJcIiB2YXJpYWJsZSB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBvcGVyYXRpb25zIGhhcHBlbmluZyB0byBpdC4gV2hhdCBhcmUgdGhlIHJlYWQgYW5kIHdyaXRlIHBhdHRlcm5zPyBJcyB0aGVyZSBhIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IGRlZXAgd2UgY2FuIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTozMy4zOTY5NDEyMDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0XFx0aWYgKGZpbHRlciA9PSBOVUxMKVxcbjEwMDE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdGZpbHRlci1cXHUwMDNlZmFtaWx5ID0gZmFtaWx5O1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXFx1MDAyNmZpbHRlci1cXHUwMDNlbWFyaywgY2RhKTtcXG4xMDA2OlxcdFxcdGlmIChlcnIpXFxuMTAwNzpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdGVyciA9IGN0bmV0bGlua19maWx0ZXJfcGFyc2Vfc3RhdHVzKFxcdTAwMjZmaWx0ZXItXFx1MDAzZXN0YXR1cywgY2RhKTtcXG4xMDEwOlxcdFxcdGlmIChlcnIpXFxuMTAxMTpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAxMjpcXHRcXG4xMDEzOlxcdFxcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXFxuMTAxNDpcXHRcXHRpZiAoY2RhW0NUQV9aT05FXSkge1xcbjEwMTU6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSk7XFxuMTAxNjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDE3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDE4OlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbjEwMTk6XFx0XFx0fVxcbjEwMjA6XFx0XFxuMTAyMTpcXHRcXHRpZiAoIWNkYVtDVEFfRklMVEVSXSlcXG4xMDIyOlxcdFxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTAyMzpcXHRcXG4xMDI0OlxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY2RhW0NUQV9GSUxURVJdLCBmaWx0ZXIpO1xcbjEwMjU6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTAyNjpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAyNzpcXHRcXG4xMDI4OlxcdFxcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXFxuMTAyOTpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xcbjEwMzA6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDMxOlxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDMyOlxcdFxcdH1cXG4xMDMzOlxcdFxcbjEwMzQ6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncykge1xcbjEwMzU6XFx0XFx0XFx0aWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7XFxuMTAzNjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjEwMzc6XFx0XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMzg6XFx0XFx0XFx0fVxcbjEwMzk6XFx0XFxuMTA0MDpcXHRcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGVfZmlsdGVyKGNkYSwgXFx1MDAyNmZpbHRlci1cXHUwMDNlb3JpZyxcXG4xMDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIENUQV9UVVBMRV9PUklHLFxcbjEwNDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VmYW1pbHksXFxuMTA0MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lLFxcbjEwNDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzKTtcXG4xMDQ1OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwNDY6XFx0XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwNDc6XFx0XFx0fVxcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncykge1xcbjEwNTA6XFx0XFx0XFx0aWYgKCFjZGFbQ1RBX1RVUExFX1JFUExZXSkge1xcbjEwNTE6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDUyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDUzOlxcdFxcdFxcdH1cXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJlcGx5LFxcbjEwNTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgQ1RBX1RVUExFX1JFUExZLFxcbjEwNTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VmYW1pbHksXFxuMTA1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lLFxcbjEwNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncyk7XFxuMTA2MDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDYxOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDYyOlxcdFxcdH1cXG4xMDYzOlxcdFxcbjEwNjQ6XFx0XFx0cmV0dXJuIGZpbHRlcjtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0ZXJyX2ZpbHRlcjpcXG4xMDY3OlxcdFxcdGtmcmVlKGZpbHRlcik7XFxuMTA2ODpcXHRcXG4xMDY5OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTA3MDpcXHR9XFxuMTA3MTpcXHRcXG4xMDcyOlxcdHN0YXRpYyBib29sIGN0bmV0bGlua19uZWVkc19maWx0ZXIodTggZmFtaWx5LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKmNkYSlcXG4xMDczOlxcdHtcXG4xMDc0OlxcdFxcdHJldHVybiBmYW1pbHkgfHwgY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX0ZJTFRFUl0gfHwgY2RhW0NUQV9TVEFUVVNdIHx8IGNkYVtDVEFfWk9ORV07XFxuMTA3NTpcXHR9XFxuMTA3NjpcXHRcXG4xMDc3OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4xMDc4OlxcdHtcXG4xMDc5OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhID0gY2ItXFx1MDAzZWRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjMzLjM5NzE5MzI0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTQ4NDA5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGN0bmV0bGlua19maWx0ZXJgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBkZWZpbml0aW9uIG9mIGBjdG5ldGxpbmtfZmlsdGVyYC4gSSByZWNhbGwgaXQgYmVpbmcgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDg5MCwgZ2l2ZSBvciB0YWtlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgbmV0bGluayBmaWx0ZXIgdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nLiBJJ20gYW50aWNpcGF0aW5nIHRoaXMgdG8gaG9sZCB0aGUga2V5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMgYXQgdGhlIE5ldGxpbmsgbGV2ZWwuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgZXNzZW50aWFsIHRvIGdyYXNwIGhvdyB0aGUgcG9saWN5IGlzIGltcGxlbWVudGVkLCBhbnkgbGltaXRzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoZSBtZW1iZXJzIG9mIHRoaXMgc3RydWN0IGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhlIGZpbHRlciBjYXBhYmlsaXRpZXMuIFRpbWUgdG8gZ28gaHVudGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjM1LjMxMjAzNzE1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXG4gODkxOlxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiB7XFxuIDg5MjpcXHRcXHR1MzIgdmFsO1xcbiA4OTM6XFx0XFx0dTMyIG1hc2s7XFxuIDg5NDpcXHR9O1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XFxuIDg5NzpcXHRcXHR1OCBmYW1pbHk7XFxuIDg5ODpcXHRcXHRib29sIHpvbmVfZmlsdGVyO1xcbiA4OTk6XFx0XFxuIDkwMDpcXHRcXHR1X2ludDMyX3Qgb3JpZ19mbGFncztcXG4gOTAxOlxcdFxcdHVfaW50MzJfdCByZXBseV9mbGFncztcXG4gOTAyOlxcdFxcbiA5MDM6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvcmlnO1xcbiA5MDQ6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSByZXBseTtcXG4gOTA1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xcbiA5MDY6XFx0XFxuIDkwNzpcXHRcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcl91MzIgbWFyaztcXG4gOTA4OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBzdGF0dXM7XFxuIDkwOTpcXHR9O1xcbiA5MTA6XFx0XFxuIDkxMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICsgMV0gPSB7XFxuIDkxMjpcXHRcXHRbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxcbiA5MTM6XFx0XFx0W0NUQV9GSUxURVJfUkVQTFlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuIDkxNDpcXHRcXHRbQ1RBX0ZJTFRFUl9aT05FXVxcdFxcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjM1LjMxNDMxNDc4NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDg4Njc3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIGFwcGxpY2F0aW9uIG9mIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSB3aGVyZSBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBpcyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBoZXJlIGlzIGEgZnVsbCBhbmQgY29tcGxldGUgY29tcHJlaGVuc2lvbiBvZiBpdHMgcm9sZSBhbmQgc2NvcGUgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yaywgc28gSSB3YW50IHRvIGtub3cgZXZlcnl3aGVyZSBpdCBjb21lcyBpbnRvIHBsYXkuIEknbGwgbmVlZCB0byBzZWUgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIG5ldGxpbmsgY29udGV4dCwgd2hpY2ggaG9wZWZ1bGx5IHdpbGwgcmV2ZWFsIHRoZSBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgc3RydWN0dXJlIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGluZm9ybWF0aW9uLiBMZXQncyBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTozNy4zNjMxODQ4NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTQ3MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9ODk2PXN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtODk3LVxcdHU4IGZhbWlseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6ODk4OlxcdGJvb2wgem9uZV9maWx0ZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTg5OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTM0LVxcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5MzU6XFx0XFx0ZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODk9Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDE3LVxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAxODpcXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxOS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAyOC1cXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDI5OlxcdGlmIChmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyIFxcdTAwMjZcXHUwMDI2ICFjZGFbQ1RBX1pPTkVdKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMzAtXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMTYzPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTE3OTpcXHRpZiAoZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgwLVxcdCAgICAhbmZfY3Rfem9uZV9lcXVhbF9hbnkoY3QsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXpvbmUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTozNy40NTA3MzgyMzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxOTA2Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGN0bmV0bGlua2AgZmlsdGVyIGFuZCB0aGUgZHVtcC9mbHVzaCBvcGVyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlsdGVycyB3b3JrIGF0IHRoZSBuZXRsaW5rIGxldmVsLlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCoqXG5cblJpZ2h0LCBzbyB0aGF0IHdvdWxkIHB1dCB0aGUgcmVsZXZhbnQgY29kZSBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxMDcwIHRvIDEyNTAuIFRoYXQgcmFuZ2UgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSBoYW5kbGVycyBhbmQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaG93IHRoZSBkYXRhIGlzIGJlaW5nIGNvbnN0cnVjdGVkLCB0cmFuc21pdHRlZCB2aWEgbmV0bGluaywgYW5kIHByb2Nlc3NlZCBvbiB0aGUgb3RoZXIgZW5kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgdGhlcmUuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgcmV2ZWFsIHRoZSBtZWNoYW5pc21zIGZvciBib3RoIGZpbHRlcmluZyAqYW5kKiB0aGUgZHVtcC9mbHVzaCBwcm9jZWR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjM5LjM2OTgwNDY5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDcwOlxcdH1cXG4xMDcxOlxcdFxcbjEwNzI6XFx0c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbjEwNzM6XFx0e1xcbjEwNzQ6XFx0XFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcXG4xMDc1OlxcdH1cXG4xMDc2OlxcdFxcbjEwNzc6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjEwNzg6XFx0e1xcbjEwNzk6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4xMDgwOlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIgPSBOVUxMO1xcbjEwODE6XFx0XFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuMTA4MjpcXHRcXHR1OCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbjEwODM6XFx0XFxuMTA4NDpcXHRcXHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcXG4xMDg1OlxcdFxcdFxcdGZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhLCBmYW1pbHkpO1xcbjEwODY6XFx0XFx0XFx0aWYgKElTX0VSUihmaWx0ZXIpKVxcbjEwODc6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZmlsdGVyKTtcXG4xMDg4OlxcdFxcdH1cXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBmaWx0ZXI7XFxuMTA5MTpcXHRcXHRyZXR1cm4gMDtcXG4xMDkyOlxcdH1cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG4xMDk1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxcbjEwOTY6XFx0XFx0XFx0XFx0XFx0XFx0dV9pbnQzMl90IGZsYWdzLCBpbnQgZmFtaWx5KVxcbjEwOTc6XFx0e1xcbjEwOTg6XFx0XFx0c3dpdGNoIChmYW1pbHkpIHtcXG4xMDk5OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbjExMDA6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTAxOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmlwKVxcbjExMDI6XFx0XFx0XFx0XFx0cmV0dXJuICAwO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDU6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaXApXFxuMTEwNjpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTEwNzpcXHRcXHRcXHRicmVhaztcXG4xMTA4OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY2OlxcbjExMDk6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTEwOlxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudTMuaW42LFxcbjExMTE6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaW42KSlcXG4xMTEyOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMTM6XFx0XFxuMTExNDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMTU6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfY21wKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuMTExNjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3RfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYpKVxcbjExMTc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTExODpcXHRcXHRcXHRicmVhaztcXG4xMTE5OlxcdFxcdH1cXG4xMTIwOlxcdFxcbjExMjE6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fTlVNKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTIyOlxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtKVxcbjExMjM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdHN3aXRjaCAoY3RfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSkge1xcbjExMjY6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4xMTI3OlxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuMTEyODpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19TUkNfUE9SVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyOTpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUudGNwLnBvcnQpXFxuMTEzMDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTMxOlxcdFxcbjExMzI6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fRFNUX1BPUlQpKSBcXHUwMDI2XFx1MDAyNlxcbjExMzM6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51LnRjcC5wb3J0KVxcbjExMzQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEzNTpcXHRcXHRcXHRicmVhaztcXG4xMTM2OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QOlxcbjExMzc6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9UWVBFKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTM4OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAudHlwZSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC50eXBlKVxcbjExMzk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTE0MDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0NPREUpKSBcXHUwMDI2XFx1MDAyNlxcbjExNDE6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLmNvZGUpXFxuMTE0MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTQzOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfSUQpKSBcXHUwMDI2XFx1MDAyNlxcbjExNDQ6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZClcXG4xMTQ1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExNDY6XFx0XFx0XFx0YnJlYWs7XFxuMTE0NzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxcbjExNDg6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUFY2X1RZUEUpKSBcXHUwMDI2XFx1MDAyNlxcbjExNDk6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC50eXBlICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUpXFxuMTE1MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTUxOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBWNl9DT0RFKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTUyOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAuY29kZSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC5jb2RlKVxcbjExNTM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTE1NDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QVjZfSUQpKSBcXHUwMDI2XFx1MDAyNlxcbjExNTU6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUuaWNtcC5pZClcXG4xMTU2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExNTc6XFx0XFx0XFx0YnJlYWs7XFxuMTE1ODpcXHRcXHR9XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdHJldHVybiAxO1xcbjExNjE6XFx0fVxcbjExNjI6XFx0XFxuMTE2MzpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbjExNjQ6XFx0e1xcbjExNjU6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlciA9IGRhdGE7XFxuMTE2NjpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4xMTY3OlxcdFxcdHUzMiBzdGF0dXM7XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdGlmIChmaWx0ZXIgPT0gTlVMTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6MzkuMzY5OTYwNjc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NTk5NzM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLY29uZmlnIE9wdGlvbnMgZm9yIG5mX2Nvbm50cmFja19uZXRsaW5rLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIHRoZSBjb25maWd1cmF0aW9uIG9mIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGEgcGFydGljdWxhciBmaWxlIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IGNsdWVzIHRoYXQgTWFrZWZpbGUgaG9sZHMuIEknbSBleHBlY3RpbmcgaXQgdG8gcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvZGUgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEknbSBob3BpbmcgaXQncyBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGF0IHRoZSBNYWtlZmlsZSBnaXZlcyBtZSBhIGNsZWFyIGluZGljYXRpb24uIE5vIHRpbWUgdG8gd2FzdGUsIGxldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQxLjAyOTkzODYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI5NDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfbmV0bGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQxLjA4NDIzOTQ1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDgwNDkwOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGF0dXMgb2YgTmV0ZmlsdGVyJ3MgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgYmVpbmcgY29uZmlndXJlZC4gRmlyc3QsIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldGZpbHRlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgQ09ORklHX05GX0NUX05FVExJTktgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgcmVnYXJkaW5nIHdoZXRoZXIgTmV0bGluayBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEtub3dpbmcgdGhhdCBpcyB0aGUgaW5pdGlhbCBwaWVjZSBvZiBkYXRhIEkgcmVxdWlyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0Mi41NjQ3MzI3NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTc1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQyLjY2MzkxNjg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY2ODQwMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgLSBMaW5lIDM2NiBhbmQgU3Vycm91bmRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGxpbmVzIGFyb3VuZCAzNjYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQncyBiZWluZyBjb25maWd1cmVkIHRoZXJlLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHRoZSBibG9jayBvZiBvcHRpb25zLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvciByZWxhdGlvbnNoaXBzIGl0IGhhcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBiZSBkZWZpbmluZyBvciBjb25maWd1cmluZyBzb21lIGFzcGVjdCBvZiBuZXRmaWx0ZXIsIGxpa2VseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBtb2R1bGUuIEknbGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgbGlrZSBcImNvbmZpZyxcIiBcInRyaXN0YXRlLFwiIFwiYm9vbCxcIiBcImRlcGVuZHMgb24sXCIgXCJzZWxlY3QsXCIgYW5kIFwiaGVscFwiIHRvIGdldCBhIGZlZWwgZm9yIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZ1bmN0aW9ucyBhbmQgaW50ZXJhY3RzIHdpdGhpbiB0aGUgb3ZlcmFsbCBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIG1vcmUgY29tcGxleCBvbmUuIEVpdGhlciB3YXksIG15IGFpbSBpcyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjQ0LjgzMDc2MDY2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2MDpcXHRcXHQgIG9uIGhvdyByZXN0cmljdGl2ZSB5b3VyIHJ1bGVzZXQgaXMuXFxuIDM2MTpcXHRcXHQgIElmIHlvdSBhcmUgdXNpbmcgYSB0ZnRwIGNsaWVudCBiZWhpbmQgLWogU05BVCBvciAtaiBNQVNRVUVSQURJTkdcXG4gMzYyOlxcdFxcdCAgeW91IHdpbGwgbmVlZCB0aGlzLlxcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzNjU6XFx0XFxuIDM2NjpcXHRjb25maWcgTkZfQ1RfTkVUTElOS1xcbiAzNjc6XFx0XFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuIDM2ODpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzY5OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAzNzA6XFx0XFx0aGVscFxcbiAzNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4gMzc0OlxcdFxcdHRyaXN0YXRlICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluaydcXG4gMzc1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMzc3OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG4gMzc4OlxcdFxcdGhlbHBcXG4gMzc5OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcXG4gMzgwOlxcdFxcdCAgZmluZS1ncmFpbiB0dW5pbmcuIFRoaXMgYWxsb3dzIHlvdSB0byBhdHRhY2ggc3BlY2lmaWMgdGltZW91dFxcbiAzODE6XFx0XFx0ICBwb2xpY2llcyB0byBmbG93cywgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2xvYmFsIHRpbWVvdXQgcG9saWN5LlxcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMzg0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0NC44MzA5OTQyODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2NzU3OTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBORl9DVF9ORVRMSU5LYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgb2YgYE5GX0NUX05FVExJTktgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMsIGxpa2VseSBsaWtlIGBORl9DT05OVFJBQ0tgIG9yIHRoZSBicm9hZGVyIGBORVRGSUxURVJgIHN1YnN5c3RlbSwgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcy5cblxuVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25zdWx0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgdGhlIGBtZW51Y29uZmlnIE5GX0NPTk5UUkFDS2AgZW50cnkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIG5lY2Vzc2FyeSBjb250ZXh0IGFuZCBsaW5rYWdlIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcywgZW5hYmxpbmcgbWUgdG8gbWFwIGRlcGVuZGVuY2llcywgdW5kZXJzdGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBzZWUgaG93IGBORl9DVF9ORVRMSU5LYCBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6NDYuNzk4NTc2ODE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAwOTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTEtY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6NDYuODY2NTkxNzQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjQ4MTA3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgY3RuZXRsaW5rIEZpbHRlciBBbGxvY2F0aW9uIGFuZCBQYXJzaW5nKipcblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCBhbmQgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSB0aGVpciBjYWxsIGhpZXJhcmNoeSBhbmQgaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50cyB3aXRoaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgZmlsdGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYW5kIHRoYXQgbWVhbnMgc2VlaW5nICp3aG8qIGNhbGxzIHRoZW0uIEZpcnN0IHN0ZXAgaXMgdG8gdXNlIHNvbWUgc2VhcmNoIHRvb2xzIHRvIGZpbmQgd2hlcmUgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGlzIGludm9rZWQgd2l0aGluIGBuZl9jb25udHJhY2tfbmV0bGluay5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmlsdGVyIGFsbG9jYXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0OS4xOTE0MDUyNjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODA4NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19hbGxvY19maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODg9c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6OTg5OmN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTk5MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTA3Nz1zdGF0aWMgaW50IGN0bmV0bGlua19zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4NC1cXHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTA4NTpcXHRcXHRmaWx0ZXIgPSBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNkYSwgZmFtaWx5KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cXHRcXHRpZiAoSVNfRVJSKGZpbHRlcikpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5OT1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MTAtXFx0aWYgKGN0bmV0bGlua19uZWVkc19maWx0ZXIoZmFtaWx5LCBjZGEpKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2MTE6XFx0XFx0ZmlsdGVyID0gY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjZGEsIGZhbWlseSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MTItXFx0XFx0aWYgKElTX0VSUihmaWx0ZXIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo0OS4yNjgyMTg2NDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxNjk0MzgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5ldGxpbmsgQ29ubnRyYWNrIEludGVyZmFjZSoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIG5ldGxpbmsgY29ubnRyYWNrIGZ1bmN0aW9ucy4uLiBJIHNlZSBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcmAsIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCwgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgLCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgLCBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRocy4gTGV0IG1lIGNoZWNrOiBgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcmAsIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCwgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgLCBgY3RuZXRsaW5rX3N0YXJ0YCwgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIFRoZW4gSSBzaG91bGQgZm9jdXMgb24gYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYCwgYW5kIHByb2JhYmx5IG90aGVyIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBuZXRsaW5rIGludGVyZmFjZSBtYW5hZ2VzIGNvbm50cmFjayBlbnRyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAyNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo1MS43ODUxNjUyNTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNDA2OTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5ND1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9pdGVyYXRlKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTk4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNTk5OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MDAtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTYyND1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY0Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY0ODpcXHRcXHRyZXR1cm4gY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhpbmZvLVxcdTAwM2VuZXQsIGNkYSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY0OS1cXHRcXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDE6NTIuNTk5MjQxMDUxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTI2MTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGV4YWN0bHkgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgY29ubnRyYWNrIG5ldGxpbmsgaW50ZXJmYWNlIHN0YXJ0cyB1cC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBmdW5jdGlvbiwgYXMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgeW91IGZpbmQgdGhlIGNvcmUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXNlci1zcGFjZSB0b29scyBmb3IgcmV0cmlldmluZyBjb25udHJhY2sgaW5mb3JtYXRpb24uIEJ1dCB0aGF0J3MgYSBkdW1wIGZ1bmN0aW9uLCBub3QgbmVjZXNzYXJpbHkgdGhlIGluaXRpYWxpemF0aW9uIGl0c2VsZiwgYWx0aG91Z2ggaXQgbWlnaHQgcHJvdmlkZSBjbHVlcyB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHJlZmVyZW5jZXMgdG8gYGN0bmV0bGlua19zdGFydGAgYXMgd2VsbC4gVGhhdCBmdW5jdGlvbidzIG5hbWUgc3VnZ2VzdHMgaXQncyB0aGUgcmlnaHQgcGxhY2UsIHNvIEknbGwgcHJpb3JpdGl6ZSB0aG9zZSBjYWxscy4gSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIG5ldGxpbmsgaW50ZXJmYWNlIGdldHMgcmVnaXN0ZXJlZCBhbmQgYWN0aXZhdGVkLCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZnJvbSB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNvbm50cmFjayBzdGF0ZSBtYWNoaW5lJ3MgaW5pdGlhbCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo1NS4wMTE4NTcyMjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTM1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNzI9c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwNzYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwNzc6c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDc4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjkwLVxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNjkxOlxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5Mi1cXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MTo1NS4wNzM5OTc4MTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ4MjI2ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBjdG5ldGxpbmtgIHN0dWZmLCBzcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJlYWxseSBsb29rIGF0IGBjdG5ldGxpbmtfZHVtcF90YWJsZWAgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgZm9jdXMgb24gd2hhdCBgY3RuZXRsaW5rX2R1bXBfdGFibGVgIGRvZXMgZXhhY3RseS4gVGhhdCdzIHRoZSBjb3JlIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM0MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjU2LjU1NjI2ODYyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MTI2NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19kdW1wX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTIyMT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEyMjI6Y3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMjIzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjc3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjkxLVxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY5MjpcXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjkzLVxcdFxcdFxcdC5kb25lID0gY3RuZXRsaW5rX2RvbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQxOjU2LjY2MzM5OTU4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDY1NDE1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb25udHJhY2sgTmV0bGluayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYENUQV9GSUxURVJfWk9ORWAgYXR0cmlidXRlIG5lc3RlZCB3aXRoaW4gYENUQV9GSUxURVJgIGZvciBjb25udHJhY2sgZmlsdGVyaW5nLiBMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQ6XG5cbjEuICAqKkF0dHJpYnV0ZSBBZGRpdGlvbjoqKiBgQ1RBX0ZJTFRFUl9aT05FYCBnZXRzIGFkZGVkIHRvIGBjdGFfZmlsdGVyX25sYV9wb2xpY3lgIGFzIGEgZmxhZyAoYE5MQV9GTEFHYCkuIFdoZW4gcGFyc2luZywgYGN0bmV0bGlua19wYXJzZV9maWx0ZXIoKWAgbm93IGNoZWNrcyBmb3IgdGhpcyBmbGFnIGFuZCBzZXRzIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO2AgaWYgaXQncyBwcmVzZW50LiBJbiBhbGxvY2F0aW9uIHdpdGggYGN0bmV0bGlua19hbGxvY19maWx0ZXIoKWAsIHRoZXJlJ3MgYSBjcnVjaWFsIGNoZWNrOiBpZiBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBpcyB0cnVlIChtZWFuaW5nIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBgQ1RBX1pPTkVgIHdhcyBzZXQpLCBidXQgdGhlIHRvcC1sZXZlbCBgQ1RBX1pPTkVgIGlzICpub3QqIHByZXNlbnQgKGAhY2RhW0NUQV9aT05FXWApLCBpdCBlcnJvcnMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGtleS4gVGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgb24gaXRzIG93biBjYW4gdHJpZ2dlciBhbiBlcnJvci4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgIHdvdWxkIGJlIHNldCB0cnVlIGlmIHRoZSB0b3AtbGV2ZWwgYENUQV9aT05FYCB3YXMgcHJlc2VudCwgbm93IGlmIGEgdXNlciBzZXRzIHRoZSBgQ1RBX0ZJTFRFUl9aT05FYCBpdCB3aWxsIGJlIHRydWUsIGJ1dCBpdCBmYWlscyBpZiB0aGVyZSBpc24ndCBhIGNvcnJlc3BvbmRpbmcgYENUQV9aT05FYCBvbiB0aGUgbWFpbiBtZXNzYWdlLlxuXG4yLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFVzZXIgc3BhY2UsIGJvdGggdW5wcml2aWxlZ2VkIGFuZCBwcml2aWxlZ2VkIChvciB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHdpdGggbmV0bGluay9uZXRmaWx0ZXIgYWNjZXNzKSwgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBUaGUgTmV0bGluayBtZXNzYWdlIHR5cGVzIGFyZSBgTkZOTF9TVUJTWVNfQ1RORVRMSU5LYCwgYElQQ1ROTF9NU0dfQ1RfR0VUYCwgYW5kIGBJUENUTkxfTVNHX0NUX0RFTEVURWAsIGFsbCBoYW5kbGVkIG92ZXIgdGhlIGBORVRMSU5LX05FVEZJTFRFUmAgc29ja2V0LCB1c2luZyBgQ1RBX0ZJTFRFUmAgYW5kIGBDVEFfWk9ORWAuIFRoaXMgaXMgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LCB0b3VjaGluZyB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcy4gUUVNVS9zeXprYWxsZXIgc2hvdWxkIGJlIHBlcmZlY3RseSBmaW5lIGZvciB0ZXN0aW5nLlxuXG4zLiAgKipXb3J0aEZ1enppbmc9dHJ1ZT86KiogQWJzb2x1dGVseSEgVGhlIHJlYWNoYWJpbGl0eSwgTmV0bGluayBtZXNzYWdlIGhhbmRsaW5nLCBhbmQgYXR0cmlidXRlIHZhbGlkYXRpb24gd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUgbWFrZSB0aGlzIHByaW1lIHJlYWwgZXN0YXRlIGZvciBmdXp6aW5nLlxuXG40LiAgKipGb2N1cyBTeW1ib2xzOioqIFRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBhcmU6XG5cbiAgICAqICAgYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgXG4gICAgKiAgIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYFxuICAgICogICBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGBcbiAgICAqICAgYGN0bmV0bGlua19zdGFydGBcbiAgICAqICAgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgXG4gICAgKiAgIGBjdG5ldGxpbmtfZHVtcF90YWJsZWBcbiAgICAqICAgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYFxuICAgICogICBgY3RuZXRsaW5rX2dldF9jb25udHJhY2tgXG5cbiAgICBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBzdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgLmNgIGZpbGUgY2FuIGJlIHZpc2libGUgaW4ga2FsbHN5bXMgaW4gbW9kZXJuIGtlcm5lbHMsIHBhcnRpY3VsYXJseSB3aXRoIEtBU0FOL0tDT1YuIExldCdzIG1ha2Ugc3VyZSB0aGVzZSBtYXRjaCB0aGUgb25lcyBhdmFpbGFibGUgaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLlxuXG41LiAgKipFbmFibGUgQ29uZmlndXJhdGlvbnM6KiogVGhlIGZvbGxvd2luZyBrZXJuZWwgY29uZmlncyBhcmUgZXNzZW50aWFsOlxuXG4gICAgKiAgIGBORl9DT05OVFJBQ0tgXG4gICAgKiAgIGBORl9DVF9ORVRMSU5LYFxuICAgICogICBgTkVURklMVEVSX05FVExJTktgIChzZWxlY3RlZCBieSBgTkZfQ1RfTkVUTElOS2AsIGJ1dCBnb29kIHRvIGluY2x1ZGUpXG4gICAgKiAgIGBORVRGSUxURVJgXG5cbiAgICBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIGNvbmZpcm1zOiBgTkZfQ1RfTkVUTElOS2AgZGVwZW5kcyBvbiBgTkZfQ09OTlRSQUNLYCBhbmQgc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLCBhbmQgYE5GX0NPTk5UUkFDS2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYC4gQWxsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyLlxuXG5FdmVyeXRoaW5nIGxvb2tzIGNvcnJlY3QuIEkgY2FuIG5vdyB2ZXJpZnkgdGhlIHJlc3VsdHMgYXJlIGFjY3VyYXRlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzM4LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MDQuMTI4ODE4MTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTA5ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfcGFyc2VfZmlsdGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfYWxsb2NfZmlsdGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kZWxfY29ubnRyYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBDVEFfRklMVEVSX1pPTkUgYXR0cmlidXRlIHN1cHBvcnQgdG8gdGhlIGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZyBpbnRlcmZhY2UsIHVwZGF0aW5nIG5ldGxpbmsgcG9saWN5IGFuZCBwYXJzaW5nIGxvZ2ljIGluIG5mX2Nvbm50cmFja19uZXRsaW5rLmMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgTkVUTElOS19ORVRGSUxURVIgY29ubnRyYWNrIGR1bXAgYW5kIGZsdXNoIHJlcXVlc3RzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0bmV0bGlua19wYXJzZV9maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19maWx0ZXJcIixcbiAgICBcImN0bmV0bGlua19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImN0bmV0bGlua19mbHVzaF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19kdW1wX3RhYmxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9jb25udHJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIENUQV9GSUxURVJfWk9ORSBhdHRyaWJ1dGUgc3VwcG9ydCB0byB0aGUgY29ubnRyYWNrIG5ldGxpbmsgZmlsdGVyaW5nIGludGVyZmFjZSwgdXBkYXRpbmcgbmV0bGluayBwb2xpY3kgYW5kIHBhcnNpbmcgbG9naWMgaW4gbmZfY29ubnRyYWNrX25ldGxpbmsuYy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBORVRMSU5LX05FVEZJTFRFUiBjb25udHJhY2sgZHVtcCBhbmQgZmx1c2ggcmVxdWVzdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjA0LjI2NzczNDE2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NTgyODU0MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjowNC4yNjgyMDY4NzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODQ1NzgwNjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDVEFfRklMVEVSX1pPTkUsIGFsbG93aW5nIGNvbm50cmFjayBkdW1wcyBhbmQgZmx1c2hlcyB0byBmaWx0ZXIgZW50cmllcyBieSB6b25lLiBcXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5OlxcbjEuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLlxcbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cXG4zLiBab25lIHBhcnNpbmcgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZSBjb21wbGV0ZWx5IHZpYSBgbmZfY3Rfem9uZV9pbml0KClgLlxcbjQuIFN0cmljdCB2YWxpZGF0aW9uIGVuc3VyZXMgYENUQV9aT05FYCBtdXN0IGJlIHByZXNlbnQgaWYgYHpvbmVfZmlsdGVyYCBpcyBzZXQuXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYWNlOTg1ZjJmZDI1OGE2ZTA5ODEzZjVhNDRiNTNlMjUxZDk0YzNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTo0MToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuaW5kZXggYjFlYjEwMmFiODQzMi4uY2ZjMTEzYmEzNDAyOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9jb25udHJhY2sueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2Nvbm50cmFjay55YW1sXG5AQCAtMzcxLDYgKzM3MSwxMSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IHJlcGx5LWZsYWdzXG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGRvYzogYml0bWFzayBvZiB0dXBsZSBmaWVsZHMgdG8gZmlsdGVyIG9uLCByZXBseSBkaXJlY3Rpb25cbisgICAgICAtXG4rICAgICAgICBuYW1lOiB6b25lXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgICBkb2M6IGZpbHRlciBvbiBjb25udHJhY2sgem9uZSBpZDsgcmVxdWlyZXMgdGhlIHRvcC1sZXZlbCB6b25lXG4rICAgICAgICAgIChgYENUQV9aT05FYGApIGF0dHJpYnV0ZVxuICAgLVxuICAgICBuYW1lOiBjb25udHJhY2stYXR0cnNcbiAgICAgYXR0cmlidXRlczpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5pbmRleCA0MzIzM2FmNzViOWQ1Li45ODVmOWMwOGQzZTliIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oXG5AQCAtMjg1LDYgKzI4NSw3IEBAIGVudW0gY3RhdHRyX2ZpbHRlciB7XG4gXHRDVEFfRklMVEVSX1VOU1BFQyxcbiBcdENUQV9GSUxURVJfT1JJR19GTEFHUyxcbiBcdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXG4rXHRDVEFfRklMVEVSX1pPTkUsXG4gXHRfX0NUQV9GSUxURVJfTUFYXG4gfTtcbiAjZGVmaW5lIENUQV9GSUxURVJfTUFYIChfX0NUQV9GSUxURVJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDliNGUyOTU1N2VjMzMuLmZmYzI5YTQwNzc0OWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTkxMSw2ICs5MTEsNyBAQCBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0YV9maWx0ZXJfbmxhX3BvbGljeVtDVEFfRklMVEVSX01BWCArIDFdID0ge1xuIFx0W0NUQV9GSUxURVJfT1JJR19GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXG4gXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxuK1x0W0NUQV9GSUxURVJfWk9ORV1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuQEAgLTkzMCw2ICs5MzEsOSBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcbiBcdFx0ZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU10pO1xuIFxuK1x0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXG4rXHRcdGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTAwNiw2ICsxMDEwLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbHRlcjtcbiBcbitcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXG4gXHRpZiAoY2RhW0NUQV9aT05FXSkge1xuIFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG5AQCAtMTAyMCw2ICsxMDI1LDEyIEBAIGN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9maWx0ZXI7XG4gXG4rXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xuK1x0aWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBlcnJfZmlsdGVyO1xuK1x0fVxuK1xuIFx0aWYgKGZpbHRlci1cdTAwM2VvcmlnX2ZsYWdzKSB7XG4gXHRcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG5pbmRleCAzMWI4MjUwZGRjNTNkLi42M2Y0MTM1NmZlNmQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmNcbkBAIC0yMTUsNyArMjE1LDIyIEBAIHN0YXRpYyBpbnQgY291bnRfZW50cmllcyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiBNTkxfQ0JfT0s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4rc3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcbitcdFx0XHQgIGJvb2wgdXNlX2N0YV9maWx0ZXIpXG4re1xuK1x0c3RydWN0IG5sYXR0ciAqbmVzdDtcbitcbitcdG1ubF9hdHRyX3B1dF91MTYobmxoLCBDVEFfWk9ORSwgaHRvbnMoem9uZSkpO1xuK1xuK1x0aWYgKHVzZV9jdGFfZmlsdGVyKSB7XG4rXHRcdG5lc3QgPSBtbmxfYXR0cl9uZXN0X3N0YXJ0KG5saCwgQ1RBX0ZJTFRFUik7XG4rXHRcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XG4rXHRcdG1ubF9hdHRyX25lc3RfZW5kKG5saCwgbmVzdCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjM1LDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2NvdW50X3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0yNjEsNyArMjc2LDggQEAgc3RhdGljIGludCBjb25udHJhY2tfY291bnRfem9uZShzdHJ1Y3QgbW5sX3NvY2tldCAqc29jaywgdWludDE2X3Qgem9uZSlcbiBcdHJldHVybiByZXBseV9jb3VudGVyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUsXG4rXHRcdFx0XHRib29sIHVzZV9jdGFfZmlsdGVyKVxuIHtcbiBcdGNoYXIgYnVmW01OTF9TT0NLRVRfQlVGRkVSX1NJWkVdO1xuIFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG5AQCAtMjgxLDcgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnRyYWNrX2ZsdXNoX3pvbmUoc3RydWN0IG1ubF9zb2NrZXQgKnNvY2ssIHVpbnQxNl90IHpvbmUpXG4gXHRuZmgtXHUwMDNldmVyc2lvbiA9IE5GTkVUTElOS19WMDtcbiBcdG5maC1cdTAwM2VyZXNfaWQgPSAwO1xuIFxuLVx0bW5sX2F0dHJfcHV0X3UxNihubGgsIENUQV9aT05FLCBodG9ucyh6b25lKSk7XG4rXHRwdXRfem9uZV9hdHRyKG5saCwgem9uZSwgdXNlX2N0YV9maWx0ZXIpO1xuIFxuIFx0cmV0ID0gbW5sX3NvY2tldF9zZW5kdG8oc29jaywgbmxoLCBubGgtXHUwMDNlbmxtc2dfbGVuKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbkBAIC0zMDQsNDMgKzMyMCw0MCBAQCBzdGF0aWMgaW50IGNvbm50cmFja19mbHVzaF96b25lKHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrLCB1aW50MTZfdCB6b25lKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLUZJWFRVUkUoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4te1xuLVx0c3RydWN0IG1ubF9zb2NrZXQgKnNvY2s7XG4tfTtcbi1cbi1GSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3N0YXRpYyBpbnQgY29ubnRyYWNrX3pvbmVfc2V0dXAoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdFx0c3RydWN0IG1ubF9zb2NrZXQgKipzb2NrKVxuIHtcbiBcdHN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZWxmLVx1MDAzZXNvY2sgPSBtbmxfc29ja2V0X29wZW4oTkVUTElOS19ORVRGSUxURVIpO1xuLVx0aWYgKCFzZWxmLVx1MDAzZXNvY2spIHtcbitcdCpzb2NrID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfTkVURklMVEVSKTtcbitcdGlmICghKnNvY2spIHtcbiBcdFx0cGVycm9yKFwibW5sX3NvY2tldF9vcGVuXCIpO1xuLVx0XHRTS0lQKHJldHVybiwgXCJjYW5ub3Qgb3BlbiBuZXRsaW5rX25ldGZpbHRlciBzb2NrZXRcIik7XG4rXHRcdFNLSVAocmV0dXJuIC0xLCBcImNhbm5vdCBvcGVuIG5ldGxpbmtfbmV0ZmlsdGVyIHNvY2tldFwiKTtcbiBcdH1cbiBcbi1cdHJldCA9IG1ubF9zb2NrZXRfYmluZChzZWxmLVx1MDAzZXNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4rXHRyZXQgPSBtbmxfc29ja2V0X2JpbmQoKnNvY2ssIDAsIE1OTF9TT0NLRVRfQVVUT1BJRCk7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKCpzb2NrLCBURVNUX1pPTkVfSUQsIGZhbHNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVQRVJNKVxuLVx0XHRTS0lQKHJldHVybiwgXCJOZWVkcyB0byBiZSBydW4gYXMgcm9vdFwiKTtcbitcdFx0U0tJUChyZXR1cm4gLTEsIFwiTmVlZHMgdG8gYmUgcnVuIGFzIHJvb3RcIik7XG4gXHRlbHNlIGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApXG4tXHRcdFNLSVAocmV0dXJuLCBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuK1x0XHRTS0lQKHJldHVybiAtMSxcbitcdFx0ICAgICBcIktlcm5lbCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgY29ubnRyYWNrIHpvbmVzXCIpO1xuIFxuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGYwZjBmMGYwLCAweGYxZjFmMWYxLFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjBmMGYwZjAsIDB4ZjFmMWYxZjEsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NChzZWxmLVx1MDAzZXNvY2ssIDB4ZjJmMmYyZjIsIDB4ZjNmM2YzZjMsXG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KCpzb2NrLCAweGYyZjJmMmYyLCAweGYzZjNmM2YzLFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMSk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y0KHNlbGYtXHUwMDNlc29jaywgMHhmNGY0ZjRmNCwgMHhmNWY1ZjVmNSxcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoKnNvY2ssIDB4ZjRmNGY0ZjQsIDB4ZjVmNWY1ZjUsXG4gXHRcdFx0XHRcdCBURVNUX1pPTkVfSUQgKyAyKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjQoc2VsZi1cdTAwM2Vzb2NrLCAweGY2ZjZmNmY2LCAweGY3ZjdmN2Y3LFxuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NCgqc29jaywgMHhmNmY2ZjZmNiwgMHhmN2Y3ZjdmNyxcbiBcdFx0XHRcdFx0IE5GX0NUX0RFRkFVTFRfWk9ORV9JRCk7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTM1OCw5ICszNzEsOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDIwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEKTtcbi1cdEVYUEVDVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4gXHRzcmMgPSAoc3RydWN0IGluNl9hZGRyKSB7e1xuIFx0XHQuX191Nl9hZGRyMzIgPSB7XG4gXHRcdFx0MHhiODBkMDEyMCxcbkBAIC0zNzcsOSArMzkwLDkgQEAgRklYVFVSRV9TRVRVUChjb25udHJhY2tfZHVtcF9mbHVzaClcbiBcdFx0XHQweDA0MDAwMDAwXG4gXHRcdH1cbiBcdH19O1xuLVx0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoc2VsZi1cdTAwM2Vzb2NrLCBzcmMsIGRzdCxcbitcdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KCpzb2NrLCBzcmMsIGRzdCxcbiBcdFx0XHRcdFx0IFRFU1RfWk9ORV9JRCArIDEpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcdHNyYyA9IChzdHJ1Y3QgaW42X2FkZHIpIHt7XG4gXHRcdC5fX3U2X2FkZHIzMiA9IHtcbiBcdFx0XHQweGI4MGQwMTIwLFxuQEAgLTM5Niw5ICs0MDksOSBAQCBGSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuIFx0XHRcdDB4MDYwMDAwMDBcbiBcdFx0fVxuIFx0fX07XG4tXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92NihzZWxmLVx1MDAzZXNvY2ssIHNyYywgZHN0LFxuK1x0cmV0ID0gY29ubnRyYWNrX2RhdGFfZ2VuZXJhdGVfdjYoKnNvY2ssIHNyYywgZHN0LFxuIFx0XHRcdFx0XHQgVEVTVF9aT05FX0lEICsgMik7XG4tXHRFWFBFQ1RfRVEocmV0LCAwKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0c3JjID0gKHN0cnVjdCBpbjZfYWRkcikge3tcbiBcdFx0Ll9fdTZfYWRkcjMyID0ge1xuQEAgLTQxNiwxNCArNDI5LDUxIEBAIEZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4gXHRcdFx0MHgwODAwMDAwMFxuIFx0XHR9XG4gXHR9fTtcbi1cdHJldCA9IGNvbm50cmFja19kYXRhX2dlbmVyYXRlX3Y2KHNlbGYtXHUwMDNlc29jaywgc3JjLCBkc3QsXG4rXHRyZXQgPSBjb25udHJhY2tfZGF0YV9nZW5lcmF0ZV92Nigqc29jaywgc3JjLCBkc3QsXG4gXHRcdFx0XHRcdCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuLVx0RVhQRUNUX0VRKHJldCwgMCk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEKTtcbitcdHJldHVybiAwO1xuK31cbitcbitGSVhUVVJFKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdHN0cnVjdCBtbmxfc29ja2V0ICpzb2NrO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKGNvbm50cmFja19kdW1wX2ZsdXNoKVxuK3tcbitcdGJvb2wgdXNlX2N0YV9maWx0ZXI7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGNvbm50cmFja19kdW1wX2ZsdXNoLCBjdGFfem9uZSlcbit7XG4rXHQudXNlX2N0YV9maWx0ZXIgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoY29ubnRyYWNrX2R1bXBfZmx1c2gsIGN0YV9maWx0ZXIpXG4re1xuK1x0LnVzZV9jdGFfZmlsdGVyID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoY29ubnRyYWNrX2R1bXBfZmx1c2gpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb25udHJhY2tfem9uZV9zZXR1cChfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlc29jaykpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lELCBmYWxzZSk7XG4gXHRFWFBFQ1RfR0UocmV0LCAyKTtcbiBcdGlmIChyZXQgXHUwMDNlIDIpXG4gXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGZpbHRlcmluZyBieSB6b25lXCIpO1xuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpIHtcbitcdFx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIHRydWUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQ1RBX0ZJTFRFUl9aT05FXCIpO1xuK1x0XHRBU1NFUlRfR0UocmV0LCAwKTtcbitcdH1cbiB9XG4gXG4gRklYVFVSRV9URUFSRE9XTihjb25udHJhY2tfZHVtcF9mbHVzaClcbkBAIC00MzQsMzkgKzQ4NCw0MiBAQCBURVNUX0YoY29ubnRyYWNrX2R1bXBfZmx1c2gsIHRlc3RfZHVtcF9ieV96b25lKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCxcbitcdFx0XHRcdCAgIHZhcmlhbnQtXHUwMDNldXNlX2N0YV9maWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lKVxuIHtcbitcdGJvb2wgZmlsdGVyID0gdmFyaWFudC1cdTAwM2V1c2VfY3RhX2ZpbHRlcjtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfZmx1c2hfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDApO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDEsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMik7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCArIDIsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAyKTtcbi1cdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMik7XG4gfVxuIFxuIFRFU1RfRihjb25udHJhY2tfZHVtcF9mbHVzaCwgdGVzdF9mbHVzaF9ieV96b25lX2RlZmF1bHQpXG4ge1xuK1x0Ym9vbCBmaWx0ZXIgPSB2YXJpYW50LVx1MDAzZXVzZV9jdGFfZmlsdGVyO1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lEKTtcbitcdHJldCA9IGNvbm50cmFja19mbHVzaF96b25lKHNlbGYtXHUwMDNlc29jaywgTkZfQ1RfREVGQVVMVF9aT05FX0lELCBmaWx0ZXIpO1xuIFx0RVhQRUNUX0VRKHJldCwgMCk7XG4tXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCk7XG4rXHRyZXQgPSBjb25udHJhY2tfY291bnRfem9uZShzZWxmLVx1MDAzZXNvY2ssIFRFU1RfWk9ORV9JRCwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAxKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMSwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBURVNUX1pPTkVfSUQgKyAyKTtcbitcdHJldCA9IGNvbm50cmFja19jb3VudF96b25lKHNlbGYtXHUwMDNlc29jaywgVEVTVF9aT05FX0lEICsgMiwgZmlsdGVyKTtcbiBcdEVYUEVDVF9FUShyZXQsIDIpO1xuLVx0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQpO1xuK1x0cmV0ID0gY29ubnRyYWNrX2NvdW50X3pvbmUoc2VsZi1cdTAwM2Vzb2NrLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsIGZpbHRlcik7XG4gXHRFWFBFQ1RfRVEocmV0LCAwKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjowNC4yNjgyMDgxNjZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0NzU5MDk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cbioqQW5hbHl6aW5nIFRoaXMgQ29kZSBDaGFuZ2UqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IGluaXRpYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgYGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlcmAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgZ28tdG8gdG9vbHMsIHByb2JhYmx5IGBncmVwYCBhbmQgYSBgcmVhZC1maWxlYCBjb21tYW5kLCB0byBlZmZlY3RpdmVseSBuYXZpZ2F0ZSBhbmQgZGlzc2VjdCB0aGUgY29kZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBpZGVhIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjA4LjIxNTgwMzM2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0MzU2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiem9uZV9maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTg5Nj1zdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTg5Ny1cXHR1OCBmYW1pbHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjg5ODpcXHRib29sIHpvbmVfZmlsdGVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy04OTktXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9OTE3PXN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNC1cXHRpZiAodGJbQ1RBX0ZJTFRFUl9aT05FXSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6OTM1OlxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9OTg5PWN0bmV0bGlua19hbGxvY19maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1OCBmYW1pbHkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNy1cXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwMTg6XFx0XFx0ZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTktXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjgtXFx0LyogQ1RBX0ZJTFRFUl9aT05FIGNhbm5vdCBiZSBzZXQgd2l0aG91dCBDVEFfWk9ORS4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAyOTpcXHRpZiAoZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhY2RhW0NUQV9aT05FXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDMwLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTE2Mz1zdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNzgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExNzk6XFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4MC1cXHQgICAgIW5mX2N0X3pvbmVfZXF1YWxfYW55KGN0LCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MDguMjg0MjQ1NjI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NzE4NTA0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGFzaywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGRlbHZlIGludG8gdGhlIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCBmaWxlIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdG8gZXhhbWluZSB0aGUgYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCBhbmQgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbW1lZGlhdGVseSBzdGFydHMgdG8gYnJlYWsgdGhpcyBkb3duLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGhvdyBuZXRsaW5rIGZpbHRlcnMgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBjb25udHJhY2sgZnJhbWV3b3JrLiBXaGF0IGZpZWxkcyBkb2VzIGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmAgY29udGFpbj8gV2hhdCBkb2VzIGl0IHVzZSB0byByZXByZXNlbnQgdGhlIGNyaXRlcmlhIGZvciBmaWx0ZXJpbmcgY29ubnRyYWNrIGVudHJpZXM/IElzIGl0IGJhc2VkIG9uIGF0dHJpYnV0ZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24sIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYC4gVGhpcyBmdW5jdGlvbiBpcyBrZXkuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGVzZSBmaWx0ZXIgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kLCBpbXBsaWNpdGx5LCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgZm9yIHRoZSBmaWx0ZXJpbmcgcHJvY2Vzcy4gSXMgaXQgYWxsb2NhdGluZyBhIHNpbXBsZSBzdHJ1Y3R1cmUsIG9yIGlzIHRoZXJlIGEgZHluYW1pYyBjb21wb25lbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtZW1vcnkgbGVha3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgY29tZSB0byBtaW5kPyBIb3cgZG9lcyBpdCBoYW5kbGUgZXJyb3JzIGR1cmluZyB0aGUgYWxsb2NhdGlvbj8gSG93IGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgdXNlZCBpbiB0aGUgYnJvYWRlciBuZXRsaW5rIHRyYW5zYWN0aW9uIGZsb3cgZm9yIGNvbm50cmFjayBkYXRhP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBmaWx0ZXIncyBsaWZlY3ljbGUuIEhvdyBhcmUgZmlsdGVycyBjcmVhdGVkLCBtb2RpZmllZCAoaWYgYXQgYWxsKSwgYW5kIGRlc3Ryb3llZD8gSXMgdGhlcmUgYSByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtPyBBbmQgdmVyeSBpbXBvcnRhbnRseSwgaG93IGFyZSB0aGVzZSBmaWx0ZXJzIGFjdHVhbGx5ICp1c2VkKiB0byBtYXRjaCBhZ2FpbnN0IGNvbm50cmFjayBlbnRyaWVzPyBXaGF0IGlzIHRoZSBtYXRjaGluZyBhbGdvcml0aG0sIGFuZCB3aGVyZSBpcyBpdCBpbXBsZW1lbnRlZD9cblxuSSBhbHNvIHdhbnQgdG8gdHJ5IGFuZCBkZWR1Y2UgYW55IGltcGxpY2F0aW9ucyBmcm9tIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0aGVtc2VsdmVzLiBGb3IgZXhhbXBsZSwgdGhlIGBjdG5ldGxpbmtfYCBwcmVmaXggaGludHMgdGhhdCB0aGlzIGNvZGUgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoaXMgZmlsdGVyaW5nIGNhcGFiaWxpdHkgaW50ZXJmYWNlcyB3aXRoIHRoZSB1c2VyIHNwYWNlIGNvbm50cmFjayB1dGlsaXRpZXMuIElzIHRoZXJlIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBrZXJuZWwncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBjb25udHJhY2sgYW5kIHdoYXQncyBleHBvc2VkIHZpYSBuZXRsaW5rP1xuXG5cbiIsIklucHV0VG9rZW5zIjo3NjAwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MTMuMDU2MDk4ODI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODk1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5NTpcXHRcXG4gODk2OlxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHtcXG4gODk3OlxcdFxcdHU4IGZhbWlseTtcXG4gODk4OlxcdFxcdGJvb2wgem9uZV9maWx0ZXI7XFxuIDg5OTpcXHRcXG4gOTAwOlxcdFxcdHVfaW50MzJfdCBvcmlnX2ZsYWdzO1xcbiA5MDE6XFx0XFx0dV9pbnQzMl90IHJlcGx5X2ZsYWdzO1xcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG9yaWc7XFxuIDkwNDpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGx5O1xcbiA5MDU6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XFxuIDkwNjpcXHRcXG4gOTA3OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiBtYXJrO1xcbiA5MDg6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyIHN0YXR1cztcXG4gOTA5OlxcdH07XFxuIDkxMDpcXHRcXG4gOTExOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfZmlsdGVyX25sYV9wb2xpY3lbQ1RBX0ZJTFRFUl9NQVggKyAxXSA9IHtcXG4gOTEyOlxcdFxcdFtDVEFfRklMVEVSX09SSUdfRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX1UzMiwgQ1RBX0ZJTFRFUl9GX0FMTCksXFxuIDkxMzpcXHRcXHRbQ1RBX0ZJTFRFUl9SRVBMWV9GTEFHU11cXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfVTMyLCBDVEFfRklMVEVSX0ZfQUxMKSxcXG4gOTE0OlxcdFxcdFtDVEFfRklMVEVSX1pPTkVdXFx0XFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4gOTE1OlxcdH07XFxuIDkxNjpcXHRcXG4gOTE3OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbiA5MTg6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyKVxcbiA5MTk6XFx0e1xcbiA5MjA6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbQ1RBX0ZJTFRFUl9NQVggKyAxXTtcXG4gOTIxOlxcdFxcdGludCByZXQgPSAwO1xcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfRklMVEVSX01BWCwgYXR0ciwgY3RhX2ZpbHRlcl9ubGFfcG9saWN5LFxcbiA5MjQ6XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwpO1xcbiA5MjU6XFx0XFx0aWYgKHJldClcXG4gOTI2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdGlmICh0YltDVEFfRklMVEVSX09SSUdfRkxBR1NdKVxcbiA5Mjk6XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzID0gbmxhX2dldF91MzIodGJbQ1RBX0ZJTFRFUl9PUklHX0ZMQUdTXSk7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGlmICh0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSlcXG4gOTMyOlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltDVEFfRklMVEVSX1JFUExZX0ZMQUdTXSk7XFxuIDkzMzpcXHRcXG4gOTM0OlxcdFxcdGlmICh0YltDVEFfRklMVEVSX1pPTkVdKVxcbiA5MzU6XFx0XFx0XFx0ZmlsdGVyLVxcdTAwM2V6b25lX2ZpbHRlciA9IHRydWU7XFxuIDkzNjpcXHRcXG4gOTM3OlxcdFxcdHJldHVybiAwO1xcbiA5Mzg6XFx0fVxcbiA5Mzk6XFx0XFxuIDk0MDpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIDk0MTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpO1xcbiA5NDI6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfdHVwbGVfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSxcXG4gOTQzOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG4gOTQ0OlxcdFxcdFxcdFxcdFxcdFxcdCB1MzIgdHlwZSwgdV9pbnQ4X3QgbDNudW0sXFxuIDk0NTpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lLFxcbiA5NDY6XFx0XFx0XFx0XFx0XFx0XFx0IHVfaW50MzJfdCBmbGFncyk7XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyX3UzMiAqbWFyayxcXG4gOTQ5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXFxuIDk1MDpcXHR7XFxuIDk1MTpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuIDk1MjpcXHRcXHRpZiAoY2RhW0NUQV9NQVJLXSkge1xcbiA5NTM6XFx0XFx0XFx0bWFyay1cXHUwMDNldmFsID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfTUFSS10pKTtcXG4gOTU0OlxcdFxcbiA5NTU6XFx0XFx0XFx0aWYgKGNkYVtDVEFfTUFSS19NQVNLXSlcXG4gOTU2OlxcdFxcdFxcdFxcdG1hcmstXFx1MDAzZW1hc2sgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLX01BU0tdKSk7XFxuIDk1NzpcXHRcXHRcXHRlbHNlXFxuIDk1ODpcXHRcXHRcXHRcXHRtYXJrLVxcdTAwM2VtYXNrID0gMHhmZmZmZmZmZjtcXG4gOTU5OlxcdFxcdH0gZWxzZSBpZiAoY2RhW0NUQV9NQVJLX01BU0tdKSB7XFxuIDk2MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTYxOlxcdFxcdH1cXG4gOTYyOlxcdCNlbmRpZlxcbiA5NjM6XFx0XFx0cmV0dXJuIDA7XFxuIDk2NDpcXHR9XFxuIDk2NTpcXHRcXG4gOTY2OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9zdGF0dXMoc3RydWN0IGN0bmV0bGlua19maWx0ZXJfdTMyICpzdGF0dXMsXFxuIDk2NzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbiA5Njg6XFx0e1xcbiA5Njk6XFx0XFx0aWYgKGNkYVtDVEFfU1RBVFVTXSkge1xcbiA5NzA6XFx0XFx0XFx0c3RhdHVzLVxcdTAwM2V2YWwgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9TVEFUVVNdKSk7XFxuIDk3MTpcXHRcXHRcXHRpZiAoY2RhW0NUQV9TVEFUVVNfTUFTS10pXFxuIDk3MjpcXHRcXHRcXHRcXHRzdGF0dXMtXFx1MDAzZW1hc2sgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9TVEFUVVNfTUFTS10pKTtcXG4gOTczOlxcdFxcdFxcdGVsc2VcXG4gOTc0OlxcdFxcdFxcdFxcdHN0YXR1cy1cXHUwMDNlbWFzayA9IHN0YXR1cy1cXHUwMDNldmFsO1xcbiA5NzU6XFx0XFxuIDk3NjpcXHRcXHRcXHQvKiBzdGF0dXMtXFx1MDAzZXZhbCA9PSAwPyBhbHdheXMgdHJ1ZSwgZWxzZSBhbHdheXMgZmFsc2UuICovXFxuIDk3NzpcXHRcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VtYXNrID09IDApXFxuIDk3ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTc5OlxcdFxcdH0gZWxzZSBpZiAoY2RhW0NUQV9TVEFUVVNfTUFTS10pIHtcXG4gOTgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5ODE6XFx0XFx0fVxcbiA5ODI6XFx0XFxuIDk4MzpcXHRcXHQvKiBDVEFfU1RBVFVTIGlzIE5MQV9VMzIsIGlmIHRoaXMgZmlyZXMgVUFQSSBuZWVkcyB0byBiZSBleHRlbmRlZCAqL1xcbiA5ODQ6XFx0XFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXFx1MDAzZT0gMzIpO1xcbiA5ODU6XFx0XFx0cmV0dXJuIDA7XFxuIDk4NjpcXHR9XFxuIDk4NzpcXHRcXG4gOTg4OlxcdHN0YXRpYyBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqXFxuIDk4OTpcXHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiA5OTA6XFx0e1xcbiA5OTE6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcjtcXG4gOTkyOlxcdFxcdGludCBlcnI7XFxuIDk5MzpcXHRcXG4gOTk0OlxcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjEzLjA1NjI4MjE3NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ4NjI1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIG5mX2Nvbm50cmFja19uZXRsaW5rLmM6IExpbmVzIDk5NS0xMDYwKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyA5OTUgdG8gMTA2MCBvZiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFJpZ2h0LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBwcm9iYWJseSBoYW5kbGluZyBhIHNwZWNpZmljIGNvbW1hbmQgb3IgYXR0cmlidXRlIHNldC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiByZXRyaWV2YWwsIG1vZGlmaWNhdGlvbiwgb3IgbWF5YmUgZXZlbnQgbm90aWZpY2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZCBoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBoYW5kbGluZyB0aGUgdmFyaW91cyBuZXRsaW5rIG1lc3NhZ2VzLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3MgYW55IGNvbXBsZXggYXR0cmlidXRlIHBhcnNpbmcgb3IgZXJyb3IgY2hlY2tpbmcgaW52b2x2ZWQuIEknbSBsb29raW5nIGZvciB0aGUgZmxvdyBvZiBkYXRhOiB3aGVyZSBpdCdzIGNvbWluZyBmcm9tLCBob3cgaXQncyBiZWluZyBpbnRlcnByZXRlZCwgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIGJlaW5nIHRyaWdnZXJlZCBiYXNlZCBvbiB0aGUgZGF0YS4gSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0byBlbnN1cmUgY29uY3VycmVuY3kgaXMgbWFuYWdlZCBjb3JyZWN0bHkgYW5kIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIHRoZSBoZWFydCBvZiBpbnRlcmZhY2luZyB0aGUgY29ubnRyYWNrIHN5c3RlbSB3aXRoIHVzZXIgc3BhY2UsIHNvIGFueSBlZmZpY2llbmN5IGJvdHRsZW5lY2tzIGhlcmUgd291bGQgYmUgZXh0cmVtZWx5IGNyaXRpY2FsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgYXR0cmlidXRlIHR5cGVzIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW5qZWN0aW9uIGZsYXdzLiBBbnkgc3BlY2lhbCBjYXJlIHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHNvIGltcG9ydGFudCAtIGxlYWtzIGFyZSBuZXZlciBhY2NlcHRhYmxlLiBBbHNvLCBJJ20gY3VyaW91cyB3aGV0aGVyIGFueSBzcGVjaWZpYyBmaWx0ZXJpbmcgb3IgbWF0Y2hpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyOSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MTUuNjA0OTEwMjE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTk1OlxcdFxcdGlmIChjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfTUFSS19NQVNLXSlcXG4gOTk2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4gOTk3OlxcdCNlbmRpZlxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRmaWx0ZXIgPSBremFsbG9jX29iaigqZmlsdGVyKTtcXG4xMDAwOlxcdFxcdGlmIChmaWx0ZXIgPT0gTlVMTClcXG4xMDAxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRmaWx0ZXItXFx1MDAzZWZhbWlseSA9IGZhbWlseTtcXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKFxcdTAwMjZmaWx0ZXItXFx1MDAzZW1hcmssIGNkYSk7XFxuMTAwNjpcXHRcXHRpZiAoZXJyKVxcbjEwMDc6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMDg6XFx0XFxuMTAwOTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcXHUwMDI2ZmlsdGVyLVxcdTAwM2VzdGF0dXMsIGNkYSk7XFxuMTAxMDpcXHRcXHRpZiAoZXJyKVxcbjEwMTE6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHQvKiBDVEFfWk9ORSBpcyBhbGxvd2VkIHdpdGhvdXQgQ1RBX0ZJTFRFUl9aT05FLiAqL1xcbjEwMTQ6XFx0XFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcXG4xMDE1OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sIFxcdTAwMjZmaWx0ZXItXFx1MDAzZXpvbmUpO1xcbjEwMTY6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTAxNzpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAxODpcXHRcXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG4xMDE5OlxcdFxcdH1cXG4xMDIwOlxcdFxcbjEwMjE6XFx0XFx0aWYgKCFjZGFbQ1RBX0ZJTFRFUl0pXFxuMTAyMjpcXHRcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNkYVtDVEFfRklMVEVSXSwgZmlsdGVyKTtcXG4xMDI1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjEwMjY6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHQvKiBDVEFfRklMVEVSX1pPTkUgY2Fubm90IGJlIHNldCB3aXRob3V0IENUQV9aT05FLiAqL1xcbjEwMjk6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcXG4xMDMwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTAzMTpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAzMjpcXHRcXHR9XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW9yaWdfZmxhZ3MpIHtcXG4xMDM1OlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xcbjEwMzY6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDM3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDM4OlxcdFxcdFxcdH1cXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW9yaWcsXFxuMTA0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBDVEFfVFVQTEVfT1JJRyxcXG4xMDQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDQ0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyk7XFxuMTA0NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDQ2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDQ3OlxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpIHtcXG4xMDUwOlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9SRVBMWV0pIHtcXG4xMDUxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTA1MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA1MzpcXHRcXHRcXHR9XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyZXBseSxcXG4xMDU2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIENUQV9UVVBMRV9SRVBMWSxcXG4xMDU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwNTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDU5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTA2MTpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA2MjpcXHRcXHR9XFxuMTA2MzpcXHRcXG4xMDY0OlxcdFxcdHJldHVybiBmaWx0ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjE1LjYwNTE2Mjc5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODQ1ODM3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgRmlsdGVyIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZmlsdGVyIGlzIGFsbG9jYXRlZCBhbmQgcGFyc2VkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHpvbmUgZmlsdGVyaW5nLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIHN0YXJ0aW5nIHdpdGggYGN0bmV0bGlua19hbGxvY19maWx0ZXJgLCB3aGVyZSB0aGUgYGZpbHRlcmAgc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgY3JpdGljYWwgYXMgaXQgemVyb2VzIG91dCBhbGwgZmllbGRzLCBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cblxuTm93LCB0aGUgZmxvdy4gRmlyc3QsIGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgaXMgY2FsbGVkLiBJZiB0aGUgQ29tbW9uIERhdGEgQXR0cmlidXRlIChDREEpIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlcmAgaXMgc2V0IHRvIGB0cnVlYCBhbmQgdGhlIHpvbmUgaXMgcGFyc2VkLiBPdGhlcndpc2UsIG5vdGhpbmcgaGFwcGVucyBhdCB0aGlzIHN0YWdlIGFuZCBgem9uZV9maWx0ZXJgIHJlbWFpbnMgYGZhbHNlYC5cblxuVGhlbiwgYGN0bmV0bGlua19wYXJzZV9maWx0ZXJgIGtpY2tzIGluLiBIZXJlJ3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSW5zaWRlIGBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyYCwgdGhlIHByZXNlbmNlIG9mIGEgbmVzdGVkIGF0dHJpYnV0ZSBgQ1RBX0ZJTFRFUl9aT05FYCB3aXRoaW4gdGhlIENEQSB0YWJsZSBzZXRzIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgIHRvIGB0cnVlYC4gVGhpcyBjcmVhdGVzIGEgcG90ZW50aWFsIGNvbmZsaWN0LlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgdGhpcyBjaGVjazogYGlmIChmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFjZGFbQ1RBX1pPTkVdKWAuIElmIGBDVEFfRklMVEVSX1pPTkVgIGlzIHNldCwgYW5kICpvbmx5KiBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBzZXQgKGJ1dCBub3QgdGhlIGBDVEFfWk9ORWApLCBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBiZWNvbWVzIGB0cnVlYCBiZWNhdXNlIHRoZSBuZXN0ZWQgYXR0cmlidXRlIHNldHMgaXQuIEJ1dCB0aGUgc3Vic2VxdWVudCBjaGVjayBpbW1lZGlhdGVseSBlcnJvcnMgb3V0ISBJdCdzIGFuIGBFSU5WQUxgIGVycm9yLiBUaGlzIG1lYW5zIHlvdSBjYW4ndCBzcGVjaWZ5IGEgem9uZSBmaWx0ZXIgbmVzdGVkIHdpdGhpbiB0aGUgZmlsdGVyIGl0c2VsZiB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGBDVEFfWk9ORWAgaW4gdGhlIHRvcCBsZXZlbC4gVGhlIGRlc2lnbiBzZWVtcyB0byBoYXZlIGEgcHJvYmxlbS5cblxuQmFzaWNhbGx5LCBpZiB0aGUgb3V0ZXIgYENUQV9aT05FYCBpcyAqbm90KiBwcmVzZW50IGJ1dCB0aGUgaW5uZXIgYENUQV9GSUxURVJfWk9ORWAgaXMsIHRoZW4geW91IGltbWVkaWF0ZWx5IGdldCBhbiBpbnZhbGlkIGFyZ3VtZW50IGVycm9yLiBJdCBzdWdnZXN0cyB0aGVyZSdzIHNvbWUga2luZCBvZiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9yIGluY29uc2lzdGVuY3kgaW4gdGhlIGV4cGVjdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZGlnIGludG8gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlcmAgYW5kIGBmaWx0ZXItXHUwMDNlem9uZWAgYXJlICphY3R1YWxseSogdXNlZC4gVGhhdCdsbCB0ZWxsIG1lIGlmIHRoaXMgaXMganVzdCBhIG1pbm9yIHZhbGlkYXRpb24gZXJyb3IsIG9yIGEgZnVuZGFtZW50YWwgZmxhdyBpbiB0aGUgZmlsdGVyaW5nIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCwgYW5kIGlmIHRoZSBmaWx0ZXJpbmcgcHJvY2VzcyBjYW4gZXZlbiBvcGVyYXRlIGNvcnJlY3RseSB3aGVuIHRoaXMgc2NlbmFyaW8gaXMgcHJldmVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjE5LjQ1MTAwNDA2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNjA6XFx0XFx0cmV0dXJuIDE7XFxuMTE2MTpcXHR9XFxuMTE2MjpcXHRcXG4xMTYzOlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuMTE2NDpcXHR7XFxuMTE2NTpcXHRcXHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyID0gZGF0YTtcXG4xMTY2OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlO1xcbjExNjc6XFx0XFx0dTMyIHN0YXR1cztcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0aWYgKGZpbHRlciA9PSBOVUxMKVxcbjExNzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MTpcXHRcXG4xMTcyOlxcdFxcdC8qIE1hdGNoIGVudHJpZXMgb2YgYSBnaXZlbiBMMyBwcm90b2NvbCBudW1iZXIuXFxuMTE3MzpcXHRcXHQgKiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCBpZS4gbDNwcm90byA9PSAwLFxcbjExNzQ6XFx0XFx0ICogdGhlbiBtYXRjaCBldmVyeXRoaW5nLlxcbjExNzU6XFx0XFx0ICovXFxuMTE3NjpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VmYW1pbHkgXFx1MDAyNlxcdTAwMjYgbmZfY3RfbDNudW0oY3QpICE9IGZpbHRlci1cXHUwMDNlZmFtaWx5KVxcbjExNzc6XFx0XFx0XFx0Z290byBpZ25vcmVfZW50cnk7XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyIFxcdTAwMjZcXHUwMDI2XFxuMTE4MDpcXHRcXHQgICAgIW5mX2N0X3pvbmVfZXF1YWxfYW55KGN0LCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKSlcXG4xMTgxOlxcdFxcdFxcdGdvdG8gaWdub3JlX2VudHJ5O1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VvcmlnX2ZsYWdzKSB7XFxuMTE4NDpcXHRcXHRcXHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xcbjExODU6XFx0XFx0XFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFxcdTAwMjZmaWx0ZXItXFx1MDAzZW9yaWcsIHR1cGxlLFxcbjExODY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmaWx0ZXItXFx1MDAzZW9yaWdfZmxhZ3MsXFxuMTE4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlZmFtaWx5KSlcXG4xMTg4OlxcdFxcdFxcdFxcdGdvdG8gaWdub3JlX2VudHJ5O1xcbjExODk6XFx0XFx0fVxcbjExOTA6XFx0XFxuMTE5MTpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VyZXBseV9mbGFncykge1xcbjExOTI6XFx0XFx0XFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX1JFUExZKTtcXG4xMTkzOlxcdFxcdFxcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyZXBseSwgdHVwbGUsXFxuMTE5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MsXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlZmFtaWx5KSlcXG4xMTk2OlxcdFxcdFxcdFxcdGdvdG8gaWdub3JlX2VudHJ5O1xcbjExOTc6XFx0XFx0fVxcbjExOTg6XFx0XFxuMTE5OTpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjE5LjQ1MTIyNjI5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODg0MTI1ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBOZXcgRmlsdGVyIFBvbGljeSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgc3RydWN0dXJlLiBJIHNlZSB0aGF0IGBDVEFfRklMVEVSX1pPTkVgIGlzIHNldCB0byBgLnR5cGUgPSBOTEFfRkxBR2AgaW4gdGhlcmUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgYWxzbyB2ZXJpZmllZCB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGVudW0gYGN0YXR0cl9maWx0ZXJgIGluY2x1ZGVzIGBDVEFfRklMVEVSX1pPTkVgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBjb25zaXN0ZW5jeS5cblxuSSd2ZSBhbHNvIG1hZGUgc3VyZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHNlbGZ0ZXN0cyBhcmUgdXAgdG8gZGF0ZSwgY292ZXJpbmcgdGhpcyBuZXcgYWRkaXRpb24uIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSBvdGhlciBwb2ludHMgaW4gdGhlIGNvZGViYXNlIHdoZXJlIGVpdGhlciBgQ1RBX0ZJTFRFUl9aT05FYCBvciBwZXJoYXBzIHRoZSBvbGRlciBgem9uZV9maWx0ZXJgIGlzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBjbGVhbiBhbmQgZG9lc24ndCBjb25mbGljdCB3aXRoIG90aGVyIGFyZWFzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlICpvbmx5KiBwbGFjZSB0aGlzIHpvbmUgZmlsdGVyIGZsYWcgaXMgYmVpbmcgdXNlZC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjoyMS4zMzUzNTU3OThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTQyODU3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1RBX0ZJTFRFUl9aT05FXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPTI4ND1lbnVtIGN0YXR0cl9maWx0ZXIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgtMjg3LVxcdENUQV9GSUxURVJfUkVQTFlfRkxBR1MsXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmg6Mjg4OlxcdENUQV9GSUxURVJfWk9ORSxcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaC0yODktXFx0X19DVEFfRklMVEVSX01BWFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RhX2ZpbHRlcl9ubGFfcG9saWN5W0NUQV9GSUxURVJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTEzLVxcdFtDVEFfRklMVEVSX1JFUExZX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9VMzIsIENUQV9GSUxURVJfRl9BTEwpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5MTQ6XFx0W0NUQV9GSUxURVJfWk9ORV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MTUtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05MTc9c3RhdGljIGludCBjdG5ldGxpbmtfcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtOTMzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo5MzQ6XFx0aWYgKHRiW0NUQV9GSUxURVJfWk9ORV0pXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTkzNS1cXHRcXHRmaWx0ZXItXFx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz05ODk9Y3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHU4IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDEzOlxcdC8qIENUQV9aT05FIGlzIGFsbG93ZWQgd2l0aG91dCBDVEFfRklMVEVSX1pPTkUuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTQtXFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDI3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDI4OlxcdC8qIENUQV9GSUxURVJfWk9ORSBjYW5ub3QgYmUgc2V0IHdpdGhvdXQgQ1RBX1pPTkUuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMjktXFx0aWYgKGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgXFx1MDAyNlxcdTAwMjYgIWNkYVtDVEFfWk9ORV0pIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYz0yMTg9c3RhdGljIHZvaWQgcHV0X3pvbmVfYXR0cihzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3Qgem9uZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy0yMjYtXFx0XFx0bmVzdCA9IG1ubF9hdHRyX25lc3Rfc3RhcnQobmxoLCBDVEFfRklMVEVSKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19kdW1wX2ZsdXNoLmM6MjI3OlxcdFxcdG1ubF9hdHRyX3B1dChubGgsIENUQV9GSUxURVJfWk9ORSwgMCwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTIyOC1cXHRcXHRtbmxfYXR0cl9uZXN0X2VuZChubGgsIG5lc3QpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jPTQ1OT1GSVhUVVJFX1NFVFVQKGNvbm50cmFja19kdW1wX2ZsdXNoKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jLTQ3My1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfZHVtcF9mbHVzaC5jOjQ3NDpcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IENUQV9GSUxURVJfWk9ORVxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX2R1bXBfZmx1c2guYy00NzUtXFx0XFx0QVNTRVJUX0dFKHJldCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjIzLjY4OTY0NzMzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTAzNjkyMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzY3J1dGluaXplIGl0IGZvciBhbnkgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGhpbmdlcyBvbiBob3cgYGN0YV9maWx0ZXJfbmxhX3BvbGljeWAgaGFuZGxlcyB0aGUgYFtDVEFfRklMVEVSX1pPTkVdYCBhdHRyaWJ1dGUgLSBzcGVjaWZpY2FsbHkgdGhlIGBOTEFfRkxBR2AgdHlwZS4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIGFyZSBvcGVuaW5nIG91cnNlbHZlcyB1cCB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5Gcm9tIHdoYXQgSSBjYW4gc2VlLCBgZmlsdGVyYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBlbnN1cmVzIGV2ZXJ5IGZpZWxkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBzdGFydHMgd2l0aCBhIGtub3duIHplcm8gdmFsdWUuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIG1pdGlnYXRpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMuXG5cbk5vdywgbG9va2luZyBmdXJ0aGVyLCBgdGJbQ1RBX0ZJTFRFUl9aT05FXWAgc2V0cyBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCB0byB0cnVlLiBTbywgd2UndmUgZ290IGEgYm9vbGVhbiBmbGFnIGJlaW5nIGV4cGxpY2l0bHkgc2V0LiBBbmQgdGhlbiB0aGVyZSdzIGFuIGVhcmx5IGVycm9yIGNoZWNrOiBpZiBgZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyYCBpcyB0cnVlLCAqYW5kKiBgY2RhW0NUQV9aT05FXWAgaXMgKm5vdCogcHJlc2VudCAoaS5lLiwgbm90IGRlZmluZWQpLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IHdpdGggYC1FSU5WQUxgLiBUaGlzIGlzIGEgdXNlZnVsIGNoZWNrLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGxpY2F0aW9ucy5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGNvbWVzIGluIHRoZSBmaW5hbCBjb25kaXRpb246IGlmIGBjZGFbQ1RBX1pPTkVdYCAqaXMqIGRlZmluZWQsIHRoZW4gYGZpbHRlci1cdTAwM2V6b25lYCBpcyBwb3B1bGF0ZWQgdmlhIHRoZSBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgLiBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgKmFsd2F5cyogc2V0cyBhbGwgbWVtYmVycyBvZiBgZmlsdGVyLVx1MDAzZXpvbmVgIHRvIGEga25vd24sIHZhbGlkIHZhbHVlLiBJZiBpdCBmYWlscyB0byBkbyBzbywgd2UgbWlnaHQgZmluZCBvdXJzZWx2ZXMgd2l0aCBhIG1lbW9yeSBsZWFrIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcy4gU28sIGxldCdzIGdvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODkwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjI2Ljc5MzM0NDU0NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4MTA1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX3BhcnNlX3pvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTkxNz1zdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy05MzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjk0MDpzdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTk0MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgKnpvbmUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTk4OT1jdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwMTQtXFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTAxNTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2V6b25lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTAxNi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNDE5PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTQyMDpjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNDIxLVxcdFxcdCAgICAgc3RydWN0IG5mX2Nvbm50cmFja196b25lICp6b25lKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE0MzY9Y3RuZXRsaW5rX3BhcnNlX3R1cGxlX3pvbmUoc3RydWN0IG5sYXR0ciAqYXR0ciwgZW51bSBjdGF0dHJfdHlwZSB0eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE0NDMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE0NDQ6XFx0cmV0ID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoYXR0ciwgem9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE0NDUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTYyND1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTYzNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTYzNTpcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MzYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTY3Nz1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTY5OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTcwMDpcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE3MDEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjM5Nj1zdGF0aWMgaW50IGN0bmV0bGlua19uZXdfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjQwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjQwNzpcXHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI0MDgtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzI3Mz1zdGF0aWMgaW50IGN0bmV0bGlua19kdW1wX2V4cF9jdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpjdG5sLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMyOTYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjMyOTc6XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFxcdTAwMjZ6b25lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzI5OC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zMzIwPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zMzQzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozMzQ0OlxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzNDUtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQxNj1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQyNy1cXHRcXHQvKiBkZWxldGUgYSBzaW5nbGUgZXhwZWN0IGJ5IHR1cGxlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0Mjg6XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFxcdTAwMjZ6b25lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQyOS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNjU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX25ld19leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNjY4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjY5OlxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2NzAtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjQyOjI2Ljg2NzE2MDI2NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjA4MzY1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgY3RuZXRsaW5rX3BhcnNlX3pvbmVgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGN0bmV0bGlua19wYXJzZV96b25lYCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgem9uZS1yZWxhdGVkIE5ldGxpbmsgbWVzc2FnZXMsIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBkb2VzIGFuZCBob3cgaXQgd29ya3MuIExldCBtZSBzdGFydCBieSByZXZpZXdpbmcgaXRzIHN0cnVjdHVyZSwgaG93IGl0IHBhcnNlcyB0aGUgaW5jb21pbmcgZGF0YSwgYW5kIHdoYXQgYWN0aW9ucyBpdCB0YWtlcyBiYXNlZCBvbiB0aGUgcGFyc2VkIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgdGhhdCBpdCBjb3JyZWN0bHkgbWFuYWdlcyBkaWZmZXJlbnQgZXJyb3IgY29uZGl0aW9ucyB0byBwcmV2ZW50IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkgYW0gYWxzbyBnb2luZyB0byBzZWUgaWYgSSBjYW4gZmluZCBhcmVhcyBvZiBvcHRpbWl6YXRpb24gdG8gaW1wcm92ZSB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDI4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MjguNDc1NTI4Njk0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxOCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxODpcXHRcXG4xNDE5OlxcdHN0YXRpYyBpbnRcXG4xNDIwOlxcdGN0bmV0bGlua19wYXJzZV96b25lKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuMTQyMTpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSlcXG4xNDIyOlxcdHtcXG4xNDIzOlxcdFxcdG5mX2N0X3pvbmVfaW5pdCh6b25lLCBORl9DVF9ERUZBVUxUX1pPTkVfSUQsXFxuMTQyNDpcXHRcXHRcXHRcXHRORl9DVF9ERUZBVUxUX1pPTkVfRElSLCAwKTtcXG4xNDI1OlxcdCNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTXFxuMTQyNjpcXHRcXHRpZiAoYXR0cilcXG4xNDI3OlxcdFxcdFxcdHpvbmUtXFx1MDAzZWlkID0gbnRvaHMobmxhX2dldF9iZTE2KGF0dHIpKTtcXG4xNDI4OlxcdCNlbHNlXFxuMTQyOTpcXHRcXHRpZiAoYXR0cilcXG4xNDMwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNDMxOlxcdCNlbmRpZlxcbjE0MzI6XFx0XFx0cmV0dXJuIDA7XFxuMTQzMzpcXHR9XFxuMTQzNDpcXHRcXG4xNDM1OlxcdHN0YXRpYyBpbnRcXG4xNDM2OlxcdGN0bmV0bGlua19wYXJzZV90dXBsZV96b25lKHN0cnVjdCBubGF0dHIgKmF0dHIsIGVudW0gY3RhdHRyX3R5cGUgdHlwZSxcXG4xNDM3OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSlcXG4xNDM4OlxcdHtcXG4xNDM5OlxcdFxcdGludCByZXQ7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdGlmICh6b25lLVxcdTAwM2VpZCAhPSBORl9DVF9ERUZBVUxUX1pPTkVfSUQpXFxuMTQ0MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6NDI6MjguNDc1Nzg1NjY0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTAyMDA3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaXNrIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIFRoaXMgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHRyYWNlIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSB0aGF0IGBjdG5ldGxpbmtfcGFyc2Vfem9uZWAgaW5pdGlhbGl6ZXMgdGhlIHpvbmUgdGhyb3VnaCBgbmZfY3Rfem9uZV9pbml0YCwgd2hpY2ggaXMgZ29vZC4gVGhlIGBmaWx0ZXJgIG9iamVjdCwgYSBrZXkgZWxlbWVudCwgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhhdCdzIGEgc29saWQgc3RhcnQuXG5cbk5vdywgdGhlIGBDVEFfRklMVEVSX1pPTkVgIGZsYWcgd2l0aGluIHRoZSBuZXN0ZWQgYXR0cmlidXRlIGBDVEFfRklMVEVSYCBpcyB0aGUgY3J1eCBvZiB0aGUgbWF0dGVyLiBJZiBpdCdzIHByZXNlbnQsIGFzIGluZGljYXRlZCBieSB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBwYXJzaW5nLCBpdCBzZXRzIGBmaWx0ZXItXHUwMDNlem9uZV9maWx0ZXJgIHRvIHRydWUuIFRoZSB2YWxpZGF0aW9uIHN0ZXAgaXMgY3JpdGljYWwgaGVyZTogaXQgZW5zdXJlcyB0aGF0IGlmIGB6b25lX2ZpbHRlcmAgaXMgdHJ1ZSwgdGhlIGBDVEFfWk9ORWAgYXR0cmlidXRlICptdXN0KiBhbHNvIGJlIHByZXNlbnQuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrIHRvIHByZXZlbnQgYSBzY2VuYXJpbyB3aGVyZSB0aGUgem9uZSBpc24ndCBwcm9wZXJseSBkZWZpbmVkLiBXaGVuIGBDVEFfWk9ORWAgaXMgcHJlc2VudCwgYGN0bmV0bGlua19wYXJzZV96b25lYCBwYXJzZXMgdGhlIHpvbmUgaW50byBgZmlsdGVyLVx1MDAzZXpvbmVgLlxuXG5GaW5hbGx5LCB0aGUgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9uIHVzZXMgdGhpcyBkYXRhLiBJIHNlZSBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKGZpbHRlci1cdTAwM2V6b25lX2ZpbHRlciBcdTAwMjZcdTAwMjYgIW5mX2N0X3pvbmVfZXF1YWxfYW55KGN0LCBcdTAwMjZmaWx0ZXItXHUwMDNlem9uZSkpIGdvdG8gaWdub3JlX2VudHJ5O2AuIFRoaXMgbWVhbnMgaWYgYHpvbmVfZmlsdGVyYCBpcyBlbmFibGVkLCBpdCBjaGVja3MgaWYgdGhlIHpvbmVzIGFyZSBlcXVhbCB0byBwcmV2ZW50IHRoZSBlbnRyeSBmcm9tIGdvaW5nIG9uLlxuXG5Db25zaWRlcmluZyBhbGwgdGhpcywgaXQgKmFwcGVhcnMqIHRoYXQgdGhlcmUgYXJlIG5vIGltbWVkaWF0ZSByaXNrcy4gSSBkb24ndCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgbWVtb3J5IGxlYWtzIG9yIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmVuJ3QgYW55IGJ1ZmZlciBsZW5ndGggb3IgYm91bmQgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgZWl0aGVyLiBTbywgaW4gbXkgZXhwZXJ0IG9waW5pb24sIHRoaXMgcGFydGljdWxhciBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4uIFRoZSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgc3VpdGVzIHNob3VsZCBiZSBjb21wbGV0ZWx5IHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBhbnkgaXNzdWVzLlxuXG5Ob3csIGxldCdzIHByZXBhcmUgdGhlIHRvb2wgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYwNywiT3V0cHV0VG9rZW5zIjoyMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTo0MjozMi43MjU5ODk0NDhaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQ1RBX0ZJTFRFUl9aT05FLCBhbGxvd2luZyBjb25udHJhY2sgZHVtcHMgYW5kIGZsdXNoZXMgdG8gZmlsdGVyIGVudHJpZXMgYnkgem9uZS4gXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eTpcXG4xLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlcmApIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmooKWAsIGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIGZpZWxkcyBpbmNsdWRpbmcgYHpvbmVfZmlsdGVyYC5cXG4yLiBUaGUgYXR0cmlidXRlIHBvbGljeSBgQ1RBX0ZJTFRFUl9aT05FYCBpcyBkZWZpbmVkIGFzIGBOTEFfRkxBR2AsIHBhcnNlZCB2aWEgbmV0bGluayBuZXN0ZWQgYXR0cmlidXRlIHBhcnNpbmcgKGBubGFfcGFyc2VfbmVzdGVkYCkuXFxuMy4gWm9uZSBwYXJzaW5nIGluaXRpYWxpemVzIHRoZSBzdHJ1Y3R1cmUgY29tcGxldGVseSB2aWEgYG5mX2N0X3pvbmVfaW5pdCgpYC5cXG40LiBTdHJpY3QgdmFsaWRhdGlvbiBlbnN1cmVzIGBDVEFfWk9ORWAgbXVzdCBiZSBwcmVzZW50IGlmIGB6b25lX2ZpbHRlcmAgaXMgc2V0LlxcbjUuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBDVEFfRklMVEVSX1pPTkUsIGFsbG93aW5nIGNvbm50cmFjayBkdW1wcyBhbmQgZmx1c2hlcyB0byBmaWx0ZXIgZW50cmllcyBieSB6b25lLiBcXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5OlxcbjEuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyYCkgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIGluY2x1ZGluZyBgem9uZV9maWx0ZXJgLlxcbjIuIFRoZSBhdHRyaWJ1dGUgcG9saWN5IGBDVEFfRklMVEVSX1pPTkVgIGlzIGRlZmluZWQgYXMgYE5MQV9GTEFHYCwgcGFyc2VkIHZpYSBuZXRsaW5rIG5lc3RlZCBhdHRyaWJ1dGUgcGFyc2luZyAoYG5sYV9wYXJzZV9uZXN0ZWRgKS5cXG4zLiBab25lIHBhcnNpbmcgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZSBjb21wbGV0ZWx5IHZpYSBgbmZfY3Rfem9uZV9pbml0KClgLlxcbjQuIFN0cmljdCB2YWxpZGF0aW9uIGVuc3VyZXMgYENUQV9aT05FYCBtdXN0IGJlIHByZXNlbnQgaWYgYHpvbmVfZmlsdGVyYCBpcyBzZXQuXFxuNS4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzl8kd[1] Phase: Succeeded StartedAt: 2026-09-06 05:43:15 +0000 UTC FinishedAt: 2026-09-06 05:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzl8kd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 05:43:16 +0000 UTC FinishedAt: 2026-09-06 05:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzl8kd[2] Phase: Succeeded StartedAt: 2026-09-06 05:43:16 +0000 UTC FinishedAt: 2026-09-06 05:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzl8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["ctnetlink_parse_filter","ctnetlink_alloc_filter","ctnetlink_filter_match","ctnetlink_flush_conntrack","ctnetlink_dump_table","ctnetlink_get_conntrack","ctnetlink_del_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"6f0c73e9-bea4-425a-aec3-fa949f5b6d12","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-06 05:43:17 +0000 UTC FinishedAt: 2026-09-06 05:44:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["ctnetlink_parse_filter","ctnetlink_alloc_filter","ctnetlink_filter_match","ctnetlink_flush_conntrack","ctnetlink_dump_table","ctnetlink_get_conntrack","ctnetlink_del_conntrack"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"6f0c73e9-bea4-425a-aec3-fa949f5b6d12","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzl8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["ctnetlink_parse_filter","ctnetlink_alloc_filter","ctnetlink_filter_match","ctnetlink_flush_conntrack","ctnetlink_dump_table","ctnetlink_get_conntrack","ctnetlink_del_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"6f0c73e9-bea4-425a-aec3-fa949f5b6d12","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 05:43:17 +0000 UTC FinishedAt: 2026-09-06 05:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzl8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["ctnetlink_parse_filter","ctnetlink_alloc_filter","ctnetlink_filter_match","ctnetlink_flush_conntrack","ctnetlink_dump_table","ctnetlink_get_conntrack","ctnetlink_del_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"6f0c73e9-bea4-425a-aec3-fa949f5b6d12","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 05:43:17 +0000 UTC FinishedAt: 2026-09-06 05:43:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzl8kd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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":["ctnetlink_parse_filter","ctnetlink_alloc_filter","ctnetlink_filter_match","ctnetlink_flush_conntrack","ctnetlink_dump_table","ctnetlink_get_conntrack","ctnetlink_del_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","NETFILTER_NETLINK","NETFILTER"],"series_id":"6f0c73e9-bea4-425a-aec3-fa949f5b6d12","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Error StartedAt: 2026-09-06 05:44:12 +0000 UTC FinishedAt: 2026-09-06 05:44:13 +0000 UTC Input: nil Output: nil