Name: series-workflowfgcjq Phase: Running StartedAt: 2026-07-23 23:17:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[0] Phase: Succeeded StartedAt: 2026-07-23 23:17:51 +0000 UTC FinishedAt: 2026-07-23 23:39:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 23:17:51 +0000 UTC FinishedAt: 2026-07-23 23:39:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP", "NF_CONNTRACK_SIP", "NF_NAT_SIP", "NF_CONNTRACK_H323", "NF_NAT_H323", "NF_TABLES", "NETFILTER_XT_MATCH_HASHLIMIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP", "NF_CONNTRACK_SIP", "NF_NAT_SIP", "NF_CONNTRACK_H323", "NF_NAT_H323", "NF_TABLES", "NETFILTER_XT_MATCH_HASHLIMIT" ], "series_id": "01ddf54a-ed60-4049-9b31-1f92fc2e0296" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_conn_fill_cport", "ip_vs_conn_change_fwd_mask", "ip_vs_nat_icmp", "ip_vs_nat_icmp_v6", "ip_vs_out_icmp", "ip_vs_in_icmp", "ip_vs_icmp_xmit", "ip_vs_icmp_xmit_v6", "tcp_csum_check", "udp_csum_check", "sctp_csum_check", "nf_ct_expect_related_pair", "nat_rtp_rtcp", "nf_nat_sdp_media", "nft_obj_lookup", "nf_tables_newtable", "nf_tables_newobj", "nft_obj_del", "hashlimit_mt_check_common" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfTkFUX1NJUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9OQVRfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7c2N0cF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O25mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXImIzM0OywKICAgICYjMzQ7bmF0X3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mX25hdF9zZHBfbWVkaWEmIzM0OywKICAgICYjMzQ7bmZ0X29ial9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdvYmomIzM0OywKICAgICYjMzQ7bmZ0X29ial9kZWwmIzM0OywKICAgICYjMzQ7aGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG11bHRpcGxlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMsIGluY2x1ZGluZyBJUFZTIGNvbm5lY3Rpb24gaGFuZGxpbmcgYW5kIElDTVAvY2hlY2tzdW0gcHJvY2Vzc2luZywgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGhhbmRsaW5nIGZvciBTSVAgYW5kIEguMzIzLCBuZl90YWJsZXMgb2JqZWN0IGxvb2t1cCBtZWNoYW5pc21zLCBhbmQgeHRfaGFzaGxpbWl0IG1hdGNoaW5nLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzFkNDk0MmI4NGI1YjJiZjFhYzcyODBjZjllMTAyZTIwZGE0NDVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIzOjM3OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaFxuaW5kZXggZGJjNjE0ZGZlMGQ1NjUuLmFhZmEwYzA0ZjkxN2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcbkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBuZl9uYXRfc2lwX2hvb2tzIHtcbiBcdFx0XHQgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuKTtcbiBcbiBcdHZvaWQgKCpzZXFfYWRqdXN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGludCBwcm90b2ZmLCBzMTYgb2ZmKTtcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMzMiBvZmYpO1xuIFxuIFx0dW5zaWduZWQgaW50ICgqZXhwZWN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuQEAgLTI1LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcdTAwM2VcdFx0LyogZm9yIHVuaW9uIG5mX2luZXRfYWRkciAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcdFx0XHQvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC0xOTcyLDggJiM0MzsxOTc0LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBpbnQgaXBfdnNfZHJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcbi1cdFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4mIzQzO1x0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XG4gdm9pZCBpcF92c19kZXN0X2RzdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTE5ODYsOCAmIzQzOzE5ODgsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuQEAgLTIwNTksMTUgJiM0MzsyMDYxLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gfVxuIFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XG4mIzQzO1x0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICBib29sIGhhc19wb3J0cyk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7XG4tXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcbiB7XG4gXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XG5AQCAtMjA5Myw2ICYjNDM7MjA5NSwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcbiYjNDM7e1xuJiM0MztcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xuJiM0MztcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdC8qIExPQ0FMX09VVCA/ICovXG4mIzQzO1x0aWYgKCFza2ItXHUwMDNlZGV2IHx8IHNrYi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cbiYjNDM7XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbiYjNDM7XHRcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVx1MDAzZXJ0NmlfZmxhZ3MgXHUwMDI2IFJURl9MT0NBTCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbiYjNDM7e1xuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuaW5kZXggYzAyNDM0NWM5YmQ4NjIuLjI2ZDZiYWJkOTJmY2Q3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuQEAgLTE2MSw2ICYjNDM7MTYxLDkgQEAgc3RhdGljIGlubGluZSBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiBcdHJldHVybiBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoZXhwZWN0LCAwLCAwLCBmbGFncyk7XG4gfVxuIFxuJiM0MztpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0W10sXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBmbGFnKTtcbiYjNDM7XG4gc3RydWN0IG5mX2Nvbm5faGVscDtcbiB2b2lkIG5mX2N0X2V4cGVjdGF0aW9uX2djKHN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbmluZGV4IDlkODQ0MzU0YzRkOTU2Li4zYmU2MTIxNDVjMTMwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtMTI5NCw2ICYjNDM7MTI5NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdXNlX2luY19yZXN0b3JlKHUzMiAqdXNlKVxuICAqXHRAc2V0czogc2V0cyBpbiB0aGUgdGFibGVcbiAgKlx0QG9iamVjdHM6IHN0YXRlZnVsIG9iamVjdHMgaW4gdGhlIHRhYmxlXG4gICpcdEBmbG93dGFibGVzOiBmbG93IHRhYmxlcyBpbiB0aGUgdGFibGVcbiYjNDM7ICpcdEBvYmpuYW1lX2h0OiBoYXNodGFibGUgZm9yIG9iamVjdHMgbG9va3VwIGJ5IG5hbWVcbiAgKlx0QGhnZW5lcmF0b3I6IGhhbmRsZSBnZW5lcmF0b3Igc3RhdGVcbiAgKlx0QGhhbmRsZTogdGFibGUgaGFuZGxlXG4gICpcdEB1c2U6IG51bWJlciBvZiBjaGFpbiByZWZlcmVuY2VzIHRvIHRoaXMgdGFibGVcbkBAIC0xMzEzLDYgJiM0MzsxMzE0LDcgQEAgc3RydWN0IG5mdF90YWJsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHNldHM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdG9iamVjdHM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGZsb3d0YWJsZXM7XG4mIzQzO1x0c3RydWN0IHJobHRhYmxlXHRcdFx0b2JqbmFtZV9odDtcbiBcdHU2NFx0XHRcdFx0aGdlbmVyYXRvcjtcbiBcdHU2NFx0XHRcdFx0aGFuZGxlO1xuIFx0dTMyXHRcdFx0XHR1c2U7XG5AQCAtMTQwMCw3ICYjNDM7MTQwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbmZ0X29ial9kYXRhKGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4gI2RlZmluZSBuZnRfZXhwcl9vYmooZXhwcilcdCooKHN0cnVjdCBuZnRfb2JqZWN0ICoqKW5mdF9leHByX3ByaXYoZXhwcikpXG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCB1MzIgb2JqdHlwZSxcbiBcdFx0XHRcdCAgdTggZ2VubWFzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xuaW5kZXggMTgzZThhM2ZmMmJhYmQuLjZiY2Q2NzM0NzY5YjU5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jXG5AQCAtMTgyLDYgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IG5hdF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9leHAsXG4gXHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07XG4gXHRzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSBuZmN0X2hlbHBfZGF0YShjdCk7XG4gXHRpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIFx0aW50IGk7XG5AQCAtMjI3LDIyICYjNDM7MjI4LDEzIEBAIHN0YXRpYyBpbnQgbmF0X3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0cnRwX2V4cC1cdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQpO1xuLVx0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydHBfZXhwLCAwKTtcbiYjNDM7XHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCAmIzQzOyAxKTtcbiYjNDM7XHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsIDApO1xuIFx0XHRpZiAocmV0ID09IDApIHtcbi1cdFx0XHRydGNwX2V4cC1cdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9XG4tXHRcdFx0ICAgIGh0b25zKG5hdGVkX3BvcnQgJiM0MzsgMSk7XG4tXHRcdFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsIDApO1xuLVx0XHRcdGlmIChyZXQgPT0gMClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHtcbi1cdFx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdFx0bmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTtcbi1cdFx0XHRcdG5hdGVkX3BvcnQgPSAwO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKHJldCAhPSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdG5hdGVkX3BvcnQgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5iMmQ3Nzk3MzI3MmQyNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMDA1LDcgJiM0MzsxMDA1LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gI2VuZGlmXG4gXHRpZiAoU0VUX1dJVEhfQ09VTlRFUihzZXQpKVxuIFx0XHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKGRhdGEsIHNldCksIGV4dCk7XG4tXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKVxuJiM0MztcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZGF0YSwgc2V0KSwgZXh0KTtcbiBcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oZGF0YSwgc2V0KSwgZXh0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5AQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cdTAwM2VsZW4gJiM0Mzsgc2l6ZW9mKCp0aCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaXB2c2gtXHUwMDNlbGVuKTtcbiYjNDM7XHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4gXG4gXHQvKlxuIFx0ICpcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcbkBAIC00NDMsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICYjNDM7IHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZlZDI2MjIzNjNmMGQ2Li4zNmM1Y2JhMDNmNWJjYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSAmIzQzOzcwLDQ1IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4mIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXG4mIzQzOyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4mIzQzOy8qKlxuJiM0MzsgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaFxuJiM0MzsgKiBAdDpcdFx0aGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZVxuJiM0MzsgKiBAdDI6XHRcdGhhc2ggdGFibGUgZm9yIGhuMSwgbmV3X3RibCB3aGVuIG5ld19oYXNoMj10cnVlXG4mIzQzOyAqIEBjcDpcdFx0Y29ubmVjdGlvblxuJiM0MzsgKiBAaGFzaF9rZXk6XHRoYXNoIGtleSBmb3IgaG4wXG4mIzQzOyAqIEBoYXNoX2tleTI6XHRoYXNoIGtleSBmb3IgaG4xXG4mIzQzOyAqIEB1c2UyOlx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXG4mIzQzOyAqIEBuZXdfaGFzaDpcdG1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxuJiM0MzsgKiBAbmV3X2hhc2gyOlx0bW9kZSBmb3IgaG4xLCBoYXNoIG5vZGUgKHRydWUpIG9yIHNlZWsgbm9kZSAoZmFsc2UpXG4mIzQzOyAqIEBoZWFkX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxuJiM0MzsgKiBAaGVhZDJfcmV0Olx0cmV0dXJuZWQgaGVhZCBmb3IgaG4xXG4mIzQzOyAqXG4mIzQzOyAqIFdlIHN1cHBvcnQgMyBtb2RlczpcbiYjNDM7ICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZ1xuJiM0MzsgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZ1xuJiM0MzsgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcbiYjNDM7ICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbi1cdCAgICAgIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcbi1cdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuJiM0Mztjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4mIzQzO1x0ICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4mIzQzO1x0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXG4mIzQzO1x0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXG4ge1xuIFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbiBcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XG4tXHRzdHJ1Y3QgaXBfdnNfcmh0ICp0MiA9IHQ7XG4tXHR1MzIgaWR4LCBpZHgyO1xuJiM0MztcdGludCBpZHggPSAwLCBpZHgyID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogQWR2YW5jZSBpZHgyIHdoZW4gbmV3X2hhc2ggaXMgbm90IHNldCBidXQgaGFzaF9rZXkyXG4mIzQzO1x0ICogaXMgZm9yIG5ldyB0YWJsZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChuZXdfaGFzaDIgXHUwMDI2XHUwMDI2IHVzZTIgXHUwMDI2XHUwMDI2IHQgIT0gdDIpXG4mIzQzO1x0XHRpZHgyJiM0MzsmIzQzOztcbiBcbi1cdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRpZiAodXNlMilcbi1cdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0ZWxzZVxuLVx0XHRpZHgyID0gaWR4O1xuIFx0aWYgKCFuZXdfaGFzaCkge1xuIFx0XHQvKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGJ1Y2tldCBpbiB0aGUgcmlnaHQgdGFibGUgKi9cbiBcbkBAIC0xMDAsNDYgJiM0MzsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHQgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MlxuIFx0XHRcdCAqIGZvciBwcm9wZXIgbG9jayBvcmRlcmluZyBmb3IgaGVhZHMuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdFx0XHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdH1cbi1cdFx0aWYgKHVzZTIpIHtcbi1cdFx0XHRpZiAoIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4tXHRcdFx0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuLVx0XHRcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4tXHRcdFx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrO1xuLVx0XHRcdFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWR4MiA9IGlkeDtcbiYjNDM7XHRcdFx0aWR4JiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0fVxuJiM0MztcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyIFx1MDAyNlx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbiYjNDM7XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbiYjNDM7XHRcdGlkeDImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiBcbiYjNDM7XHRpZiAoIXVzZTIpXG4mIzQzO1x0XHRpZHgyID0gaWR4O1xuIFx0aGVhZCA9IHQtXHUwMDNlYnVja2V0cyAmIzQzOyAoaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzayk7XG4gXHRoZWFkMiA9IHVzZTIgPyB0Mi1cdTAwM2VidWNrZXRzICYjNDM7IChoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2spIDogaGVhZDtcbiBcbi1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdC8qIERvIG5vdCB0b3VjaCBzZXFjb3VudCwgdGhpcyBpcyBhIHNhZmUgb3BlcmF0aW9uICovXG4tXG4tXHRpZiAoaWR4IFx1MDAzYz0gaWR4Mikge1xuJiM0MztcdGlmIChpZHggXHUwMDNlIGlkeDIgfHwgKGhlYWQgXHUwMDNlIGhlYWQyIFx1MDAyNlx1MDAyNiBpZHggPT0gaWR4MikpIHtcbiYjNDM7XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuLVx0XHRpZiAoaGVhZCAhPSBoZWFkMilcbi1cdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuJiM0MztcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4mIzQzO1x0XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0fVxuIFx0aWYgKCFuZXdfaGFzaCkge1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VkO1xuJiM0MztcbiBcdFx0LyogRW5zdXJlIGhhc2hfa2V5IGlzIHJlYWQgdW5kZXIgbG9jayAqL1xuIFx0XHRoYXNoX2tleV9uZXcgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbi1cdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcdFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcbiYjNDM7XHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFx0Y2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XG4mIzQzO1x0XHR9XG4gXHRcdC8qIEhhc2ggY2hhbmdlZCA/ICovXG4tXHRcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcbi1cdFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcdTAwMjZcdTAwMjYgdXNlMikpIHtcbiYjNDM7XHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgJiM0MzsxNzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLFxuIFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdGhsaXN0X2JsX3VubG9jayhoZWFkMik7XG4gXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XG4tXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuQEAgLTI2OCw4ICYjNDM7Mjg2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0dXNlMiA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiBcbiBcdGNwLVx1MDAzZWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xuQEAgLTI4MCw2ICYjNDM7Mjk5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmV0ID0gMTtcbiBcbiBcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXG5AQCAtMzA2LDE4ICYjNDM7MzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcbiBcdFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cbi1cdFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuJiM0MztcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuIFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4wLm5vZGUpO1xuIFx0XHRcdGlmICh1c2UyKVxuIFx0XHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG5AQCAtMzI4LDYgJiM0MzszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiBcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02MzIsNiAmIzQzOzY1NSw3IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0aW50IG50Ymw7XG4gXHRpbnQgZGlyO1xuIFxuJiM0MztyZXN0YXJ0OlxuIFx0LyogTm8gcGFja2V0cyBmcm9tIGluc2lkZSwgc28gd2UgY2FuIGRvIGl0IGluIDIgc3RlcHMuICovXG4gXHRkaXIgPSB1c2UyID8gMSA6IDA7XG4gXG5AQCAtNjg2LDYgJiM0Mzs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHQvKiBQcm90ZWN0IHRoZSBjcC1cdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcbiYjNDM7XHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXG4mIzQzO1x0aWYgKHVzZTIgIT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4mIzQzO1x0XHR1c2UyID0gIXVzZTI7XG4mIzQzO1x0XHRpZiAodXNlMikge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0LyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovXG4mIzQzO1x0XHRcdGdvdG8gcmVzdGFydDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChkaXIpIHtcbiYjNDM7XHRcdFx0LyogTm90IHN0YXJ0ZWQgeWV0LCBzbyBqdXN0IHNraXAgZGlyIDEgKi9cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdGRpci0tO1xuJiM0MztcdFx0XHRnb3RvIG5leHRfZGlyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogSnVzdCBmaW5pc2ggZGlyIDAgKi9cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXG4gXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxuIFx0ICovXG5AQCAtNzUyLDYgJiM0Mzs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovXG4mIzQzO3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gY3AtXHUwMDNlaXB2cztcbiYjNDM7XHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuJiM0MztcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbiYjNDM7XHRzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7XG4mIzQzO1xuJiM0MztcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbiYjNDM7XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XG4mIzQzO1x0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXG4mIzQzO1x0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cbiYjNDM7XHQgICAgKChuZXdfZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4mIzQzO1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiYjNDM7XHRpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4mIzQzO1x0XHQvKiBTdG9wIGRvdWJsZSBoYXNoaW5nICovXG4mIzQzO1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuJiM0MztcdFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuJiM0MztcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4mIzQzO1xuJiM0MztcdFx0LyogS2VlcCBib3RoIGhhc2gga2V5cyBpbiBzYW1lIHRhYmxlICovXG4mIzQzO1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuJiM0MztcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5KTtcbiYjNDM7XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi9cbiYjNDM7XG4mIzQzO1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuJiM0MztcbiYjNDM7XHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXHUwMDNlbmV3X3RibCk7XG4mIzQzO1x0XHRoYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7XG4mIzQzO1x0XHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBDaGFuZ2UgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2tlZCBobjAgKi9cbiYjNDM7XHRcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXG4mIzQzO1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpO1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1x0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbiYjNDM7XG4mIzQzO1x0XHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBHZXQgZGVmYXVsdCBsb2FkIGZhY3RvciB0byBtYXAgY29ubl9jb3VudC91X3RocmVzaCB0byB0LVx1MDAzZXNpemUgKi9cbiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbiB7XG5AQCAtMTAxNCw2ICYjNDM7MTExMCw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0ZmxhZ3MgPSBjcC1cdTAwM2VmbGFncztcbiBcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XG4mIzQzO1x0XHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cbiYjNDM7XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XG4mIzQzO1xuIFx0XHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcbiBcdFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXG4gXHRcdCAqL1xuQEAgLTEwMjEsOSAmIzQzOzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4gXHRcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7XG4gXHRcdC8qIGNvbm5lY3Rpb25zIGluaGVyaXQgZm9yd2FyZGluZyBtZXRob2QgZnJvbSBkZXN0ICovXG4gXHRcdGZsYWdzIFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xuJiM0MztcdFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbiYjNDM7XHRcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cbiYjNDM7XHRcdCAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbiYjNDM7XHRcdFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHR9XG4tXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuLVx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGNwLVx1MDAzZWRlc3QgPSBkZXN0O1xuIFxuIFx0SVBfVlNfREJHX0JVRig3LCBcJiMzNDtCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkIFwmIzM0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uNmI3OWUwYzRkOWUyODQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuJiM0MztzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyAmIzQzOzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICBib29sIGhhc19wb3J0cylcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NDUsOCAmIzQzOzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzO1x0aWYgKGhhc19wb3J0cykge1xuIFx0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICYjNDM7IGNpcGgtXHUwMDNlaWhsKjQ7XG4gXG4gXHRcdGlmIChpbm91dClcbkBAIC05NTcsNDggJiM0Mzs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4mIzQzO1x0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwaFx0ID0gaXB2Nl9oZHIoc2tiKTtcbi1cdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc1x0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXG4tXHRpbnQgcHJvdG9jb2w7XG4gXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xuLVx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XG4tXHR1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmcztcbiYjNDM7XHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xuIFxuLVx0aXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuLVx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGljbXBfb2Zmc2V0KTtcbi1cdG9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbi1cdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7XG4tXG4tXHRwcm90b2NvbCA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmZzLCAtMSwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuJiM0MztcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiYjNDM7XHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VvZmYpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpZiAoaGFzX3BvcnRzKSB7XG4mIzQzO1x0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VsZW4pO1xuIFxuIFx0XHRJUF9WU19EQkcoMTEsIFwmIzM0OyVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHQgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLFxuQEAgLTEwMTEsMTkgJiM0MzsxMDAyLDE3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXG4gXHRpY21waC1cdTAwM2VpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSBpY21wX29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0b2ZmLFxuIFx0XHRcdFx0XHQgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7XG4tXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQgJiM0MzsgaWNtcF9vZmZzZXQ7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0b2ZmO1xuIFx0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NlwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuJiM0MztcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QdjZcJiMzNDspO1xuIH1cbiAjZW5kaWZcbkBAIC0xMDMzLDM2ICYjNDM7MTAyMiw0MSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gICovXG4gc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXG4tXHRcdFx0XHRfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiYjNDM7XHRpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XG4mIzQzO1x0XHRjdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7XG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTtcbiYjNDM7XHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFx0ZWxzZVxuICNlbmRpZlxuLVx0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTAsOSAmIzQzOzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4mIzQzO1x0XHRcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTEwNywxNyAmIzQzOzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuJiM0MztcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXB2c2gpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4mIzQzO1x0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcJiMzNDtPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCYjMzQ7LFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4mIzQzO1x0XHQgIFx1MDAyNmlwdnNoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcHZzaC1cdTAwM2VkYWRkci5pcCk7XG4gXG4gXHQvKlxuIFx0ICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy5cbkBAIC0xMTM2LDcgJiM0MzsxMTMyLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4mIzQzO1x0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuIFxuIFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQ0LDggJiM0MzsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuJiM0MztcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTE1OSw5ICYjNDM7MTE1NCw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuJiM0MztcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbiYjNDM7XHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyAmIzQzOzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxMCw2ICYjNDM7MTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiYjNDM7XHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiBcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXIgKi9cbiBcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxuIFx0XHRcdCAgICAgaXB2cywgQUZfSU5FVDYsIHNrYiwgXHUwMDI2Y2lwaCk7XG5AQCAtMTIxNyw5ICYjNDM7MTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0xNTQ1LDcgJiM0MzsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuJiM0MztcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMTc1Myw5ICYjNDM7MTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NjUsNyAmIzQzOzE3NjIsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XG4gXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuLVx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuJiM0MztcdGNoYXIgKm91dGVyX3Byb3RvIF9fbWF5YmVfdW51c2VkID0gXCYjMzQ7SVBJUFwmIzM0OztcbiBcdHVuc2lnbmVkIGludCBobGVuX2lwaXA7XG4gXHRpbnQgdWxlbiA9IDA7XG4gXG5AQCAtMTc3NSwxNyAmIzQzOzE3NzIsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4mIzQzO1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcGgpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcGgtXHUwMDNlbGVuO1xuJiM0MztcdG9mZnNldCA9IGlwaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwmIzM0O0luY29taW5nIElDTVAgKCVkLCVkKSAlcEk0LVx1MDAzZSVwSTRcXG5cJiMzNDssXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbiYjNDM7XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTg2Nyw4ICYjNDM7MTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTE4NzYsNyAmIzQzOzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4gXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxuIFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cbkBAIC0xODk4LDEwICYjNDM7MTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cJiMzNDssXG4tXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NjksMTAgJiM0MzsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDMyLDggJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbi1cdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xuLVx0aWYgKGNpcGguZnJhZ29mZnMpXG4mIzQzO1x0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuJiM0MztcdGlmIChjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTIwNTcsMjMgJiM0MzsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV3X2NwID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xuLVx0aWYgKChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4tXHRcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XG4mIzQzO1x0dmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuJiM0MztcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuJiM0MztcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuJiM0MztcdFx0SVBfVlNfREJHKDEsIFwmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbi1cdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXG4tXHRvZmZzZXQgPSBjaXBoLmxlbjtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbi1cbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMTUyLDcgJiM0MzsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMjIwMCw4ICYjNDM7MjE5NCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxuIFx0XHR9XG4gXG4gXHRcdGlmIChyZXNjaGVkKSB7XG4tXHRcdFx0aWYgKCFvbGRfY3QpXG4mIzQzO1x0XHRcdGlmICghb2xkX2N0KSB7XG4mIzQzO1x0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuIFx0XHRcdFx0Y3AtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX05GQ1Q7XG4mIzQzO1x0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNwLVx1MDAzZW5fY29udHJvbCkpXG4gXHRcdFx0XHRpcF92c19jb25uX2V4cGlyZV9ub3coY3ApO1xuIFx0XHRcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xuQEAgLTIyMTcsOCAmIzQzOzIyMTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHN5c2N0bF9leHBpcmVfbm9kZXN0X2Nvbm4oaXB2cykpIHtcbiBcdFx0XHRib29sIG9sZF9jdCA9IGlwX3ZzX2Nvbm5fdXNlc19vbGRfY29ubnRyYWNrKGNwLCBza2IpO1xuIFxuLVx0XHRcdGlmICghb2xkX2N0KVxuJiM0MztcdFx0XHRpZiAoIW9sZF9jdCkge1xuJiM0MztcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9ORkNUO1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aXBfdnNfY29ubl9leHBpcmVfbm93KGNwKTtcbiBcdFx0XHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbkBAIC0yMjg4LDYgJiM0MzsyMjg4LDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4mIzQzO1x0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xuIFx0aW50IHI7XG4gXG4gXHQvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovXG5AQCAtMjI5NywxMCAmIzQzOzIyOTgsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBORlBST1RPX0lQVjQpIHtcbiBcdFx0aWYgKGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgJiM0MzsyMzEwLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gI2VuZGlmXG4gXHR9XG4gXG4tXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2spO1xuJiM0MztcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vaywgXHUwMDI2aXBoZHIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTExLDcgJiM0MzsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmO1xuJiM0MztcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2Vzb3VyY2UgIT0gY3AtXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTU3LDcgJiM0MzsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHNjdHBob2ZmKSlcbiYjNDM7XHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgc2N0cGhvZmY7XG4mIzQzO1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZWRlc3QgIT0gY3AtXHUwMDNlZHBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZilcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXHUwMDNlbGVuO1xuIFx0c3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0X19sZTMyIGNtcCwgdmFsO1xuIFxuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZik7XG4gXHRjbXAgPSBzaC1cdTAwM2VjaGVja3N1bTtcbiBcdHZhbCA9IHNjdHBfY29tcHV0ZV9ja3N1bShza2IsIHNjdHBob2ZmKTtcbiBcbiBcdGlmICh2YWwgIT0gY21wKSB7XG4gXHRcdC8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqL1xuLVx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbmluZGV4IGY4NmI3NjNlZmNjNGRjLi45OWEyODZmZGM5MGM2NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbiYjNDM7XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjtcbiYjNDM7XHR0Y3BoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbiYjNDM7XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjYwLDcgJiM0MzsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7XG4mIzQzO1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fVENQLCBhZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgJiM0MzsyNSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZik7XG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTUsNyAmIzQzOzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuJiM0MztcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjtcbiYjNDM7XHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB1ZHBob2ZmO1xuIFx0dWRwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qXG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbiYjNDM7XHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjU0LDcgJiM0MzsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHVkcGhvZmY7XG4mIzQzO1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0yOTgsNDggJiM0MzsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiBcdHN0cnVjdCB1ZHBoZHIgX3VkcGgsICp1aDtcbiBcbi1cdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdWRwaG9mZiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuJiM0MztcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVx1MDAzZWxlbiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuIFx0aWYgKHVoID09IE5VTEwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHVoLVx1MDAzZWNoZWNrICE9IDApIHtcbi1cdFx0c3dpdGNoIChza2ItXHUwMDNlaXBfc3VtbWVkKSB7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRpZiAoIXVoLVx1MDAzZWNoZWNrKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCA5ZmVmNDMzNWRhMTNmZC4uMGIwYzUzMDQ5OTNhOTEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5AQCAtMTUwMiwyMCAmIzQzOzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiBcdHN0cnVjdCBydGFibGVcdCpydDtcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG4gXHRpbnQgcmM7XG4gXHRpbnQgbG9jYWw7XG4gXHRpbnQgcnRfbW9kZSwgd2FzX2lucHV0O1xuJiM0MztcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdsZW47XG4gXG4gXHQvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlXG4gXHQgICBmb3J3YXJkZWQgZGlyZWN0bHkgaGVyZSwgYmVjYXVzZSB0aGVyZSBpcyBubyBuZWVkIHRvXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcbiYjNDM7XHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTUzMyw3ICYjNDM7MTUzNSw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuJiM0MztcdFx0XHRcdCAgIE5VTEwsIGNpcGgpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBza2JfcnRhYmxlKHNrYik7XG5AQCAtMTU2NCwxNCAmIzQzOzE1NjYsMjEgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4mIzQzO1x0aWYgKGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxuJiM0MztcdCAgICBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xuJiM0MztcdFx0d2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4mIzQzO1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDApO1xuJiM0MztcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsMTAgJiM0MzsxNTk2LDEyIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gaW50XG4gaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXB2c2gpXG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuJiM0MztcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4gXHRzdHJ1Y3QgcnQ2X2luZm9cdCpydDtcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IHdsZW47XG4gXHRpbnQgcmM7XG4gXHRpbnQgbG9jYWw7XG4gXHRpbnQgcnRfbW9kZTtcbkBAIC0xNjAwLDcgJiM0MzsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7XG4mIzQzO1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE2MTcsNyAmIzQzOzE2MjgsNyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIElQX1ZTX1JUX01PREVfTE9DQUwgfCBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8XG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9SRFIgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTDtcbiBcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLVx1MDAzZWlwdnMsIGNwLVx1MDAzZWFmLCBza2IsIGNwLVx1MDAzZWRlc3QsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTtcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcbkBAIC0xNjQ4LDE0ICYjNDM7MTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0fVxuIFxuJiM0MztcdHdsZW4gPSBjaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XG4mIzQzO1x0XHR3bGVuICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbiYjNDM7XHRcdGhhc19wb3J0cyA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKHNrYl9jb3coc2tiLCBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4tXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7XG4mIzQzO1x0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXG4gXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xuIFx0c2tiLVx1MDAzZWlnbm9yZV9kZiA9IDE7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuaW5kZXggN2FlNjhkNjA1ODZhMjMuLjhhM2I5ZTMzZTk0Zjc3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG5AQCAtNDI3LDcgJiM0Mzs0MjcsNiBAQCBzdGF0aWMgdm9pZCBuZl9jdF9leHBlY3RfaW5zZXJ0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsXG4gXHRcdGV4cC1cdTAwM2V0aW1lb3V0ICYjNDM7PSBoZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtleHAtXHUwMDNlY2xhc3NdLnRpbWVvdXQgKiBIWjtcbiBcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZleHAtXHUwMDNlbG5vZGUsIFx1MDAyNm1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGF0aW9ucyk7XG4tXHRtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwLVx1MDAzZWNsYXNzXSYjNDM7JiM0Mzs7XG4gXG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZXhwLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtoXSk7XG4gXHRjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG5AQCAtNTM0LDYgJiM0Mzs1MzMsNyBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSYjNDM7JiM0Mzs7XG4gXHRuZl9jdF9leHBlY3RfaW5zZXJ0KGV4cGVjdCwgbWFzdGVyX2hlbHApO1xuIFxuIFx0bmZfY3RfZXhwZWN0X2V2ZW50X3JlcG9ydChJUEVYUF9ORVcsIGV4cGVjdCwgcG9ydGlkLCByZXBvcnQpO1xuQEAgLTU0Niw2ICYjNDM7NTQ2LDM5IEBAIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KTtcbiBcbiYjNDM7aW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscDtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiYjNDM7XHRtYXN0ZXJfaGVscCA9IG5mY3RfaGVscChleHBlY3RbMF0tXHUwMDNlbWFzdGVyKTtcbiYjNDM7XHRpZiAoIW1hc3Rlcl9oZWxwIHx8IG1hc3Rlcl9oZWxwICE9IG5mY3RfaGVscChleHBlY3RbMV0tXHUwMDNlbWFzdGVyKSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IF9fbmZfY3RfZXhwZWN0X2NoZWNrKGV4cGVjdFtpXSwgbWFzdGVyX2hlbHAsIGZsYWdzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGkgPT0gMSlcbiYjNDM7XHRcdFx0XHRtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0WzBdLVx1MDAzZWNsYXNzXS0tO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHBlY3RbaV0tXHUwMDNlY2xhc3NdJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRuZl9jdF9leHBlY3RfaW5zZXJ0KGV4cGVjdFtpXSwgbWFzdGVyX2hlbHApO1xuJiM0MztcdFx0bmZfY3RfZXhwZWN0X2V2ZW50X3JlcG9ydChJUEVYUF9ORVcsIGV4cGVjdFtpXSwgMCwgMCk7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIpO1xuJiM0MztcbiB2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3koYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcbiBcdFx0XHRcdCAgdm9pZCAqZGF0YSlcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuaW5kZXggZjNmOTBhODY2MzM4OTQuLmU0YTcwZDFkNzdiMGI5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5AQCAtMTY2Myw3ICYjNDM7MTY2Myw3IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0dW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjtcbiBcdHVuc2lnbmVkIGludCBtc2dsZW4sIG9yaWdsZW47XG4gXHRjb25zdCBjaGFyICpkcHRyLCAqZW5kO1xuLVx0czE2IGRpZmYsIHRkaWZmID0gMDtcbiYjNDM7XHRzMzIgZGlmZiwgdGRpZmYgPSAwO1xuIFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcbiBcdHVuc2lnbmVkIGxvbmcgY2xlbjtcbiBcdGJvb2wgdGVybTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jXG5pbmRleCBhZWEwMmY2YWZmMDkyYS4uMTMzYmQ3MTNmZTBjMjkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcbkBAIC0zMjEsNyAmIzQzOzMyMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NpcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZfbmF0X3NpcF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLVx0XHRcdFx0ICBzMTYgb2ZmKVxuJiM0MztcdFx0XHRcdCAgczMyIG9mZilcbiB7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsIFx1MDAyNmN0aW5mbyk7XG5AQCAtNTkyLDYgJiM0Mzs1OTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX25hdF9zZHBfbWVkaWEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtZWRpYWxlbixcbiBcdFx0XHRcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpydHBfYWRkcilcbiB7XG4mIzQzO1x0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9wYWlyWzJdID0geyBydHBfZXhwLCBydGNwX2V4cCB9O1xuIFx0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87XG4gXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCBcdTAwMjZjdGluZm8pO1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbkBAIC02MjIsMjQgJiM0Mzs2MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRydHBfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCk7XG4tXHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsXG4tXHRcdFx0XHRcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHBvcnQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCAmIzQzOyAxKTtcbi1cdFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsXG4tXHRcdFx0XHRcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHJ0cF9wYWlyLFxuJiM0MztcdFx0XHRcdFx0XHRORl9DVF9FWFBfRl9TS0lQX01BU1RFUik7XG4gXHRcdGlmIChyZXQgPT0gMClcbiBcdFx0XHRicmVhaztcbi1cdFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xuLVx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4mIzQzO1x0XHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4mIzQzO1x0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRwb3J0ID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGE5ZWFmOTQ1NWM3NzgzLi5hZjM1N2Y2YzUwNzBiMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTQ1LDggJiM0Mzs0NSw2IEBAIGVudW0ge1xuIFx0TkZUX1ZBTElEQVRFX0RPLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCByaGx0YWJsZSBuZnRfb2JqbmFtZV9odDtcbi1cbiBzdGF0aWMgdTMyIG5mdF9jaGFpbl9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTtcbiBzdGF0aWMgdTMyIG5mdF9jaGFpbl9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCk7XG4gc3RhdGljIGludCBuZnRfY2hhaW5faGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKiwgY29uc3Qgdm9pZCAqKTtcbkBAIC0xNjM1LDYgJiM0MzsxNjMzLDEwIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jaGFpbl9odDtcbiBcbiYjNDM7XHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQsIFx1MDAyNm5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX29ial9odDtcbiYjNDM7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlc2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VvYmplY3RzKTtcbkBAIC0xNjUzLDYgJiM0MzsxNjU1LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3dGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnRhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNm5mdF9uZXQtXHUwMDNldGFibGVzKTtcbiBcdHJldHVybiAwO1xuIGVycl90cmFuczpcbiYjNDM7XHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQpO1xuJiM0MztlcnJfb2JqX2h0OlxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnNfaHQpO1xuIGVycl9jaGFpbl9odDpcbiBcdGtmcmVlKHRhYmxlLVx1MDAzZXVkYXRhKTtcbkBAIC0xODE5LDYgJiM0MzsxODIzLDcgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX3RhYmxlX2Rlc3Ryb3koc3RydWN0IG5mdF90YWJsZSAqdGFibGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJobHRhYmxlX2Rlc3Ryb3koXHUwMDI2dGFibGUtXHUwMDNlY2hhaW5zX2h0KTtcbiYjNDM7XHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQpO1xuIFx0a2ZyZWUodGFibGUtXHUwMDNlbmFtZSk7XG4gXHRrZnJlZSh0YWJsZS1cdTAwM2V1ZGF0YSk7XG4gXHRrZnJlZSh0YWJsZSk7XG5AQCAtODA4Niw3ICYjNDM7ODA5MSw3IEBAIHZvaWQgbmZ0X3VucmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7XG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCB1MzIgb2JqdHlwZSxcbiBcdFx0XHRcdCAgdTggZ2VubWFzaylcbiB7XG5AQCAtODEwMiw3ICYjNDM7ODEwNyw3IEBAIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAgICAgIWxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChuZXQpKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3QgPSByaGx0YWJsZV9sb29rdXAoXHUwMDI2bmZ0X29iam5hbWVfaHQsIFx1MDAyNmssIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4mIzQzO1x0bGlzdCA9IHJobHRhYmxlX2xvb2t1cChcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuIFx0aWYgKCFsaXN0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC04MzgyLDcgJiM0Mzs4Mzg3LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3b2JqKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl90cmFucztcbiBcbi1cdGVyciA9IHJobHRhYmxlX2luc2VydChcdTAwMjZuZnRfb2JqbmFtZV9odCwgXHUwMDI2b2JqLVx1MDAzZXJobGhlYWQsXG4mIzQzO1x0ZXJyID0gcmhsdGFibGVfaW5zZXJ0KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQsIFx1MDAyNm9iai1cdTAwM2VyaGxoZWFkLFxuIFx0XHRcdCAgICAgIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9vYmpfaHQ7XG5AQCAtODU2Nyw4ICYjNDM7ODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBpbmZvLVx1MDAzZWV4dGFjaztcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIoaW5mby1cdTAwM2VuZXQpO1xuIFx0dTggZmFtaWx5ID0gaW5mby1cdTAwM2VuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4tXHRjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmV0O1xuJiM0MztcdHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IG5mdF9vYmplY3QgKm9iajtcbiBcdHN0cnVjdCBza19idWZmICpza2IyO1xuIFx0dTMyIG9ianR5cGU7XG5AQCAtMTA0MzcsOSAmIzQzOzEwNDQyLDkgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9jaGFpbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxuIFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiYjNDM7c3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF90YWJsZSAqdGFibGUsIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4ge1xuLVx0cmhsdGFibGVfcmVtb3ZlKFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCwgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcbiYjNDM7XHRyaGx0YWJsZV9yZW1vdmUoXHUwMDI2dGFibGUtXHUwMDNlb2JqbmFtZV9odCwgXHUwMDI2b2JqLVx1MDAzZXJobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4gXHRsaXN0X2RlbF9yY3UoXHUwMDI2b2JqLVx1MDAzZWxpc3QpO1xuIH1cbiBcbkBAIC0xMTEyNCw3ICYjNDM7MTExMjksNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMT0JKOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWU9CSjpcbi1cdFx0XHRuZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4mIzQzO1x0XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4gXHRcdFx0bmZfdGFibGVzX29ial9ub3RpZnkoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfb2JqKHRyYW5zKSxcbiBcdFx0XHRcdFx0ICAgICB0cmFucy1cdTAwM2Vtc2dfdHlwZSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTE0MTYsNyAmIzQzOzExNDIxLDcgQEAgc3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxuIFx0XHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRuZnRfdXNlX2RlY19yZXN0b3JlKFx1MDAyNnRhYmxlLVx1MDAzZXVzZSk7XG4tXHRcdFx0XHRuZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4mIzQzO1x0XHRcdFx0bmZ0X29ial9kZWwodGFibGUsIG5mdF90cmFuc19vYmoodHJhbnMpKTtcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxPQko6XG5AQCAtMTIwNDMsNyAmIzQzOzEyMDQ4LDcgQEAgc3RhdGljIHZvaWQgX19uZnRfcmVsZWFzZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuIFx0XHRuZnRfc2V0X2Rlc3Ryb3koXHUwMDI2Y3R4LCBzZXQpO1xuIFx0fVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmUsIFx1MDAyNnRhYmxlLVx1MDAzZW9iamVjdHMsIGxpc3QpIHtcbi1cdFx0bmZ0X29ial9kZWwob2JqKTtcbiYjNDM7XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBvYmopO1xuIFx0XHRuZnRfdXNlX2RlYyhcdTAwMjZ0YWJsZS1cdTAwM2V1c2UpO1xuIFx0XHRuZnRfb2JqX2Rlc3Ryb3koXHUwMDI2Y3R4LCBvYmopO1xuIFx0fVxuQEAgLTEyMjI1LDEwICYjNDM7MTIyMzAsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl90YWJsZXNfbW9kdWxlX2luaXQodm9pZClcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX25ldGRldl9ub3RpZmllcjtcbiBcbi1cdGVyciA9IHJobHRhYmxlX2luaXQoXHUwMDI2bmZ0X29iam5hbWVfaHQsIFx1MDAyNm5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4tXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yaHRfb2JqbmFtZTtcbi1cbiBcdGVyciA9IG5mdF9vZmZsb2FkX2luaXQoKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX29mZmxvYWQ7XG5AQCAtMTIyNTEsOCAmIzQzOzEyMjUyLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpXG4gZXJyX25ldGxpbmtfbm90aWZpZXI6XG4gXHRuZnRfb2ZmbG9hZF9leGl0KCk7XG4gZXJyX29mZmxvYWQ6XG4tXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm5mdF9vYmpuYW1lX2h0KTtcbi1lcnJfcmh0X29iam5hbWU6XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZuZl90YWJsZXNfZmxvd3RhYmxlX25vdGlmaWVyKTtcbiBlcnJfbmV0ZGV2X25vdGlmaWVyOlxuIFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcbkBAIC0xMjI3NCw3ICYjNDM7MTIyNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfdGFibGVzX21vZHVsZV9leGl0KHZvaWQpXG4gXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2bmZfdGFibGVzX25ldF9vcHMpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ0cmFuc19nY193b3JrKTtcbiBcdHJjdV9iYXJyaWVyKCk7XG4tXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm5mdF9vYmpuYW1lX2h0KTtcbiBcdG5mX3RhYmxlc19jb3JlX21vZHVsZV9leGl0KCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggMzkxNTM5YTFjZWFhNzcuLjhhNDQ3MmZkNzdkOWYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yNTksOSAmIzQzOzI1OSw3IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG4gXHRcdFx0XHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgcmVtYWluZGVyLCBkZWx0YSwgaztcbiBcdHN0cnVjdCBuZnRfZGF0YSBtYXNrID0ge307XG4tXHRfX2JlMzIgcmVtYWluZGVyX21hc2s7XG4gXG4gXHRpZiAocHJpdl9sZW4gPT0gZmllbGRfbGVuKSB7XG4gXHRcdG1lbXNldChcdTAwMjZyZWctXHUwMDNlbWFzaywgMHhmZiwgcHJpdl9sZW4pO1xuQEAgLTI3MCwxNSAmIzQzOzI2OCw3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdG1lbXNldChcdTAwMjZtYXNrLCAweGZmLCBmaWVsZF9sZW4pO1xuLVx0cmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTtcbi1cdGlmIChyZW1haW5kZXIpIHtcbi1cdFx0ayA9IHByaXZfbGVuIC8gc2l6ZW9mKHUzMik7XG4tXHRcdGRlbHRhID0gZmllbGRfbGVuIC0gcHJpdl9sZW47XG4tXHRcdHJlbWFpbmRlcl9tYXNrID0gaHRvbmwofigoMSBcdTAwM2NcdTAwM2MgKGRlbHRhICogQklUU19QRVJfQllURSkpIC0gMSkpO1xuLVx0XHRtYXNrLmRhdGFba10gPSAoX19mb3JjZSB1MzIpcmVtYWluZGVyX21hc2s7XG4tXHR9XG4tXG4mIzQzO1x0bWVtc2V0KFx1MDAyNm1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcbiBcdG1lbWNweShcdTAwMjZyZWctXHUwMDNlbWFzaywgXHUwMDI2bWFzaywgZmllbGRfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG5pbmRleCAyNzA0YjRiNjBkMWUwNC4uOWFmMGZhODk1ZjczMDIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSB7XG4gXHRyZWZjb3VudF90IHVzZTtcbiBcdHVfaW50OF90IGZhbWlseTtcbiBcdGJvb2wgcm5kX2luaXRpYWxpemVkO1xuJiM0MztcdGJvb2wgcmF0ZW1hdGNoO1xuIFxuIFx0c3RydWN0IGhhc2hsaW1pdF9jZmczIGNmZztcdC8qIGNvbmZpZyAqL1xuIFxuQEAgLTMyMyw2ICYjNDM7MzI0LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXG4gXHRcdGt2ZnJlZShoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuJiM0MztcdGhpbmZvLVx1MDAzZXJhdGVtYXRjaCA9ICEhKGNmZy1cdTAwM2Vtb2RlIFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZoaW5mby1cdTAwM2Vsb2NrKTtcbiBcbiBcdHN3aXRjaCAocmV2aXNpb24pIHtcbkBAIC04NzIsNyAmIzQzOzg3NCwxMCBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovXG4tXHRpZiAocmV2aXNpb24gXHUwMDNlPSAzIFx1MDAyNlx1MDAyNiBjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZW1vZGUgXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIKSB7XG4mIzQzO1x0XHRpZiAocmV2aXNpb24gXHUwMDNjIDMpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdFx0aWYgKGNmZy1cdTAwM2VhdmcgPT0gMCB8fCBjZmctXHUwMDNlYXZnIFx1MDAzZSBVMzJfTUFYKSB7XG4gXHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtpbnZhbGlkIHJhdGVcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuQEAgLTkwNSw2ICYjNDM7OTEwLDE1IEBAIHN0YXRpYyBpbnQgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aGFzaGxpbWl0X211dGV4KTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICgoY2ZnLVx1MDAzZW1vZGUgXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAhKCpoaW5mbyktXHUwMDNlcmF0ZW1hdGNoKSB8fFxuJiM0MztcdFx0ICAgICghKGNmZy1cdTAwM2Vtb2RlIFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgICAoKmhpbmZvKS1cdTAwM2VyYXRlbWF0Y2gpKSB7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xuJiM0MztcdFx0XHRodGFibGVfcHV0KCpoaW5mbyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhhc2hsaW1pdF9tdXRleCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5pbmRleCBmYjFjNTlkNDU1NjdhZi4uNDQ5YzUxOGJkOTQ3ZGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTYxNyw3ICYjNDM7NjE3LDExIEBAIGlwIC02IC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6Mzo6MVxuIGlwIC1uZXQgXCYjMzQ7JG5zMlwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4yLjFcbiBpcCAtNiAtbmV0IFwmIzM0OyRuczJcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGRlYWQ6Mjo6MVxuIFxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4mIzQzO1x0JiMzOTttZXRhIG9pZiB0dW4wIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5O1xuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4mIzQzO1x0JiMzOTttZXRhIG9pZiB0dW42IHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuNiBhY2NlcHQmIzM5O1xuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbiBcdCYjMzk7bWV0YSBvaWYgXCYjMzQ7dmV0aDBcJiMzNDsgdGNwIHNwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfcmVwbCBhY2NlcHQmIzM5O1xuQEAgLTYyOSw3ICYjNDM7NjMzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSBcJiMzNDtJUElQIHR1bm5lbFwmIzM0OzsgdGhlblxuIGZpXG4gXG4gaWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSA2IFwmIzM0O1tkZWFkOjI6Ojk5XVwmIzM0OyAxMjM0NTsgdGhlblxuLVx0ZWNobyBcJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbFwmIzM0O1xuJiM0MztcdGNoZWNrX2NvdW50ZXJzIFwmIzM0O2Zsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsXCYjMzQ7XG4gZWxzZVxuIFx0ZWNobyBcJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4gXHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXRcbkBAIC02NDIsNiAmIzQzOzY0Niw4IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdmV0aDEuMTAgdXBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjAuMS8yNCBkZXYgdmV0aDEuMTBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIGZlZTE6NDo6MS82NCBkZXYgdmV0aDEuMTAgbm9kYWRcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbiYjNDM7XHQmIzM5O21ldGEgb2lmIHZldGgxLjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdmV0aDEuMTAgYWNjZXB0JiMzOTtcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuMC4xMCB0eXBlIGlwaXAgbG9jYWwgMTkyLjE2OC4yMC4xIHJlbW90ZSAxOTIuMTY4LjIwLjJcbkBAIC02NDksNiAmIzQzOzY1NSw4IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdHVuMC4xMCB1cFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgMTkyLjE2OC4yMDAuMS8yNCBkZXYgdHVuMC4xMFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjAwLjJcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAvMTAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuJiM0MztcdCYjMzk7bWV0YSBvaWYgdHVuMC4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCYjMzk7XG4gaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAmIzM5O21ldGEgb2lmIHR1bjAuMTAgYWNjZXB0JiMzOTtcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjEgcmVtb3RlIGZlZTE6NDo6MiBlbmNhcGxpbWl0IG5vbmVcbkBAIC02NTYsNiAmIzQzOzY2NCw4IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdHVuNi4xMCB1cFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZmVlMTo1OjoxLzY0IGRldiB0dW42LjEwIG5vZGFkXG4gaXAgLTYgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyByb3V0ZSBkZWxldGUgZGVmYXVsdFxuIGlwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MlxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4mIzQzO1x0JiMzOTttZXRhIG9pZiB0dW42LjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuNi4xMCBhY2NlcHQmIzM5O1xuIFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBhZGQgbGluayB2ZXRoMCBuYW1lIHZldGgwLjEwIHR5cGUgdmxhbiBpZCAxMFxuQEAgLTY4Myw3ICYjNDM7NjkzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSBcJiMzNDtJUElQIHR1bm5lbCBvdmVyIHZsYW5cJiMzNDs7IHRoZW5cbiBmaVxuIFxuIGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgNiBcJiMzNDtbZGVhZDoyOjo5OV1cJiMzNDsgMTIzNDU7IHRoZW5cbi1cdGVjaG8gXCYjMzQ7UEFTUzogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIElQNklQNiB0dW5uZWwgb3ZlciB2bGFuXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfY291bnRlcnMgXCYjMzQ7ZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIElQNklQNiB0dW5uZWwgb3ZlciB2bGFuXCYjMzQ7XG4gZWxzZVxuIFx0ZWNobyBcJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsIG92ZXIgdmxhblwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuIFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgbGlzdCBydWxlc2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfTkFUX1NJUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9OQVRfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7c2N0cF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O25mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXImIzM0OywKICAgICYjMzQ7bmF0X3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mX25hdF9zZHBfbWVkaWEmIzM0OywKICAgICYjMzQ7bmZ0X29ial9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdvYmomIzM0OywKICAgICYjMzQ7bmZ0X29ial9kZWwmIzM0OywKICAgICYjMzQ7aGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG11bHRpcGxlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMsIGluY2x1ZGluZyBJUFZTIGNvbm5lY3Rpb24gaGFuZGxpbmcgYW5kIElDTVAvY2hlY2tzdW0gcHJvY2Vzc2luZywgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGhhbmRsaW5nIGZvciBTSVAgYW5kIEguMzIzLCBuZl90YWJsZXMgb2JqZWN0IGxvb2t1cCBtZWNoYW5pc21zLCBhbmQgeHRfaGFzaGxpbWl0IG1hdGNoaW5nLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MWQ0OTQyYjg0YjViMmJmMWFjNzI4MGNmOWUxMDJlMjBkYTQ0NWYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMjM6Mzc6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgKaW5kZXggZGJjNjE0ZGZlMGQ1NjUuLmFhZmEwYzA0ZjkxN2ViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oCkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBuZl9uYXRfc2lwX2hvb2tzIHsKIAkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pOwogCiAJdm9pZCAoKnNlcV9hZGp1c3QpKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgczE2IG9mZik7CiYjNDM7CQkJICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMzMiBvZmYpOwogCiAJdW5zaWduZWQgaW50ICgqZXhwZWN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTI1LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyLmgmZ3Q7CQkvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovCiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CQkJLyogZm9yIHN0cnVjdCBpcHY2aGRyICovCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9yb3V0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcDZfZmliLmgmZ3Q7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKQogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgmZ3Q7CiAjZW5kaWYKQEAgLTE5NzIsOCAmIzQzOzE5NzQsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQkgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQkgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwKLQkJICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiYjNDM7CQkgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtMTk4Niw4ICYjNDM7MTk4OCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCSAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LAotCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMjA1OSwxNSAmIzQzOzIwNjEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcCkKIH0KIAogdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTsKJiM0MzsJCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgIGJvb2wgaGFzX3BvcnRzKTsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpOwomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTsKLQogc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSkKIHsKIAlfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07CkBAIC0yMDkzLDYgJiM0MzsyMDk1LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pCiAJcmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZikKJiM0Mzt7CiYjNDM7CS8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqLwomIzQzOwlpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJLyogTE9DQUxfT1VUID8gKi8KJiM0MzsJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0xPT1BCQUNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi8KJiM0MzsJaWYgKGFmID09IEFGX0lORVQ2KSB7CiYjNDM7CQlpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS0mZ3Q7cnQ2aV9mbGFncyAmYW1wOyBSVEZfTE9DQUwpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKQomIzQzO3sKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTsKJiM0Mzt9CiYjNDM7CiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaAppbmRleCBjMDI0MzQ1YzliZDg2Mi4uMjZkNmJhYmQ5MmZjZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaApAQCAtMTYxLDYgJiM0MzsxNjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LAogCXJldHVybiBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoZXhwZWN0LCAwLCAwLCBmbGFncyk7CiB9CiAKJiM0MztpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0W10sCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50IGZsYWcpOwomIzQzOwogc3RydWN0IG5mX2Nvbm5faGVscDsKIHZvaWQgbmZfY3RfZXhwZWN0YXRpb25fZ2Moc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKaW5kZXggOWQ4NDQzNTRjNGQ5NTYuLjNiZTYxMjE0NWMxMzBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC0xMjk0LDYgJiM0MzsxMjk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5mdF91c2VfaW5jX3Jlc3RvcmUodTMyICp1c2UpCiAgKglAc2V0czogc2V0cyBpbiB0aGUgdGFibGUKICAqCUBvYmplY3RzOiBzdGF0ZWZ1bCBvYmplY3RzIGluIHRoZSB0YWJsZQogICoJQGZsb3d0YWJsZXM6IGZsb3cgdGFibGVzIGluIHRoZSB0YWJsZQomIzQzOyAqCUBvYmpuYW1lX2h0OiBoYXNodGFibGUgZm9yIG9iamVjdHMgbG9va3VwIGJ5IG5hbWUKICAqCUBoZ2VuZXJhdG9yOiBoYW5kbGUgZ2VuZXJhdG9yIHN0YXRlCiAgKglAaGFuZGxlOiB0YWJsZSBoYW5kbGUKICAqCUB1c2U6IG51bWJlciBvZiBjaGFpbiByZWZlcmVuY2VzIHRvIHRoaXMgdGFibGUKQEAgLTEzMTMsNiAmIzQzOzEzMTQsNyBAQCBzdHJ1Y3QgbmZ0X3RhYmxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzZXRzOwogCXN0cnVjdCBsaXN0X2hlYWQJCW9iamVjdHM7CiAJc3RydWN0IGxpc3RfaGVhZAkJZmxvd3RhYmxlczsKJiM0MzsJc3RydWN0IHJobHRhYmxlCQkJb2JqbmFtZV9odDsKIAl1NjQJCQkJaGdlbmVyYXRvcjsKIAl1NjQJCQkJaGFuZGxlOwogCXUzMgkJCQl1c2U7CkBAIC0xNDAwLDcgJiM0MzsxNDAyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpuZnRfb2JqX2RhdGEoY29uc3Qgc3RydWN0IG5mdF9vYmplY3QgKm9iaikKICNkZWZpbmUgbmZ0X2V4cHJfb2JqKGV4cHIpCSooKHN0cnVjdCBuZnRfb2JqZWN0ICoqKW5mdF9leHByX3ByaXYoZXhwcikpCiAKIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIG9ianR5cGUsCiAJCQkJICB1OCBnZW5tYXNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuYwppbmRleCAxODNlOGEzZmYyYmFiZC4uNmJjZDY3MzQ3NjliNTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jCkBAIC0xODIsNiAmIzQzOzE4Miw3IEBAIHN0YXRpYyBpbnQgbmF0X3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLAogCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwKQogewomIzQzOwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07CiAJc3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyICppbmZvID0gbmZjdF9oZWxwX2RhdGEoY3QpOwogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJaW50IGk7CkBAIC0yMjcsMjIgJiM0MzsyMjgsMTMgQEAgc3RhdGljIGludCBuYXRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQlpbnQgcmV0OwogCiAJCXJ0cF9leHAtJmd0O3R1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7Ci0JCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsIDApOwomIzQzOwkJcnRjcF9leHAtJmd0O3R1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCAmIzQzOyAxKTsKJiM0MzsJCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsIDApOwogCQlpZiAocmV0ID09IDApIHsKLQkJCXJ0Y3BfZXhwLSZndDt0dXBsZS5kc3QudS51ZHAucG9ydCA9Ci0JCQkgICAgaHRvbnMobmF0ZWRfcG9ydCAmIzQzOyAxKTsKLQkJCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwLCAwKTsKLQkJCWlmIChyZXQgPT0gMCkKLQkJCQlicmVhazsKLQkJCWVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHsKLQkJCQluZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmIChyZXQgJmx0OyAwKSB7Ci0JCQkJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTsKLQkJCQluYXRlZF9wb3J0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIGlmIChyZXQgIT0gLUVCVVNZKSB7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9IGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0gZWxzZSBpZiAocmV0ICZsdDsgMCkgewogCQkJbmF0ZWRfcG9ydCA9IDA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKaW5kZXggODIzMTMxN2IwZjFmNGIuLmIyZDc3OTczMjcyZDI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKQEAgLTEwMDUsNyAmIzQzOzEwMDUsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKICNlbmRpZgogCWlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpCiAJCWlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoZGF0YSwgc2V0KSwgZXh0KTsKLQlpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKQomIzQzOwlpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpICZhbXA7JmFtcDsgIWV4dC0mZ3Q7dGFyZ2V0KQogCQlpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZGF0YSwgc2V0KSwgZXh0KTsKIAlpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKQogCQlpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKGRhdGEsIHNldCksIGV4dCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggYjBlMDBiZTg1Y2IxMmMuLjExY2JkYmFmNTYxZGFmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCkBAIC0zNjcsNyAmIzQzOzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApAQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKaW5kZXggNmVkMjYyMjM2M2YwZDYuLjM2YzVjYmEwM2Y1YmNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTcwLDI1ICYjNDM7NzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogICogYnVja2V0IG9yIGhhc2ggdGFibGUKICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZQogICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW4KJiM0MzsgKiAtIG9uIHJlc2l6ZSwgYnVja2V0IGZyb20gdGhlIG9sZCB0YWJsZSBpcyBsb2NrZWQgYmVmb3JlIGJ1Y2tldCBmcm9tIHRoZQomIzQzOyAqIG5ldyB0YWJsZQogICogLSBjcC0mZ3Q7bG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLSZndDtmbGFncywgY3AtJmd0O2Rlc3QKICAqLwogCi0vKiBMb2NrIGNvbm5fdGFiIGJ1Y2tldCBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2ggKi8KJiM0MzsvKioKJiM0MzsgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaAomIzQzOyAqIEB0OgkJaGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZQomIzQzOyAqIEB0MjoJCWhhc2ggdGFibGUgZm9yIGhuMSwgbmV3X3RibCB3aGVuIG5ld19oYXNoMj10cnVlCiYjNDM7ICogQGNwOgkJY29ubmVjdGlvbgomIzQzOyAqIEBoYXNoX2tleToJaGFzaCBrZXkgZm9yIGhuMAomIzQzOyAqIEBoYXNoX2tleTI6CWhhc2gga2V5IGZvciBobjEKJiM0MzsgKiBAdXNlMjoJdXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kCiYjNDM7ICogQG5ld19oYXNoOgltb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgKiBAbmV3X2hhc2gyOgltb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgKiBAaGVhZF9yZXQ6CXJldHVybmVkIGhlYWQgZm9yIGhuMAomIzQzOyAqIEBoZWFkMl9yZXQ6CXJldHVybmVkIGhlYWQgZm9yIGhuMQomIzQzOyAqCiYjNDM7ICogV2Ugc3VwcG9ydCAzIG1vZGVzOgomIzQzOyAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmcKJiM0MzsgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZwomIzQzOyAqIC0gc2VlayBobjAgYW5kIGhhc2ggaG4xLCB1c2VkIHdoZW4gZm9yd2FyZGluZyBtZXRob2QgaXMgY2hhbmdlZAomIzQzOyAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCi1jb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LAotCSAgICAgIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCwKLQkgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldCkKJiM0Mztjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiYjNDM7CSAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLAomIzQzOwkgICAgICBib29sIG5ld19oYXNoMiwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCwKJiM0MzsJICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpCiB7CiAJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjsKIAl1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyOwotCXN0cnVjdCBpcF92c19yaHQgKnQyID0gdDsKLQl1MzIgaWR4LCBpZHgyOwomIzQzOwlpbnQgaWR4ID0gMCwgaWR4MiA9IDA7CiYjNDM7CiYjNDM7CS8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MgomIzQzOwkgKiBpcyBmb3IgbmV3IHRhYmxlCiYjNDM7CSAqLwomIzQzOwlpZiAobmV3X2hhc2gyICZhbXA7JmFtcDsgdXNlMiAmYW1wOyZhbXA7IHQgIT0gdDIpCiYjNDM7CQlpZHgyJiM0MzsmIzQzOzsKIAotCWlkeCA9IGhhc2hfa2V5ICZhbXA7IHQtJmd0O21hc2s7Ci0JaWYgKHVzZTIpCi0JCWlkeDIgPSBoYXNoX2tleTIgJmFtcDsgdC0mZ3Q7bWFzazsKLQllbHNlCi0JCWlkeDIgPSBpZHg7CiAJaWYgKCFuZXdfaGFzaCkgewogCQkvKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGJ1Y2tldCBpbiB0aGUgcmlnaHQgdGFibGUgKi8KIApAQCAtMTAwLDQ2ICYjNDM7MTIwLDQ1IEBAIGNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksCiAJCQkgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MgogCQkJICogZm9yIHByb3BlciBsb2NrIG9yZGVyaW5nIGZvciBoZWFkcy4KIAkJCSAqLwotCQkJaWR4ID0gaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzazsKLQkJCWlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKLQkJfQotCQlpZiAodXNlMikgewotCQkJaWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkgewotCQkJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCi0JCQkJdDIgPSByY3VfZGVyZWZlcmVuY2UodDItJmd0O25ld190YmwpOwotCQkJCWlkeDIgPSBoYXNoX2tleTIgJmFtcDsgdDItJmd0O21hc2s7Ci0JCQkJaWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlkeDIgPSBpZHg7CiYjNDM7CQkJaWR4JiM0MzsmIzQzOzsKIAkJfQogCX0KJiM0MzsJaWYgKHVzZTIgJmFtcDsmYW1wOyAhbmV3X2hhc2gyICZhbXA7JmFtcDsgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7CiYjNDM7CQkvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqLwomIzQzOwkJdDIgPSByY3VfZGVyZWZlcmVuY2UodDItJmd0O25ld190YmwpOwomIzQzOwkJaWR4MiYjNDM7JiM0Mzs7CiYjNDM7CX0KIAomIzQzOwlpZiAoIXVzZTIpCiYjNDM7CQlpZHgyID0gaWR4OwogCWhlYWQgPSB0LSZndDtidWNrZXRzICYjNDM7IChoYXNoX2tleSAmYW1wOyB0LSZndDttYXNrKTsKIAloZWFkMiA9IHVzZTIgPyB0Mi0mZ3Q7YnVja2V0cyAmIzQzOyAoaGFzaF9rZXkyICZhbXA7IHQyLSZndDttYXNrKSA6IGhlYWQ7CiAKLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JLyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi8KLQotCWlmIChpZHggJmx0Oz0gaWR4MikgewomIzQzOwlpZiAoaWR4ICZndDsgaWR4MiB8fCAoaGVhZCAmZ3Q7IGhlYWQyICZhbXA7JmFtcDsgaWR4ID09IGlkeDIpKSB7CiYjNDM7CQlobGlzdF9ibF9sb2NrKGhlYWQyKTsKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKLQkJaWYgKGhlYWQgIT0gaGVhZDIpCi0JCQlobGlzdF9ibF9sb2NrKGhlYWQyKTsKIAl9IGVsc2UgewotCQlobGlzdF9ibF9sb2NrKGhlYWQyKTsKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKJiM0MzsJCWlmIChoZWFkICE9IGhlYWQyKQomIzQzOwkJCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCX0KIAlpZiAoIW5ld19oYXNoKSB7CiYjNDM7CQlib29sIGNoYW5nZWQ7CiYjNDM7CiAJCS8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi8KIAkJaGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwotCQloYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwomIzQzOwkJY2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldzsKJiM0MzsJCWlmICh1c2UyICZhbXA7JmFtcDsgIW5ld19oYXNoMikgewomIzQzOwkJCWhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiYjNDM7CQkJY2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaGFzaF9rZXlfbmV3MiA9IGhhc2hfa2V5MjsKJiM0MzsJCX0KIAkJLyogSGFzaCBjaGFuZ2VkID8gKi8KLQkJaWYgKGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldyB8fAotCQkgICAgKGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyICZhbXA7JmFtcDsgdXNlMikpIHsKJiM0MzsJCWlmIChjaGFuZ2VkKSB7CiAJCQlpZiAoaGVhZCAhPSBoZWFkMikKIAkJCQlobGlzdF9ibF91bmxvY2soaGVhZDIpOwogCQkJaGxpc3RfYmxfdW5sb2NrKGhlYWQpOwotCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCQloYXNoX2tleSA9IGhhc2hfa2V5X25ldzsKIAkJCWhhc2hfa2V5MiA9IGhhc2hfa2V5X25ldzI7CiAJCQlnb3RvIHJldHJ5OwpAQCAtMTU1LDcgJiM0MzsxNzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLAogCWlmIChoZWFkICE9IGhlYWQyKQogCQlobGlzdF9ibF91bmxvY2soaGVhZDIpOwogCWhsaXN0X2JsX3VubG9jayhoZWFkKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAogc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpOwpAQCAtMjY4LDggJiM0MzsyODYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCQl1c2UyID0gZmFsc2U7CiAJfQogCi0JY29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLywKLQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwljb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLAomIzQzOwkJICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiAKIAljcC0mZ3Q7ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX0hBU0hFRDsKIAlXUklURV9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXksIGhhc2hfa2V5KTsKQEAgLTI4MCw2ICYjNDM7Mjk5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlLCBoZWFkMik7CiAKIAljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKIAlyZXQgPSAxOwogCiAJLyogU2NoZWR1bGUgcmVzaXppbmcgaWYgbG9hZCBpbmNyZWFzZXMgKi8KQEAgLTMwNiwxOCAmIzQzOzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCQlyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZSgmYW1wO2NwLSZndDtyZWZjbnQpOwogCiAJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiAKIAl0ID0gcmN1X2RlcmVmZXJlbmNlKGlwdnMtJmd0O2Nvbm5fdGFiKTsKIAloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKIAloYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiAJdXNlMiA9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKTsKIAotCWNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLAotCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwljb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLywKJiM0MzsJCSAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKIAogCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0hBU0hFRCkgewogCQkvKiBEZWNyZWFzZSByZWZjbnQgYW5kIHVubGluayBjb25uIG9ubHkgaWYgd2UgYXJlIGxhc3QgdXNlciAqLwotCQlpZiAocmVmY291bnRfZGVjX2lmX29uZSgmYW1wO2NwLSZndDtyZWZjbnQpKSB7CiYjNDM7CQlpZiAodXNlMiA9PSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHJlZmNvdW50X2RlY19pZl9vbmUoJmFtcDtjcC0mZ3Q7cmVmY250KSkgewogCQkJaGxpc3RfYmxfZGVsX3JjdSgmYW1wO2NwLSZndDtobjAubm9kZSk7CiAJCQlpZiAodXNlMikKIAkJCQlobGlzdF9ibF9kZWxfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlKTsKQEAgLTMyOCw2ICYjNDM7MzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAogCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiAKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjMyLDYgJiM0Mzs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydCkKIAlpbnQgbnRibDsKIAlpbnQgZGlyOwogCiYjNDM7cmVzdGFydDoKIAkvKiBObyBwYWNrZXRzIGZyb20gaW5zaWRlLCBzbyB3ZSBjYW4gZG8gaXQgaW4gMiBzdGVwcy4gKi8KIAlkaXIgPSB1c2UyID8gMSA6IDA7CiAKQEAgLTY4Niw2ICYjNDM7NzEwLDIzIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KQogCS8qIFByb3RlY3QgdGhlIGNwLSZndDtmbGFncyBtb2RpZmljYXRpb24gKi8KIAlzcGluX2xvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiAKJiM0MzsJLyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqLwomIzQzOwlpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHsKJiM0MzsJCXVzZTIgPSAhdXNlMjsKJiM0MzsJCWlmICh1c2UyKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJLyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovCiYjNDM7CQkJZ290byByZXN0YXJ0OwomIzQzOwkJfQomIzQzOwkJaWYgKGRpcikgewomIzQzOwkJCS8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovCiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJZGlyLS07CiYjNDM7CQkJZ290byBuZXh0X2RpcjsKJiM0MzsJCX0KJiM0MzsJCS8qIEp1c3QgZmluaXNoIGRpciAwICovCiYjNDM7CX0KJiM0MzsKIAkvKiBMb2NrIHNlcWNvdW50IG9ubHkgZm9yIHRoZSBvbGQgYnVja2V0LCBldmVuIGlmIHdlIGFyZSBvbiBuZXcgdGFibGUKIAkgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLgogCSAqLwpAQCAtNzUyLDYgJiM0Mzs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpCiAJCWdvdG8gbmV4dF9kaXI7CiB9CiAKJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovCiYjNDM7c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC0mZ3Q7aXB2czsKJiM0MzsJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjsKJiM0MzsJdTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyOwomIzQzOwlzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7CiYjNDM7CiYjNDM7CS8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi8KJiM0MzsJaWYgKChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fAomIzQzOwkgICAgLyogTm8gY2hhbmdlIGluIGRvdWJsZSBoYXNoaW5nID8gKi8KJiM0MzsJICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT0KJiM0MzsJICAgICgobmV3X2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBuZXdfZmxhZ3M7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJdCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLSZndDtjb25uX3RhYik7CiYjNDM7CWlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHsKJiM0MzsJCS8qIFN0b3AgZG91YmxlIGhhc2hpbmcgKi8KJiM0MzsJCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwomIzQzOwkJaGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwomIzQzOwomIzQzOwkJY29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLAomIzQzOwkJCSAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sCiYjNDM7CQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsKJiM0MzsJCS8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqLwomIzQzOwkJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiYjNDM7CQlXUklURV9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXksIGhhc2hfa2V5KTsKJiM0MzsJCWhsaXN0X2JsX2RlbF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUpOwomIzQzOwkJY3AtJmd0O2ZsYWdzID0gbmV3X2ZsYWdzOwomIzQzOwomIzQzOwkJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovCiYjNDM7CiYjNDM7CQloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKJiM0MzsKJiM0MzsJCXQyID0gcmN1X2RlcmVmZXJlbmNlKHQtJmd0O25ld190YmwpOwomIzQzOwkJaGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpOwomIzQzOwkJaGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7CiYjNDM7CiYjNDM7CQkvKiBDaGFuZ2UgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2tlZCBobjAgKi8KJiM0MzsJCWNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sCiYjNDM7CQkJICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIHRydWUgLyogbmV3X2hhc2gyICovLAomIzQzOwkJCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBuZXdfZmxhZ3M7CiYjNDM7CQlobGlzdF9ibF9hZGRfaGVhZF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUsIGhlYWQyKTsKJiM0MzsKJiM0MzsJCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBHZXQgZGVmYXVsdCBsb2FkIGZhY3RvciB0byBtYXAgY29ubl9jb3VudC91X3RocmVzaCB0byB0LSZndDtzaXplICovCiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykKIHsKQEAgLTEwMTQsNiAmIzQzOzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAlmbGFncyA9IGNwLSZndDtmbGFnczsKIAkvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqLwogCWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU1lOQykgewomIzQzOwkJLyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovCiYjNDM7CQljb25uX2ZsYWdzICZhbXA7PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7CiYjNDM7CiAJCS8qIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB0ZW1wbGF0ZSBhbmQgaXMgY3JlYXRlZAogCQkgKiBieSBzeW5jLCBwcmVzZXJ2ZSB0aGUgYWN0aXZpdHkgZmxhZy4KIAkJICovCkBAIC0xMDIxLDkgJiM0MzsxMTIwLDE4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogCQkJY29ubl9mbGFncyAmYW1wOz0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTsKIAkJLyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi8KIAkJZmxhZ3MgJmFtcDs9IH4oSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgSVBfVlNfQ09OTl9GX05PT1VUUFVUKTsKJiM0MzsJCWZsYWdzIHw9IGNvbm5fZmxhZ3M7CiYjNDM7CQkvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuCiYjNDM7CQkgKiBoYXBwZW4gb25seSB1bmRlciBsb2NrcwomIzQzOwkJICovCiYjNDM7CQlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9IQVNIRUQpCiYjNDM7CQkJaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljcC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZsYWdzIHw9IGNvbm5fZmxhZ3M7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAl9Ci0JZmxhZ3MgfD0gY29ubl9mbGFnczsKLQljcC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAljcC0mZ3Q7ZGVzdCA9IGRlc3Q7CiAKIAlJUF9WU19EQkdfQlVGKDcsICYjMzQ7QmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCAmIzM0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggYmFmYWI5MzQ1MWQwMzcuLjZiNzllMGM0ZDllMjg0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg2Nyw3ICYjNDM7ODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfQogCiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQomIzQzO3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKSk7CiB9CkBAIC05MjQsMTMgJiM0Mzs5MjQsMTMgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwKICAqIC0gaW5vdXQ6IDE9aW4tJmd0O291dCwgMD1vdXQtJmd0O2luCiAgKi8KIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KQomIzQzOwkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICBib29sIGhhc19wb3J0cykKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaAkgPSBpcF9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtJmd0O2lobCo0OwotCXN0cnVjdCBpY21waGRyICppY21waAkgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsKLQkJCQkJCSAgICAgIGljbXBfb2Zmc2V0KTsKJiM0MzsJc3RydWN0IGljbXBoZHIgKmljbXBoCSA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgdG9mZik7CiAJc3RydWN0IGlwaGRyICpjaXBoCSA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggJiM0MzsgMSk7CiYjNDM7CXVuc2lnbmVkIGludCBjb2ZmIF9fbWF5YmVfdW51c2VkID0gdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXBoZHIpOwogCiAJaWYgKGlub3V0KSB7CiAJCWlwaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7dmFkZHIuaXA7CkBAIC05NDUsOCAmIzQzOzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAl9CiAKIAkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0mZ3Q7cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0mZ3Q7cHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IGNpcGgtJmd0O3Byb3RvY29sKSB7CiYjNDM7CWlmIChoYXNfcG9ydHMpIHsKIAkJX19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCAmIzQzOyBjaXBoLSZndDtpaGwqNDsKIAogCQlpZiAoaW5vdXQpCkBAIC05NTcsNDggJiM0Mzs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiAJLyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi8KIAlpY21waC0mZ3Q7Y2hlY2tzdW0gPSAwOwotCWljbXBoLSZndDtjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpOwomIzQzOwlpY21waC0mZ3Q7Y2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpOwogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAlpZiAoaW5vdXQpCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKIH0KIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCkKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoCSA9IGlwdjZfaGRyKHNrYik7Ci0JdW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDsKLQl1bnNpZ25lZCBpbnQgb2ZmcwkgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki8KLQlpbnQgcHJvdG9jb2w7CiAJc3RydWN0IGljbXA2aGRyICppY21waDsKLQlzdHJ1Y3QgaXB2NmhkciAqY2lwaDsKLQl1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmczsKJiM0MzsJc3RydWN0IGlwdjZoZHIgKmNpaDsKIAotCWlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO2ljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgJmFtcDtmcmFnb2ZmcywgTlVMTCk7Ci0JaWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGljbXBfb2Zmc2V0KTsKLQlvZmZzID0gaWNtcF9vZmZzZXQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7Ci0JY2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTsKLQotCXByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsICZhbXA7b2ZmcywgLTEsICZhbXA7ZnJhZ29mZnMsIE5VTEwpOwomIzQzOwlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHRvZmYpOwomIzQzOwljaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O29mZik7CiAKIAlpZiAoaW5vdXQpIHsKIAkJaXBoLSZndDtzYWRkciA9IGNwLSZndDt2YWRkci5pbjY7Ci0JCWNpcGgtJmd0O2RhZGRyID0gY3AtJmd0O3ZhZGRyLmluNjsKJiM0MzsJCWNpaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7dmFkZHIuaW42OwogCX0gZWxzZSB7CiAJCWlwaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7ZGFkZHIuaW42OwotCQljaXBoLSZndDtzYWRkciA9IGNwLSZndDtkYWRkci5pbjY7CiYjNDM7CQljaWgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmluNjsKIAl9CiAKIAkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KLQlpZiAoIWZyYWdvZmZzICZhbXA7JmFtcDsgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8Ci0JCQkgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHsKLQkJX19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnMpOwomIzQzOwlpZiAoaGFzX3BvcnRzKSB7CiYjNDM7CQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O2xlbik7CiAKIAkJSVBfVlNfREJHKDExLCAmIzM0OyVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXG4mIzM0OywgX19mdW5jX18sCiAJCQkgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLApAQCAtMTAxMSwxOSAmIzQzOzEwMDIsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiAJLyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi8KIAlpY21waC0mZ3Q7aWNtcDZfY2tzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZhbXA7aXBoLSZndDtzYWRkciwgJmFtcDtpcGgtJmd0O2RhZGRyLAotCQkJCQkgICAgICBza2ItJmd0O2xlbiAtIGljbXBfb2Zmc2V0LAomIzQzOwkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB0b2ZmLAogCQkJCQkgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7Ci0Jc2tiLSZndDtjc3VtX3N0YXJ0ID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItJmd0O2hlYWQgJiM0MzsgaWNtcF9vZmZzZXQ7CiYjNDM7CXNrYi0mZ3Q7Y3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICYjNDM7IHRvZmY7CiAJc2tiLSZndDtjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAogCWlmIChpbm91dCkKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsCi0JCQkgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCwKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLSZndDtvZmYsCiAJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QdjYmIzM0Oyk7CiAJZWxzZQotCQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwKLQkJCSAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NiYjMzQ7KTsKIH0KICNlbmRpZgpAQCAtMTAzMywzNiAmIzQzOzEwMjIsNDEgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogICovCiBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQl1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsCi0JCQkJX191OCBwcm90b2NvbCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAomIzQzOwkJCQlzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLAotCQkJCXVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkJCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsCiYjNDM7CQkJCXVuc2lnbmVkIGludCB0b2ZmLCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKJiM0MzsJaW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7CiAJdW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QOwomIzQzOwl1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLSZndDtsZW47CiYjNDM7CWJvb2wgaGFzX3BvcnRzID0gZmFsc2U7CiAKIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpCiAJCWdvdG8gYWZ0ZXJfbmF0OwogCiAJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCi0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICZhbXA7JmFtcDsgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHsKIAkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwogCQlJUF9WU19EQkdfQlVGKDEsICYjMzQ7Rm9yd2FyZCBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcyFcbiYjMzQ7LAogCQkJICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8Ci0JICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkKLQkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsKLQlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpCiYjNDM7CWlmIChjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAomIzQzOwkgICAgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7CiYjNDM7CQljdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7CiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKQogCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAJaWYgKGFmID09IEFGX0lORVQ2KQotCQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7CiYjNDM7CQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTsKIAllbHNlCiAjZW5kaWYKLQkJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpOwomIzQzOwkJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cyk7CiAKIAlpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLSZndDtpcHZzLCBhZiwgc2tiLCBob29rbnVtKSkKIAkJZ290byBvdXQ7CkBAIC0xMDkwLDkgJiM0MzsxMDg0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsCiAgKglDdXJyZW50bHkgaGFuZGxlcyBlcnJvciB0eXBlcyAtIHVucmVhY2hhYmxlLCBxdWVuY2gsIHR0bCBleGNlZWRlZC4KICAqLwogc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSkKJiM0MzsJCQkgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sCiYjNDM7CQkJICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKQogewotCXN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpY21waGRyCV9pY21waCwgKmljOwogCXN0cnVjdCBpcGhkcglfY2lwaCwgKmNpaDsJLyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovCiAJc3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7CkBAIC0xMTA3LDE3ICYjNDM7MTEwMSwxOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHsKIAkJaWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSkKIAkJCXJldHVybiBORl9TVE9MRU47CiYjNDM7CQlpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpCiYjNDM7CQkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CiAKLQlpcGggPSBpcF9oZHIoc2tiKTsKLQlvZmZzZXQgPSBpaGwgPSBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CWlobCA9IGlwdnNoLSZndDtsZW47CiYjNDM7CW9mZnNldCA9IGlwdnNoLSZndDtsZW47CiAJaWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCAmYW1wO19pY21waCk7CiAJaWYgKGljID09IE5VTEwpCiAJCXJldHVybiBORl9EUk9QOwogCiAJSVBfVlNfREJHKDEyLCAmIzM0O091dGdvaW5nIElDTVAgKCVkLCVkKSAlcEk0LSZndDslcEk0XG4mIzM0OywKIAkJICBpYy0mZ3Q7dHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLAotCQkgICZhbXA7aXBoLSZndDtzYWRkciwgJmFtcDtpcGgtJmd0O2RhZGRyKTsKJiM0MzsJCSAgJmFtcDtpcHZzaC0mZ3Q7c2FkZHIuaXAsICZhbXA7aXB2c2gtJmd0O2RhZGRyLmlwKTsKIAogCS8qCiAJICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy4KQEAgLTExMzYsNyAmIzQzOzExMzIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCS8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovCiAJb2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTsKIAljaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksICZhbXA7X2NpcGgpOwotCWlmIChjaWggPT0gTlVMTCkKJiM0MzsJaWYgKCEoY2loICZhbXA7JmFtcDsgY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBjaWgtJmd0O2lobCAmZ3Q7PSA1KSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAKIAlwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtJmd0O3Byb3RvY29sKTsKQEAgLTExNDQsOCAmIzQzOzExNDAsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwotCWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOwotCQkgICAgIHBwLSZndDtkb250X2RlZnJhZykpCiYjNDM7CWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCwKQEAgLTExNTksOSAmIzQzOzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghY3ApCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQlzbmV0LmlwID0gaXBoLSZndDtzYWRkcjsKLQlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCAmYW1wO3NuZXQsIGNpaC0mZ3Q7cHJvdG9jb2wsIGNwLAotCQkJCSAgICBwcCwgY2lwaC5sZW4sIGlobCwgaG9va251bSk7CiYjNDM7CXNuZXQuaXAgPSBpcHZzaC0mZ3Q7c2FkZHIuaXA7CiYjNDM7CXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsICZhbXA7c25ldCwgY3AsIHBwLCAmYW1wO2NpcGgsIGlobCwKJiM0MzsJCQkJICAgIGhvb2tudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTExNzQsNyAmIzQzOzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBpcF92c19jb25uICpjcDsKIAlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwOwogCXVuaW9uIG5mX2luZXRfYWRkciBzbmV0OwotCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAKIAkqcmVsYXRlZCA9IDE7CiAJaWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtJmd0O2xlbiwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKQEAgLTEyMTAsNiAmIzQzOzEyMDQsMTAgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIXBwKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiYjNDM7CS8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi8KJiM0MzsJaWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiAJLyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlciAqLwogCWNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLSZndDtjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90bywKIAkJCSAgICAgaXB2cywgQUZfSU5FVDYsIHNrYiwgJmFtcDtjaXBoKTsKQEAgLTEyMTcsOSAmIzQzOzEyMTUsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJc25ldC5pbjYgPSBjaXBoLnNhZGRyLmluNjsKLQlvZmZzZXQgPSBjaXBoLmxlbjsKLQlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgJmFtcDtzbmV0LCBjaXBoLnByb3RvY29sLCBjcCwKLQkJCQkgICAgcHAsIG9mZnNldCwgaXB2c2gtJmd0O2xlbiwgaG9va251bSk7CiYjNDM7CXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCAmYW1wO3NuZXQsIGNwLCBwcCwgJmFtcDtjaXBoLAomIzQzOwkJCQkgICAgaXB2c2gtJmd0O2xlbiwgaG9va251bSk7CiB9CiAjZW5kaWYKIApAQCAtMTU0NSw3ICYjNDM7MTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0CiAjZW5kaWYKIAkJaWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7CiAJCQlpbnQgcmVsYXRlZDsKLQkJCWludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCAmYW1wO3JlbGF0ZWQsIGhvb2tudW0pOwomIzQzOwkJCWludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCAmYW1wO3JlbGF0ZWQsCiYjNDM7CQkJCQkJICAgICBob29rbnVtLCAmYW1wO2lwaCk7CiAKIAkJCWlmIChyZWxhdGVkKQogCQkJCXJldHVybiB2ZXJkaWN0OwpAQCAtMTc1Myw5ICYjNDM7MTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAgKi8KIHN0YXRpYyBpbnQKIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKLQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKJiM0MzsJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewotCXN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpY21waGRyCV9pY21waCwgKmljOwogCXN0cnVjdCBpcGhkcglfY2lwaCwgKmNpaDsJLyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovCiAJc3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7CkBAIC0xNzY1LDcgJiM0MzsxNzYyLDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXVuc2lnbmVkIGludCBvZmZzZXQsIG9mZnNldDIsIGlobCwgdmVyZGljdDsKIAlib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7CiAJdW5pb24gbmZfaW5ldF9hZGRyICpyYWRkcjsKLQljaGFyICpvdXRlcl9wcm90byA9ICYjMzQ7SVBJUCYjMzQ7OwomIzQzOwljaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9ICYjMzQ7SVBJUCYjMzQ7OwogCXVuc2lnbmVkIGludCBobGVuX2lwaXA7CiAJaW50IHVsZW4gPSAwOwogCkBAIC0xNzc1LDE3ICYjNDM7MTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJaWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkgewogCQlpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKQogCQkJcmV0dXJuIE5GX1NUT0xFTjsKJiM0MzsJCWlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwaCkpCiYjNDM7CQkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CiAKLQlpcGggPSBpcF9oZHIoc2tiKTsKLQlvZmZzZXQgPSBpaGwgPSBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CWlobCA9IGlwaC0mZ3Q7bGVuOwomIzQzOwlvZmZzZXQgPSBpcGgtJmd0O2xlbjsKIAlpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKIAlpZiAoaWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlJUF9WU19EQkcoMTIsICYjMzQ7SW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtJmd0OyVwSTRcbiYjMzQ7LAogCQkgIGljLSZndDt0eXBlLCBudG9ocyhpY21wX2lkKGljKSksCi0JCSAgJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwomIzQzOwkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIuaXAsICZhbXA7aXBoLSZndDtkYWRkci5pcCk7CiAKIAkvKgogCSAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuCkBAIC0xODY3LDggJiM0MzsxODY2LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXBwID0gcGQtJmd0O3BwOwogCiAJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwotCWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOwotCQkgICAgIHBwLSZndDtkb250X2RlZnJhZykpCiYjNDM7CWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCwKQEAgLTE4NzYsNyAmIzQzOzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAKIAlvZmZzZXQyID0gb2Zmc2V0OwogCWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCAmYW1wO2NpcGgpOwotCW9mZnNldCA9IGNpcGgubGVuOwogCiAJLyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci4KIAkgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LgpAQCAtMTg5OCwxMCAmIzQzOzE4OTUsMTEgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXZlcmRpY3QgPSBORl9EUk9QOwogCiAJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCi0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICZhbXA7JmFtcDsgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7CiYjNDM7CWlmICgoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgfHwgdHVubmVsKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaWhsLCBJUFBST1RPX0lDTVAsIEFGX0lORVQpKSB7CiAJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KIAkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcbiYjMzQ7LAotCQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwomIzQzOwkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyLmlwKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xOTY5LDEwICYjNDM7MTk2Nyw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAogCS8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqLwogCWlwX3ZzX2luX3N0YXRzKGNwLCBza2IpOwotCWlmIChJUFBST1RPX1RDUCA9PSBjaWgtJmd0O3Byb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpaC0mZ3Q7cHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IGNpaC0mZ3Q7cHJvdG9jb2wpCi0JCW9mZnNldCAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7Ci0JdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCAmYW1wO2NpcGgpOwomIzQzOwl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtJmd0O2xlbiwgaG9va251bSwgJmFtcDtjaXBoKTsKIAogb3V0OgogCWlmIChsaWtlbHkoIW5ld19jcCkpCkBAIC0yMDMyLDggJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCXBwID0gcGQtJmd0O3BwOwogCi0JLyogQ2Fubm90IGhhbmRsZSBmcmFnbWVudGVkIGVtYmVkZGVkIHByb3RvY29sICovCi0JaWYgKGNpcGguZnJhZ29mZnMpCiYjNDM7CS8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi8KJiM0MzsJaWYgKGNpcGguZnJhZ29mZnMgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCwKQEAgLTIwNTcsMjMgJiM0MzsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJbmV3X2NwID0gdHJ1ZTsKIAl9CiAKLQkvKiBWUy9UVU4sIFZTL0RSIGFuZCBMT0NBTE5PREUganVzdCBsZXQgaXQgZ28gKi8KLQlpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpICZhbXA7JmFtcDsKLQkgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSkgewotCQl2ZXJkaWN0ID0gTkZfQUNDRVBUOwomIzQzOwl2ZXJkaWN0ID0gTkZfRFJPUDsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCiYjNDM7CWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fSUNNUFY2LAomIzQzOwkJCQkJIEFGX0lORVQ2KSkgewomIzQzOwkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwomIzQzOwkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcbiYjMzQ7LAomIzQzOwkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovCiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7CiAKLQkvKiBOZWVkIHRvIG1hbmdsZSBjb250YWluZWQgSVB2NiBoZWFkZXIgaW4gSUNNUHY2IHBhY2tldCAqLwotCW9mZnNldCA9IGNpcGgubGVuOwotCWlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpCi0JCW9mZnNldCAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCi0KLQl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sICZhbXA7Y2lwaCk7CiYjNDM7CXZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIGlwaC0mZ3Q7bGVuLCBob29rbnVtLCAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIxNTIsNyAmIzQzOzIxNDYsNyBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZQogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwogCQkJaW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyZWxhdGVkLAotCQkJCQkJICAgIGhvb2tudW0pOwomIzQzOwkJCQkJCSAgICBob29rbnVtLCAmYW1wO2lwaCk7CiAKIAkJCWlmIChyZWxhdGVkKQogCQkJCXJldHVybiB2ZXJkaWN0OwpAQCAtMjIwMCw4ICYjNDM7MjE5NCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZQogCQl9CiAKIAkJaWYgKHJlc2NoZWQpIHsKLQkJCWlmICghb2xkX2N0KQomIzQzOwkJCWlmICghb2xkX2N0KSB7CiYjNDM7CQkJCXNwaW5fbG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKIAkJCQljcC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfTkZDVDsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCQkJaWYgKCFhdG9taWNfcmVhZCgmYW1wO2NwLSZndDtuX2NvbnRyb2wpKQogCQkJCWlwX3ZzX2Nvbm5fZXhwaXJlX25vdyhjcCk7CiAJCQlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKQEAgLTIyMTcsOCAmIzQzOzIyMTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUKIAkJaWYgKHN5c2N0bF9leHBpcmVfbm9kZXN0X2Nvbm4oaXB2cykpIHsKIAkJCWJvb2wgb2xkX2N0ID0gaXBfdnNfY29ubl91c2VzX29sZF9jb25udHJhY2soY3AsIHNrYik7CiAKLQkJCWlmICghb2xkX2N0KQomIzQzOwkJCWlmICghb2xkX2N0KSB7CiYjNDM7CQkJCXNwaW5fbG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKIAkJCQljcC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfTkZDVDsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCiAJCQlpcF92c19jb25uX2V4cGlyZV9ub3coY3ApOwogCQkJX19pcF92c19jb25uX3B1dChjcCk7CkBAIC0yMjg4LDYgJiM0MzsyMjg4LDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLSZndDtuZXQpOwomIzQzOwlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7CiAJaW50IHI7CiAKIAkvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovCkBAIC0yMjk3LDEwICYjNDM7MjI5OCw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChzdGF0ZS0mZ3Q7cGYgPT0gTkZQUk9UT19JUFY0KSB7CiAJCWlmIChpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QKQogCQkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsJCWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCAmYW1wO2lwaGRyKTsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCX0gZWxzZSB7Ci0JCXN0cnVjdCBpcF92c19pcGhkciBpcGhkcjsKLQogCQlpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsICZhbXA7aXBoZHIpOwogCiAJCWlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNikKQEAgLTIzMTAsNyAmIzQzOzIzMTAsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICNlbmRpZgogCX0KIAotCXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vayk7CiYjNDM7CXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vaywgJmFtcDtpcGhkcik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNFtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTExLDcgJiM0MzsxMSw3IEBACiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZik7CiYjNDM7CQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiAKIHN0YXRpYyBpbnQKIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTA5LDcgJiM0MzsxMDksNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIHNjdHBob2ZmKSkKJiM0MzsJCWlmICghc2N0cF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLwpAQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQlzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmOwomIzQzOwlzY3RwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmOwogCiAJLyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqLwogCWlmIChzY3RwaC0mZ3Q7c291cmNlICE9IGNwLSZndDt2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHwKQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBzY3RwaG9mZikpCiYjNDM7CQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0Jc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjsKJiM0MzsJc2N0cGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZjsKIAogCS8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi8KIAlpZiAoc2N0cGgtJmd0O2Rlc3QgIT0gY3AtJmd0O2Rwb3J0IHx8IHBheWxvYWRfY3N1bSB8fApAQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZikKJiM0MzsJCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtJmd0O2xlbjsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7CiAJX19sZTMyIGNtcCwgdmFsOwogCiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKQomIzQzOwkJcmV0dXJuIDE7CiAJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmKTsKIAljbXAgPSBzaC0mZ3Q7Y2hlY2tzdW07CiAJdmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpOwogCiAJaWYgKHZhbCAhPSBjbXApIHsKIAkJLyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovCi0JCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKQEAgLTI5LDcgJiM0MzsyOSw3IEBACiAKIHN0YXRpYyBpbnQKIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTY2LDcgJiM0MzsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB0Y3Bob2ZmKSkKJiM0MzsJCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7c291cmNlID0gY3AtJmd0O3Zwb3J0OwogCiAJLyogQWRqdXN0IFRDUCBjaGVja3N1bXMgKi8KQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdGNwaG9mZikpCiYjNDM7CQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7ZGVzdCA9IGNwLSZndDtkcG9ydDsKIAogCS8qCkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKQomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLSZndDtjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdGNwaG9mZiwgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLCAwKTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKLQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICBza2ItJmd0O2xlbiAtIHRjcGhvZmYsCi0JCQkJCSAgICBJUFBST1RPX1RDUCwKLQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfSBlbHNlCi0jZW5kaWYKLQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi8KLQkJYnJlYWs7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fVENQLCBhZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwppbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKQEAgLTI1LDcgJiM0MzsyNSw3IEBACiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB1ZHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtzb3VyY2UgPSBjcC0mZ3Q7dnBvcnQ7CiAKIAkvKgpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtkZXN0ID0gY3AtJmd0O2Rwb3J0OwogCiAJLyoKQEAgLTI5OCw0OCAmIzQzOzI5OCwyMCBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpCiYjNDM7CSAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCkKIHsKIAlzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7CiAKLQl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksICZhbXA7X3VkcGgpOwomIzQzOwl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC0mZ3Q7bGVuLCBzaXplb2YoX3VkcGgpLCAmYW1wO191ZHBoKTsKIAlpZiAodWggPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodWgtJmd0O2NoZWNrICE9IDApIHsKLQkJc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCQlza2ItJmd0O2NzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLAotCQkJCQkJIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwgMCk7Ci0JCQlmYWxsdGhyb3VnaDsKLQkJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQkJaWYgKGNzdW1faXB2Nl9tYWdpYygmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLAotCQkJCQkJICAgIElQUFJPVE9fVURQLAotCQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHVkcGhvZmYsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqLwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJaWYgKCF1aC0mZ3Q7Y2hlY2spCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtJmd0O2xlbiwgSVBQUk9UT19VRFAsIGFmKSkgewomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwppbmRleCA5ZmVmNDMzNWRhMTNmZC4uMGIwYzUzMDQ5OTNhOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtMTUwMiwyMCAmIzQzOzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAgKi8KIGludAogaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sCi0JCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBydGFibGUJKnJ0OwkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGUsIHdhc19pbnB1dDsKJiM0MzsJYm9vbCBoYXNfcG9ydHMgPSBmYWxzZTsKJiM0MzsJdW5zaWduZWQgaW50IHdsZW47CiAKIAkvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlCiAJICAgZm9yd2FyZGVkIGRpcmVjdGx5IGhlcmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0bwogCSAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqLwogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkgewogCQlpZiAoY3AtJmd0O3BhY2tldF94bWl0KQotCQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNTMzLDcgJiM0MzsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwgY3AtJmd0O2RhZGRyLmlwLCBydF9tb2RlLAotCQkJCSAgIE5VTEwsIGlwaCk7CiYjNDM7CQkJCSAgIE5VTEwsIGNpcGgpOwogCWlmIChsb2NhbCAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAJcnQgPSBza2JfcnRhYmxlKHNrYik7CkBAIC0xNTY0LDE0ICYjNDM7MTU2NiwyMSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CkBAIC0xNTg3LDEwICYjNDM7MTU5NiwxMiBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiBpbnQKIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLAotCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewomIzQzOwlib29sIGhhc19wb3J0cyA9IGZhbHNlOwogCXN0cnVjdCBydDZfaW5mbwkqcnQ7CS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiYjNDM7CXVuc2lnbmVkIGludCB3bGVuOwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGU7CkBAIC0xNjAwLDcgJiM0MzsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi8KIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHsKIAkJaWYgKGNwLSZndDtwYWNrZXRfeG1pdCkKLQkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNjE3LDcgJiM0MzsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwKLQkJCQkgICAgICAmYW1wO2NwLSZndDtkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTsKJiM0MzsJCQkJICAgICAgJmFtcDtjcC0mZ3Q7ZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTsKIAlpZiAobG9jYWwgJmx0OyAwKQogCQlnb3RvIHR4X2Vycm9yOwogCXJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7CkBAIC0xNjQ4LDE0ICYjNDM7MTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IDdhZTY4ZDYwNTg2YTIzLi44YTNiOWUzM2U5NGY3NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTQyNyw3ICYjNDM7NDI3LDYgQEAgc3RhdGljIHZvaWQgbmZfY3RfZXhwZWN0X2luc2VydChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAogCQlleHAtJmd0O3RpbWVvdXQgJiM0Mzs9IGhlbHBlci0mZ3Q7ZXhwZWN0X3BvbGljeVtleHAtJmd0O2NsYXNzXS50aW1lb3V0ICogSFo7CiAKIAlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtleHAtJmd0O2xub2RlLCAmYW1wO21hc3Rlcl9oZWxwLSZndDtleHBlY3RhdGlvbnMpOwotCW1hc3Rlcl9oZWxwLSZndDtleHBlY3RpbmdbZXhwLSZndDtjbGFzc10mIzQzOyYjNDM7OwogCiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZXhwLSZndDtobm9kZSwgJmFtcDtuZl9jdF9leHBlY3RfaGFzaFtoXSk7CiAJY25ldCA9IG5mX2N0X3Blcm5ldChuZXQpOwpAQCAtNTM0LDYgJiM0Mzs1MzMsNyBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCiYjNDM7CW1hc3Rlcl9oZWxwLSZndDtleHBlY3RpbmdbZXhwZWN0LSZndDtjbGFzc10mIzQzOyYjNDM7OwogCW5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0LCBtYXN0ZXJfaGVscCk7CiAKIAluZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0LCBwb3J0aWQsIHJlcG9ydCk7CkBAIC01NDYsNiAmIzQzOzU0NiwzOSBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQpOwogCiYjNDM7aW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spOwomIzQzOwltYXN0ZXJfaGVscCA9IG5mY3RfaGVscChleHBlY3RbMF0tJmd0O21hc3Rlcik7CiYjNDM7CWlmICghbWFzdGVyX2hlbHAgfHwgbWFzdGVyX2hlbHAgIT0gbmZjdF9oZWxwKGV4cGVjdFsxXS0mZ3Q7bWFzdGVyKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAyOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gX19uZl9jdF9leHBlY3RfY2hlY2soZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCwgZmxhZ3MpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoaSA9PSAxKQomIzQzOwkJCQltYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdFswXS0mZ3Q7Y2xhc3NdLS07CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQltYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdFtpXS0mZ3Q7Y2xhc3NdJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCk7CiYjNDM7CQluZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0W2ldLCAwLCAwKTsKJiM0MzsJfQomIzQzO291dDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKTsKJiM0MzsKIHZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfZGVzdHJveShib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLAogCQkJCSAgdm9pZCAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggZjNmOTBhODY2MzM4OTQuLmU0YTcwZDFkNzdiMGI5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMTY2Myw3ICYjNDM7MTY2Myw3IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW47CiAJdW5zaWduZWQgaW50IG1zZ2xlbiwgb3JpZ2xlbjsKIAljb25zdCBjaGFyICpkcHRyLCAqZW5kOwotCXMxNiBkaWZmLCB0ZGlmZiA9IDA7CiYjNDM7CXMzMiBkaWZmLCB0ZGlmZiA9IDA7CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKIAl1bnNpZ25lZCBsb25nIGNsZW47CiAJYm9vbCB0ZXJtOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYwppbmRleCBhZWEwMmY2YWZmMDkyYS4uMTMzYmQ3MTNmZTBjMjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCkBAIC0zMjEsNyAmIzQzOzMyMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NpcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIH0KIAogc3RhdGljIHZvaWQgbmZfbmF0X3NpcF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAotCQkJCSAgczE2IG9mZikKJiM0MzsJCQkJICBzMzIgb2ZmKQogewogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZhbXA7Y3RpbmZvKTsKQEAgLTU5Miw2ICYjNDM7NTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkJCSAgICAgdW5zaWduZWQgaW50IG1lZGlhbGVuLAogCQkJCSAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpydHBfYWRkcikKIHsKJiM0MzsJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9wYWlyWzJdID0geyBydHBfZXhwLCBydGNwX2V4cCB9OwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZhbXA7Y3RpbmZvKTsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwpAQCAtNjIyLDI0ICYjNDM7NjIzLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIAkJaW50IHJldDsKIAogCQlydHBfZXhwLSZndDt0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHBvcnQpOwotCQlyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydHBfZXhwLAotCQkJCQkgICBORl9DVF9FWFBfRl9TS0lQX01BU1RFUik7Ci0JCWlmIChyZXQgPT0gLUVCVVNZKQotCQkJY29udGludWU7Ci0JCWVsc2UgaWYgKHJldCAmbHQ7IDApIHsKLQkJCXBvcnQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KIAkJcnRjcF9leHAtJmd0O3R1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCAmIzQzOyAxKTsKLQkJcmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsCi0JCQkJCSAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTsKJiM0MzsKJiM0MzsJCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsCiYjNDM7CQkJCQkJTkZfQ1RfRVhQX0ZfU0tJUF9NQVNURVIpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKLQkJZWxzZSBpZiAocmV0ID09IC1FQlVTWSkgewotCQkJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTsKJiM0MzsJCWVsc2UgaWYgKHJldCA9PSAtRUJVU1kpCiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChyZXQgJmx0OyAwKSB7Ci0JCQluZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApOwomIzQzOwkJZWxzZSBpZiAocmV0ICZsdDsgMCkgewogCQkJcG9ydCA9IDA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCBhOWVhZjk0NTVjNzc4My4uYWYzNTdmNmM1MDcwYjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC00NSw4ICYjNDM7NDUsNiBAQCBlbnVtIHsKIAlORlRfVkFMSURBVEVfRE8sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJobHRhYmxlIG5mdF9vYmpuYW1lX2h0OwotCiBzdGF0aWMgdTMyIG5mdF9jaGFpbl9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTsKIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2hfb2JqKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTsKIHN0YXRpYyBpbnQgbmZ0X2NoYWluX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICosIGNvbnN0IHZvaWQgKik7CkBAIC0xNjM1LDYgJiM0MzsxNjMzLDEwIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJaWYgKGVycikKIAkJZ290byBlcnJfY2hhaW5faHQ7CiAKJiM0MzsJZXJyID0gcmhsdGFibGVfaW5pdCgmYW1wO3RhYmxlLSZndDtvYmpuYW1lX2h0LCAmYW1wO25mdF9vYmpuYW1lX2h0X3BhcmFtcyk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfb2JqX2h0OwomIzQzOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dGFibGUtJmd0O2NoYWlucyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7c2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7b2JqZWN0cyk7CkBAIC0xNjUzLDYgJiM0MzsxNjU1LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3dGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3RhYmxlLSZndDtsaXN0LCAmYW1wO25mdF9uZXQtJmd0O3RhYmxlcyk7CiAJcmV0dXJuIDA7CiBlcnJfdHJhbnM6CiYjNDM7CXJobHRhYmxlX2Rlc3Ryb3koJmFtcDt0YWJsZS0mZ3Q7b2JqbmFtZV9odCk7CiYjNDM7ZXJyX29ial9odDoKIAlyaGx0YWJsZV9kZXN0cm95KCZhbXA7dGFibGUtJmd0O2NoYWluc19odCk7CiBlcnJfY2hhaW5faHQ6CiAJa2ZyZWUodGFibGUtJmd0O3VkYXRhKTsKQEAgLTE4MTksNiAmIzQzOzE4MjMsNyBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfdGFibGVfZGVzdHJveShzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSkKIAkJcmV0dXJuOwogCiAJcmhsdGFibGVfZGVzdHJveSgmYW1wO3RhYmxlLSZndDtjaGFpbnNfaHQpOwomIzQzOwlyaGx0YWJsZV9kZXN0cm95KCZhbXA7dGFibGUtJmd0O29iam5hbWVfaHQpOwogCWtmcmVlKHRhYmxlLSZndDtuYW1lKTsKIAlrZnJlZSh0YWJsZS0mZ3Q7dWRhdGEpOwogCWtmcmVlKHRhYmxlKTsKQEAgLTgwODYsNyAmIzQzOzgwOTEsNyBAQCB2b2lkIG5mdF91bnJlZ2lzdGVyX29iaihzdHJ1Y3QgbmZ0X29iamVjdF90eXBlICpvYmpfdHlwZSkKIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7CiAKIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIG9ianR5cGUsCiAJCQkJICB1OCBnZW5tYXNrKQogewpAQCAtODEwMiw3ICYjNDM7ODEwNyw3IEBAIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCSAgICAgIWxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChuZXQpKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0ID0gcmhsdGFibGVfbG9va3VwKCZhbXA7bmZ0X29iam5hbWVfaHQsICZhbXA7aywgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTsKJiM0MzsJbGlzdCA9IHJobHRhYmxlX2xvb2t1cCgmYW1wO3RhYmxlLSZndDtvYmpuYW1lX2h0LCAmYW1wO2ssIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7CiAJaWYgKCFsaXN0KQogCQlnb3RvIG91dDsKIApAQCAtODM4Miw3ICYjNDM7ODM4Nyw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld29iaihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl90cmFuczsKIAotCWVyciA9IHJobHRhYmxlX2luc2VydCgmYW1wO25mdF9vYmpuYW1lX2h0LCAmYW1wO29iai0mZ3Q7cmhsaGVhZCwKJiM0MzsJZXJyID0gcmhsdGFibGVfaW5zZXJ0KCZhbXA7dGFibGUtJmd0O29iam5hbWVfaHQsICZhbXA7b2JqLSZndDtyaGxoZWFkLAogCQkJICAgICAgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBlcnJfb2JqX2h0OwpAQCAtODU2Nyw4ICYjNDM7ODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gaW5mby0mZ3Q7ZXh0YWNrOwogCXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIoaW5mby0mZ3Q7bmV0KTsKIAl1OCBmYW1pbHkgPSBpbmZvLSZndDtuZm1zZy0mZ3Q7bmZnZW5fZmFtaWx5OwotCWNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25ldDsKJiM0MzsJc3RydWN0IG5mdF90YWJsZSAqdGFibGU7CiAJc3RydWN0IG5mdF9vYmplY3QgKm9iajsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKIAl1MzIgb2JqdHlwZTsKQEAgLTEwNDM3LDkgJiM0MzsxMDQ0Miw5IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbikKIAkJbmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7CiB9CiAKLXN0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopCiYjNDM7c3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF90YWJsZSAqdGFibGUsIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopCiB7Ci0JcmhsdGFibGVfcmVtb3ZlKCZhbXA7bmZ0X29iam5hbWVfaHQsICZhbXA7b2JqLSZndDtyaGxoZWFkLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpOwomIzQzOwlyaGx0YWJsZV9yZW1vdmUoJmFtcDt0YWJsZS0mZ3Q7b2JqbmFtZV9odCwgJmFtcDtvYmotJmd0O3JobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7CiAJbGlzdF9kZWxfcmN1KCZhbXA7b2JqLSZndDtsaXN0KTsKIH0KIApAQCAtMTExMjQsNyAmIzQzOzExMTI5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCWJyZWFrOwogCQljYXNlIE5GVF9NU0dfREVMT0JKOgogCQljYXNlIE5GVF9NU0dfREVTVFJPWU9CSjoKLQkJCW5mdF9vYmpfZGVsKG5mdF90cmFuc19vYmoodHJhbnMpKTsKJiM0MzsJCQluZnRfb2JqX2RlbCh0YWJsZSwgbmZ0X3RyYW5zX29iaih0cmFucykpOwogCQkJbmZfdGFibGVzX29ial9ub3RpZnkoJmFtcDtjdHgsIG5mdF90cmFuc19vYmoodHJhbnMpLAogCQkJCQkgICAgIHRyYW5zLSZndDttc2dfdHlwZSk7CiAJCQlicmVhazsKQEAgLTExNDE2LDcgJiM0MzsxMTQyMSw3IEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbikKIAkJCQluZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7CiAJCQl9IGVsc2UgewogCQkJCW5mdF91c2VfZGVjX3Jlc3RvcmUoJmFtcDt0YWJsZS0mZ3Q7dXNlKTsKLQkJCQluZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7CiYjNDM7CQkJCW5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX0RFTE9CSjoKQEAgLTEyMDQzLDcgJiM0MzsxMjA0OCw3IEBAIHN0YXRpYyB2b2lkIF9fbmZ0X3JlbGVhc2VfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSkKIAkJbmZ0X3NldF9kZXN0cm95KCZhbXA7Y3R4LCBzZXQpOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBuZSwgJmFtcDt0YWJsZS0mZ3Q7b2JqZWN0cywgbGlzdCkgewotCQluZnRfb2JqX2RlbChvYmopOwomIzQzOwkJbmZ0X29ial9kZWwodGFibGUsIG9iaik7CiAJCW5mdF91c2VfZGVjKCZhbXA7dGFibGUtJmd0O3VzZSk7CiAJCW5mdF9vYmpfZGVzdHJveSgmYW1wO2N0eCwgb2JqKTsKIAl9CkBAIC0xMjIyNSwxMCAmIzQzOzEyMjMwLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpCiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX25ldGRldl9ub3RpZmllcjsKIAotCWVyciA9IHJobHRhYmxlX2luaXQoJmFtcDtuZnRfb2JqbmFtZV9odCwgJmFtcDtuZnRfb2JqbmFtZV9odF9wYXJhbXMpOwotCWlmIChlcnIgJmx0OyAwKQotCQlnb3RvIGVycl9yaHRfb2JqbmFtZTsKLQogCWVyciA9IG5mdF9vZmZsb2FkX2luaXQoKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBlcnJfb2ZmbG9hZDsKQEAgLTEyMjUxLDggJiM0MzsxMjI1Miw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX3RhYmxlc19tb2R1bGVfaW5pdCh2b2lkKQogZXJyX25ldGxpbmtfbm90aWZpZXI6CiAJbmZ0X29mZmxvYWRfZXhpdCgpOwogZXJyX29mZmxvYWQ6Ci0JcmhsdGFibGVfZGVzdHJveSgmYW1wO25mdF9vYmpuYW1lX2h0KTsKLWVycl9yaHRfb2JqbmFtZToKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYW1wO25mX3RhYmxlc19mbG93dGFibGVfbm90aWZpZXIpOwogZXJyX25ldGRldl9ub3RpZmllcjoKIAluZl90YWJsZXNfY29yZV9tb2R1bGVfZXhpdCgpOwpAQCAtMTIyNzQsNyAmIzQzOzEyMjczLDYgQEAgc3RhdGljIHZvaWQgX19leGl0IG5mX3RhYmxlc19tb2R1bGVfZXhpdCh2b2lkKQogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYW1wO25mX3RhYmxlc19uZXRfb3BzKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7dHJhbnNfZ2Nfd29yayk7CiAJcmN1X2JhcnJpZXIoKTsKLQlyaGx0YWJsZV9kZXN0cm95KCZhbXA7bmZ0X29iam5hbWVfaHQpOwogCW5mX3RhYmxlc19jb3JlX21vZHVsZV9leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwppbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTI1OSw5ICYjNDM7MjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsCiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLAogCQkJCSAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKQogewotCXVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrOwogCXN0cnVjdCBuZnRfZGF0YSBtYXNrID0ge307Ci0JX19iZTMyIHJlbWFpbmRlcl9tYXNrOwogCiAJaWYgKHByaXZfbGVuID09IGZpZWxkX2xlbikgewogCQltZW1zZXQoJmFtcDtyZWctJmd0O21hc2ssIDB4ZmYsIHByaXZfbGVuKTsKQEAgLTI3MCwxNSAmIzQzOzI2OCw3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQltZW1zZXQoJmFtcDttYXNrLCAweGZmLCBmaWVsZF9sZW4pOwotCXJlbWFpbmRlciA9IHByaXZfbGVuICUgc2l6ZW9mKHUzMik7Ci0JaWYgKHJlbWFpbmRlcikgewotCQlrID0gcHJpdl9sZW4gLyBzaXplb2YodTMyKTsKLQkJZGVsdGEgPSBmaWVsZF9sZW4gLSBwcml2X2xlbjsKLQkJcmVtYWluZGVyX21hc2sgPSBodG9ubCh+KCgxICZsdDsmbHQ7IChkZWx0YSAqIEJJVFNfUEVSX0JZVEUpKSAtIDEpKTsKLQkJbWFzay5kYXRhW2tdID0gKF9fZm9yY2UgdTMyKXJlbWFpbmRlcl9tYXNrOwotCX0KLQomIzQzOwltZW1zZXQoJmFtcDttYXNrLCAweGZmLCBwcml2X2xlbik7CiAJbWVtY3B5KCZhbXA7cmVnLSZndDttYXNrLCAmYW1wO21hc2ssIGZpZWxkX2xlbik7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCmluZGV4IDI3MDRiNGI2MGQxZTA0Li45YWYwZmE4OTVmNzMwMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlIHsKIAlyZWZjb3VudF90IHVzZTsKIAl1X2ludDhfdCBmYW1pbHk7CiAJYm9vbCBybmRfaW5pdGlhbGl6ZWQ7CiYjNDM7CWJvb2wgcmF0ZW1hdGNoOwogCiAJc3RydWN0IGhhc2hsaW1pdF9jZmczIGNmZzsJLyogY29uZmlnICovCiAKQEAgLTMyMyw2ICYjNDM7MzI0LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsCiAJCWt2ZnJlZShoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KJiM0MzsJaGluZm8tJmd0O3JhdGVtYXRjaCA9ICEhKGNmZy0mZ3Q7bW9kZSAmYW1wOyBYVF9IQVNITElNSVRfUkFURV9NQVRDSCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtoaW5mby0mZ3Q7bG9jayk7CiAKIAlzd2l0Y2ggKHJldmlzaW9uKSB7CkBAIC04NzIsNyAmIzQzOzg3NCwxMCBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsCiAJfQogCiAJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwotCWlmIChyZXZpc2lvbiAmZ3Q7PSAzICZhbXA7JmFtcDsgY2ZnLSZndDttb2RlICZhbXA7IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIKSB7CiYjNDM7CWlmIChjZmctJmd0O21vZGUgJmFtcDsgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHsKJiM0MzsJCWlmIChyZXZpc2lvbiAmbHQ7IDMpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCWlmIChjZmctJmd0O2F2ZyA9PSAwIHx8IGNmZy0mZ3Q7YXZnICZndDsgVTMyX01BWCkgewogCQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2ludmFsaWQgcmF0ZVxuJiMzNDspOwogCQkJcmV0dXJuIC1FUkFOR0U7CkBAIC05MDUsNiAmIzQzOzkxMCwxNSBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsCiAJCQltdXRleF91bmxvY2soJmFtcDtoYXNobGltaXRfbXV0ZXgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKChjZmctJmd0O21vZGUgJmFtcDsgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0ggJmFtcDsmYW1wOwomIzQzOwkJICAgICAhKCpoaW5mbyktJmd0O3JhdGVtYXRjaCkgfHwKJiM0MzsJCSAgICAoIShjZmctJmd0O21vZGUgJmFtcDsgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICgqaGluZm8pLSZndDtyYXRlbWF0Y2gpKSB7CiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7aGFzaGxpbWl0X211dGV4KTsKJiM0MzsJCQlodGFibGVfcHV0KCpoaW5mbyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCW11dGV4X3VubG9jaygmYW1wO2hhc2hsaW1pdF9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCBmYjFjNTlkNDU1NjdhZi4uNDQ5YzUxOGJkOTQ3ZGMgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKQEAgLTYxNyw3ICYjNDM7NjE3LDExIEBAIGlwIC02IC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZWUxOjM6OjEKIGlwIC1uZXQgJiMzNDskbnMyJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIDEwLjAuMi4xCiBpcCAtNiAtbmV0ICYjMzQ7JG5zMiYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjEKIAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFwKJiM0MzsJJiMzOTttZXRhIG9pZiB0dW4wIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5OwomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFwKJiM0MzsJJiMzOTttZXRhIG9pZiB0dW42IHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuNiBhY2NlcHQmIzM5OwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXAogCSYjMzk7bWV0YSBvaWYgJiMzNDt2ZXRoMCYjMzQ7IHRjcCBzcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX3JlcGwgYWNjZXB0JiMzOTsKQEAgLTYyOSw3ICYjNDM7NjMzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxICYjMzQ7SVBJUCB0dW5uZWwmIzM0OzsgdGhlbgogZmkKIAogaWYgdGVzdF90Y3BfZm9yd2FyZGluZyAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgotCWVjaG8gJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCYjMzQ7CiYjNDM7CWNoZWNrX2NvdW50ZXJzICYjMzQ7ZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIElQNklQNiB0dW5uZWwmIzM0OwogZWxzZQogCWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsJiMzNDsgMSZndDsmYW1wOzIKIAlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CkBAIC02NDIsNiAmIzQzOzY0Niw4IEBAIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHZldGgxLjEwIHVwCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIwLjEvMjQgZGV2IHZldGgxLjEwCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCBmZWUxOjQ6OjEvNjQgZGV2IHZldGgxLjEwIG5vZGFkCiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS8xMC5mb3J3YXJkaW5nPTEgJmd0OyAvZGV2L251bGwKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcCiYjNDM7CSYjMzk7bWV0YSBvaWYgdmV0aDEuMTAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQmIzM5OwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB2ZXRoMS4xMCBhY2NlcHQmIzM5OwogCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjAuMTAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yCkBAIC02NDksNiAmIzQzOzY1NSw4IEBAIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHR1bjAuMTAgdXAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjAwLjEvMjQgZGV2IHR1bjAuMTAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIwMC4yCiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFwKJiM0MzsJJiMzOTttZXRhIG9pZiB0dW4wLjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMC4xMCBhY2NlcHQmIzM5OwogCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lCkBAIC02NTYsNiAmIzQzOzY2NCw4IEBAIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHR1bjYuMTAgdXAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIGZlZTE6NTo6MS82NCBkZXYgdHVuNi4xMCBub2RhZAogaXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHQKIGlwIC02IC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZWUxOjU6OjIKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcCiYjNDM7CSYjMzk7bWV0YSBvaWYgdHVuNi4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCYjMzk7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAmIzM5O21ldGEgb2lmIHR1bjYuMTAgYWNjZXB0JiMzOTsKIAogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgbGluayBhZGQgbGluayB2ZXRoMCBuYW1lIHZldGgwLjEwIHR5cGUgdmxhbiBpZCAxMApAQCAtNjgzLDcgJiM0Mzs2OTMsNyBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgJiMzNDtJUElQIHR1bm5lbCBvdmVyIHZsYW4mIzM0OzsgdGhlbgogZmkKIAogaWYgdGVzdF90Y3BfZm9yd2FyZGluZyAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgotCWVjaG8gJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW4mIzM0OwomIzQzOwljaGVja19jb3VudGVycyAmIzM0O2Zsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsIG92ZXIgdmxhbiYjMzQ7CiBlbHNlCiAJZWNobyAmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNklQNiB0dW5uZWwgb3ZlciB2bGFuJiMzNDsgMSZndDsmYW1wOzIKIAlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGtleSBuZXR3b3JrIHN1YnN5c3RlbXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaCBpbnRvIHNvbWUgdmVyeSBjcnVjaWFsIG5ldHdvcmsgZmlsdGVyaW5nIGFuZCBsb2FkIGJhbGFuY2luZyBsb2dpYywgc28sIGFzIGFuIGV4cGVydCwgSSBjYW4gdGVsbCBpbW1lZGlhdGVseSwgeWVzLCAqKldvcnRoRnV6emluZz10cnVlKiouCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYXJlYXMgYW5kIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBhc3BlY3RzLCB0aGUgcG90ZW50aWFsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgYW5kIHRoZSByZWxldmFudCAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyB3ZSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBmb3IgdGVzdGluZy4KCkZpcnN0LCB3ZSYjMzk7cmUgbG9va2luZyBhdCAqKmBuZXQvbmV0ZmlsdGVyL2lwdnMvYCoqLiBUaGlzIGlzIElQVlMsIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBzdHVmZiwgcmlnaHQgaW4gdGhlIGNvcmU6IGNvbm5lY3Rpb24gaGFuZGxpbmcsIE5BVCwgdGhlIHdvcmtzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIE1ha2Ugc3VyZSBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBhcmUgYWxsIGVuYWJsZWQgYW5kIGZ1bmN0aW9uYWwgZm9yIHRoZXNlLgoKTmV4dCwgd2UmIzM5O3ZlIGdvdCBDb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgYW5kIHRoZSBTSVAvSC4zMjMgTkFUIGhlbHBlcnMgaW4gKipgbmV0L25ldGZpbHRlci9gKiouIFNwZWNpZmljYWxseSwgYG5mX2Nvbm50cmFja19leHBlY3QuY2AsIGBuZl9jb25udHJhY2tfc2lwLmNgLCBgbmZfbmF0X3NpcC5jYCwgYW5kIGBuZl9uYXRfaDMyMy5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb246IGBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyYCwgYG5hdF9ydHBfcnRjcGAsIGBuZl9uYXRfc2RwX21lZGlhYC4gQ29uZmlncyBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfTkFUX1NJUGAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGFuZCBgTkZfTkFUX0gzMjNgIGFyZSB0aGUga2V5IGVuYWJsaW5nIGZsYWdzIGhlcmUuCgpNb3Zpbmcgb24sIHdlJiMzOTtyZSBsb29raW5nIGF0ICoqYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhgKiogYW5kICoqYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCoqLiBMb29rcyBsaWtlIGBuZl90YWJsZXNgIGlzIHVzaW5nIGByaGx0YWJsZWAgZm9yIG9iamVjdCBsb29rdXAgYnkgbmFtZS4gRm9yIGBuZl90YWJsZXNgLCB0aGUgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFyZTogYG5mdF9vYmpfbG9va3VwYCwgYG5mX3RhYmxlc19uZXd0YWJsZWAsIGBuZl90YWJsZXNfdGFibGVfZGVzdHJveWAsIGBuZl90YWJsZXNfbmV3b2JqYCwgYG5mX3RhYmxlc19jb21taXRgLCBhbmQgYF9fbmZfdGFibGVzX2Fib3J0YC4gSSYjMzk7bGwgbmVlZCBgTkZfVEFCTEVTYCB0byB0ZXN0IHRoaXMgcHJvcGVybHkuCgpBbHNvLCB0aGVyZSBhcmUgc29tZSBmaXhlcyByZWxhdGVkIHRvICoqYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AqKiBhbmQgKipgbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY2AqKi4KCkxhc3RseSwgdGhlICoqYHh0X2hhc2hsaW1pdC5jYCoqIGZpeCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGFjdGluZyBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAgYW5kIGBodGFibGVfY3JlYXRlYC4gVGhpcyBsb29rcyBpbXBvcnRhbnQsIHNvIG1ha2Ugc3VyZSBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAgaXMgc2V0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGNvbmZpZ3MgdXNpbmcgY29kZSBzZWFyY2g7IG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgZ2l2ZXMgdXMgYSBzb2xpZCBiYXNpcyBmb3IgdGFyZ2V0ZWQgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTEyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYElQX1ZTX0lQVjZgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBJUF9WU19JUFY2YC4gVW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBjcml0aWNhbCwgb2YgY291cnNlLCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBiZWRyb2NrIG9mIGhvdyB0cmFmZmljIGlzIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBteSBtaW5kIGlzIGN1cnJlbnRseSBmb2N1c2VkIG9uOgoKKiAgICoqSXRzIHN0YXR1czoqKiBJcyBpdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgcGFydGlhbGx5IGNvbmZpZ3VyZWQ/IFdoYXQga2VybmVsIG1vZHVsZSB2ZXJzaW9ucyBhcmUgd2Ugd29ya2luZyB3aXRoPwoqICAgKipDb25mbGljdCByZXNvbHV0aW9uOioqIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgcnVsZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtYXkgY29uZmxpY3Qgd2l0aCBvdXIgZGVzaXJlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBhIG1ldGhvZGljYWwgZXhhbWluYXRpb24gb2YgdGhlIGN1cnJlbnQgc2V0dXAgdG8gc2VlIGlmIGl0IHBsYXlzIHdlbGwgd2l0aCB0aGUgcmVzdCBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUuCiogICAqKlNlY3VyaXR5IGltcGxpY2F0aW9uczoqKiBXaGF0IGFyZSB0aGUgc2VjdXJpdHkgcG9saWN5IGNvbnNpZGVyYXRpb25zIHdpdGggdGhlIHVzZSBvZiB0aGUgSVBWNiBtb2R1bGU/CiogICAqKk9wdGltaXphdGlvbjoqKiBXaGF0IG9wdGltaXphdGlvbnMsIGlmIGFueSwgaGF2ZSBiZWVuIGFwcGxpZWQgcHJldmlvdXNseT8gSXMgdGhlcmUgYW55IGRvY3VtZW50YXRpb24gb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbj8KCkVzc2VudGlhbGx5LCBJJiMzOTttIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggbXkgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFscyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDMyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUy9JUHY2IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgcG9wcGVkIHVwLCBzcGVjaWZpY2FsbHkgYElQX1ZTX0lQVjZgLCBhbmQgdGhlIGhpbnQgcG9pbnRzIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFRoYXQgc291bmRzIGFib3V0IHJpZ2h0LCB0aG91Z2ggSSBhbHdheXMgZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGVpdGhlciBqdW1wIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQsIG9yLCB0byBrZWVwIHRoaW5ncyBxdWljaywgSSYjMzk7bGwganVzdCBydW4gYSBgZ3JlcGAgZm9yIHRoZSBzeW1ib2wuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJyb2FkZXIgY29udGV4dCByZWFsbHkgZmFzdCAtIHdoZXJlIGVsc2UgaXQmIzM5O3MgcmVmZXJlbmNlZCwgZGVwZW5kZW5jaWVzLCBhbmQgc28gb24uIEVmZmljaWVuY3kgaXMga2V5IHdoZW4gbmF2aWdhdGluZyB0aGVzZSBjb25maWcgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBMb2FkIEJhbGFuY2luZyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBgQ09ORklHX0lQX1ZTX0lQVjZgIHNwcmlua2xlZCB0aHJvdWdob3V0IHRoaXMgY29kZS4gT2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBtYWNybyBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLCBiZWNhdXNlIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgYmVoYXZpb3IgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGxvYWQgYmFsYW5jaW5nIGZlYXR1cmVzIEkmIzM5O20gbG9va2luZyBhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgS2NvbmZpZyBvcHRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIEkgZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhpcyBtYWNybyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCByZWFzb25pbmcgYmVoaW5kIHRoZXNlIGltcGxlbWVudGF0aW9uIGNob2ljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yNz1pZiBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyOTpjb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5NzEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZyoqCgpSaWdodCwgc28gSSYjMzk7dmUgYmVlbiB3cmVzdGxpbmcgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQmIzM5O3Mgc3RhcmluZyBtZSBpbiB0aGUgZmFjZS4gSXQmIzM5O3MgYWN0dWFsbHkgYGNvbmZpZyBJUF9WU19JUFY2YCwgYnV0IEkgY29tcGxldGVseSBtaXNzZWQgdGhlIHRhYiBjaGFyYWN0ZXIgd2hlbiBJIHdhcyBidWlsZGluZyBteSByZWd1bGFyIGV4cHJlc3Npb24uIEkgd2FzIHJ1bm5pbmcgYGNvbmZpZyBJUF9WU19JUFY2YCBpbnN0ZWFkISBSb29raWUgbWlzdGFrZSwgSSByZWFsbHkgc2hvdWxkIGhhdmUga25vd24gYmV0dGVyLCBJIHJlYWxseSBzaG91bGQgaGF2ZSB0ZXN0ZWQgaXQgYWdhaW5zdCB0aGUgc291cmNlIGEgYml0IG1vcmUgdmlnb3JvdXNseS4KCk5vdyB0aGF0IEkmIzM5O3ZlIGhvcGVmdWxseSBjbGVhcmVkIHVwIHRoYXQgb25lIHBvdGVudGlhbCByZWQgaGVycmluZywgSSBuZWVkIHRvIGNoZWNrIG91dCBhIGNvdXBsZSBvdGhlciwgcmVsYXRlZCBzZXR0aW5ncyBmb3IgdGhlIE5BVCBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYE5GX05BVF9TSVBgIGFuZCBgTkZfTkFUX0gzMjNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgY2F1c2luZyBhIGNvbmZsaWN0IG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRob3NlIHZvaWNlLW92ZXItSVAgb3Igc2Vzc2lvbiBlc3RhYmxpc2htZW50IHNjZW5hcmlvcy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgbm93IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUX1NJUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDI2PWNvbmZpZyBORl9OQVRfSVJDXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MzE6Y29uZmlnIE5GX05BVF9TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzItXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM0NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipORl9OQVRfSDMyMyAtIEEgTGluZ2VyaW5nIFF1ZXN0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHNvbWV0aGluZyBsaWtlIGEgZmlyZXdhbGwgb3IgYSByb3V0ZXIsIHJpZ2h0PyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5BVCwgdGhhdCYjMzk7cyBjbGVhci4gQnV0IHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyAqc3BlY2lmaWNhbGx5KiBgTkZfTkFUX0gzMjNgLiBXaGF0IGFib3V0IGl0PyBJdOKAmXMgYSB2ZXJ5IHBvaW50ZWQgcXVlcnksIHNvIHNvbWV0aGluZ+KAmXMgcGlxdWVkIG15IGludGVyZXN0IHJlZ2FyZGluZyBILjMyMy4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBkaWFnbm9zZS4gTWF5YmUgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcgYW4gSC4zMjMtYmFzZWQgVm9JUCBzZXR1cCBhbmQgSSYjMzk7bSB3b25kZXJpbmcgaWYgYSBzcGVjaWZpYyBtb2R1bGUgcmVsYXRlZCB0byB0aGF0IHByb3RvY29sIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiBPciBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgZXZlbiB0aGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdHMgTkFUIGltcGxlbWVudGF0aW9uLiBJcyBpdCBwcm9wZXJseSBtYW5hZ2luZyB0aGUgc2lnbmFsaW5nIGFuZCBtZWRpYSBzdHJlYW1zPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IElzIGl0IHNvbWV0aGluZyBJIG5lZWQgdG8gY29uZmlndXJlLCBkZWJ1Zywgb3IgbWF5YmUgZXZlbiByZXBsYWNlPyBUaGUgbGFjayBvZiBjb250ZXh0IGltcGxpZXMgdGhhdCBJJiMzOTt2ZSBhbHJlYWR5IHNldCBhIGxvdCBvZiBzdGFnZSwgYW5kIHRoYXQganVzdCB0aGUgbmFtZSBvZiBhIHNwZWNpZmljIG1vZHVsZSByZWxhdGVkIHRvIEguMzIzIGlzIGVub3VnaCB0byBzcHVyIHRob3VnaHQuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCB0byB0aGUgcm9vdCBvZiBhIHZlcnkgc3BlY2lmaWMsIGFuZCBwcm9iYWJseSBub24tdHJpdmlhbCwgZGV0YWlsIHdpdGhpbiB0aGlzIHdob2xlIG5ldHdvcmsgdHJhbnNsYXRpb24gcHJvY2Vzcy4gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gY29udGludWUgbXkgbGluZSBvZiByZWFzb25pbmcsIGJ1dCB0aGF0IHNpbmdsZSBtb2R1bGUgbmFtZSBpcyBjbGVhcmx5IHRoZSBrZXkgdG8gdW5sb2NraW5nIHRoZSBuZXh0IHBpZWNlIG9mIHRoaXMgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUX0gzMjMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MTE4PWNvbmZpZyBORl9OQVRfUFBUUFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfTkFUX0gzMjNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKlRoaW5raW5nIEFib3V0IEhhc2hsaW1pdHMgYW5kIE5ldGZpbHRlcioqCgpIbW0sIGBORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUYC4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgYWx3YXlzIG1ha2VzIG1lIHRoaW5rLi4uIGhvdyByb2J1c3QgaXMgdGhlIGltcGxlbWVudGF0aW9uIHJlYWxseT8gV2hhdCBhcmUgdGhlIGtleSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhdCBzY2FsZT8gSXMgaXQgdGhyZWFkLXNhZmUgaW4gYWxsIHRoZSB3YXlzIGl0ICpuZWVkcyogdG8gYmU/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHRoYXQgbWlnaHQgcmVhciB0aGVpciB1Z2x5IGhlYWRzIHVuZGVyIGhlYXZ5IGxvYWQsIGNhdXNpbmcgdW5leHBlY3RlZCBkcm9wcyBvciBldmVuIHdvcnNlLCBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyDigJMgaG93IGFyZSBjb2xsaXNpb25zIGhhbmRsZWQgd2l0aGluIHRoZSBoYXNoIHRhYmxlPyBBbmQgd2hhdCBhYm91dCBtZW1vcnkgY29uc3VtcHRpb24gd2l0aCBhIGxhcmdlIG51bWJlciBvZiBydWxlcz8gQXJlIHRoZXJlIGFueSBnb3RjaGFzIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaGFzaCBsaW1pdHMgdGhlbXNlbHZlcz8gSSBzaG91bGQgcmV2aWV3IHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWNlbnQgcGF0Y2hlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTMxND1jb25maWcgTkVURklMVEVSX1hUX01BVENIX0VTUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzMjM6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzI0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYXNobGltaXRcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTQ2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEVzc2VudGlhbCBOZXR3b3JrIFByb3RvY29sIENvbnN0YW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5kYW1lbnRhbCBjb25zdGFudHMgc3RyYWlnaHQgaW4gbXkgaGVhZCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFZpcnR1YWwgU2VydmVyIChWUykgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGNvcnJlY3QgZGVmaW5pdGlvbnMgZm9yIHRoZSBwcm90b2NvbCBpZGVudGlmaWVycy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdmFsdWVzIGFuZCBhbnkgcG90ZW50aWFsIG51YW5jZXMgb2YgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYSBiZWF0LiBBZnRlciBhbGwsIGluY29ycmVjdCB2YWx1ZXMgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgc2lnbmlmaWNhbnQgYW5kIGVhc2lseSBvdmVybG9va2VkIGVycm9ycyBkb3duc3RyZWFtIGluIHRyYWZmaWMgcm91dGluZyBvciBoZWFsdGggY2hlY2tzLiBMZXQgbWUgbWFrZSBzdXJlIEkga25vdyB0aGUgdmFsdWVzLiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIHRoZSBJUFZTIENvbmZpZyBmb3IgUFJPVE9fVENQKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBUQ1Agd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBjb2RlLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSB3b3VsZCBiZSB0aGUgYEtjb25maWdgIGZpbGUsIGxvY2F0ZWQgdW5kZXIgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSBrZXJuZWwgbW9kdWxlcyBkZWZpbmUgdGhlaXIgYnVpbGQgb3B0aW9ucy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgUFJPVE9fVENQYC4gVGhpcyBzaG91bGQgcG9pbnQgbWUgdG93YXJkcyBob3cgVENQIGxvYWQgYmFsYW5jaW5nIGFuZCBvdGhlciByZWxhdGVkIFRDUC1zcGVjaWZpYyBmZWF0dXJlcyB3aXRoaW4gSVBWUyBhcmUgY29uZmlndXJlZC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFwmIzM0O0lQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXHRJUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODIyCgkJCQkJCQlvdXRwdXQ6IDQwNwoJCQkJCQkJdGhvdWdodHM6IDk3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgU3ltYm9sIFNldCBmb3IgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgSSBuZWVkIHRvIGV4YW1pbmUgcmVsYXRlZCB0byBJUFZTLCBjb25udHJhY2ssIE5ldGZpbHRlciB0YWJsZXMsIGFuZCBoYXNobGltaXQuIEZpcnN0LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgYXJlIGFsbCB2YWxpZCBwcm90b2NvbCBkZWZpbml0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQuIEkmIzM5O3ZlIG5vdGVkIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYElQX1ZTX1BST1RPX1NDVFBgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9OQVRfU0lQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX05BVF9IMzIzYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAuCgpOZXh0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBtb3JlIGdyYW51bGFyIHN5bWJvbHMsIGZvY3VzaW5nIG9uIHRob3NlIHRoYXQgYXJlIGxpa2VseSByZWxldmFudC4KCkZvciBJUFZTLCBJJiMzOTt2ZSBpZGVudGlmaWVkOiBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGFuZCBgc2N0cF9jc3VtX2NoZWNrYC4KCkluIHRoZSBjb25udHJhY2sgcmVhbG0sIEkmIzM5O20gbG9va2luZyBhdDogYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgLCBgbmF0X3J0cF9ydGNwYCwgYW5kIGBuZl9uYXRfc2RwX21lZGlhYC4KCk5ldGZpbHRlciB0YWJsZXMgYXJlIHJlcHJlc2VudGVkIGJ5OiBgbmZ0X29ial9sb29rdXBgLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc190YWJsZV9kZXN0cm95YCwgYG5mX3RhYmxlc19uZXdvYmpgLCBhbmQgYG5mdF9vYmpfZGVsYC4KCkZpbmFsbHksIGZvciB4dF9oYXNobGltaXQsIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlOiBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAgYW5kIGBodGFibGVfY3JlYXRlYC4KCk5vdywgYSBxdWljayBjaGVjayBvbiB0aGUgdmlzaWJpbGl0eSBvZiBmdW5jdGlvbnMgaXMgbmVjZXNzYXJ5LiBJdCBzZWVtcyBgbmZ0X29ial9kZWxgIGlzIHN0YXRpYyB3aXRoaW4gYG5mX3RhYmxlc19hcGkuY2AuIEZ1cnRoZXIsIGBuZl90YWJsZXNfbmV3dGFibGVgLCBgbmZfdGFibGVzX3RhYmxlX2Rlc3Ryb3lgLCBhbmQgYG5mX3RhYmxlc19uZXdvYmpgIGFyZSBhbHNvIHN0YXRpYy4gQWx0aG91Z2ggdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsuIEhvd2V2ZXIsIGBuZl90YWJsZXNfdGFibGVfZGVzdHJveWAgaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBhdm9pZCBpbmNsdWRpbmcgaXQuIEkmIzM5O2xsIHN0aWNrIHdpdGggYG5mdF9vYmpfbG9va3VwYCBhbmQgYG5mX3RhYmxlc19uZXd0YWJsZWAsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlLgoKYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgIGlzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBnb29kLiBgbmF0X3J0cF9ydGNwYCBhbmQgYG5mX25hdF9zZHBfbWVkaWFgIGFyZSBzdGF0aWMsIHJlc2lkaW5nIGluIGBuZl9uYXRfaDMyMy5jYCBhbmQgYG5mX25hdF9zaXAuY2AgcmVzcGVjdGl2ZWx5LgoKQ2hlY2tpbmcgdGhlIElQVlMgZnVuY3Rpb25zIGFnYWluLCBJIGZpbmQgdGhhdCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIHN0YXRpYyBpbiBgaXBfdnNfY29ubi5jYC4gYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YCBhcmUgZXhwb3J0ZWQuIGBpcF92c19vdXRfaWNtcGAgYW5kIGBpcF92c19pbl9pY21wYCBhcmUgc3RhdGljIGluIGBpcF92c19jb3JlLmNgLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7dmUgZmluYWxpemVkIG15IHNldCBvZiBzeW1ib2xzIHRvIGluY2x1ZGU6CgpgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBzY3RwX2NzdW1fY2hlY2tgLCBgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcmAsIGBuYXRfcnRwX3J0Y3BgLCBgbmZfbmF0X3NkcF9tZWRpYWAsIGBuZnRfb2JqX2xvb2t1cGAsIGBuZl90YWJsZXNfbmV3dGFibGVgLCBgbmZfdGFibGVzX25ld29iamAsIGBuZnRfb2JqX2RlbGAsIGFuZCBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAuCgpJIGJlbGlldmUgdGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCBhbmQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fU0NUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX05BVF9TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfTkFUX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgICAmIzM0O3RjcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3VkcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3NjdHBfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDtuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyJiMzNDssCiAgICAmIzM0O25hdF9ydHBfcnRjcCYjMzQ7LAogICAgJiMzNDtuZl9uYXRfc2RwX21lZGlhJiMzNDssCiAgICAmIzM0O25mdF9vYmpfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXd0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3b2JqJiMzNDssCiAgICAmIzM0O25mdF9vYmpfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hsaW1pdF9tdF9jaGVja19jb21tb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtdWx0aXBsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zLCBpbmNsdWRpbmcgSVBWUyBjb25uZWN0aW9uIGhhbmRsaW5nIGFuZCBJQ01QL2NoZWNrc3VtIHByb2Nlc3NpbmcsIGNvbm50cmFjayBleHBlY3RhdGlvbiBoYW5kbGluZyBmb3IgU0lQIGFuZCBILjMyMywgbmZfdGFibGVzIG9iamVjdCBsb29rdXAgbWVjaGFuaXNtcywgYW5kIHh0X2hhc2hsaW1pdCBtYXRjaGluZy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NJUCYjMzQ7LAogICAgJiMzNDtORl9OQVRfU0lQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX05BVF9IMzIzJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9maWxsX2Nwb3J0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7bmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpciYjMzQ7LAogICAgJiMzNDtuYXRfcnRwX3J0Y3AmIzM0OywKICAgICYjMzQ7bmZfbmF0X3NkcF9tZWRpYSYjMzQ7LAogICAgJiMzNDtuZnRfb2JqX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3dGFibGUmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld29iaiYjMzQ7LAogICAgJiMzNDtuZnRfb2JqX2RlbCYjMzQ7LAogICAgJiMzNDtoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozNzo1NC4yMzg0MDY3NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDYxNDMyMzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX05BVF9TSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9OQVRfSDMyM1wiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCIsXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiLFxuICAgIFwic2N0cF9jc3VtX2NoZWNrXCIsXG4gICAgXCJuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyXCIsXG4gICAgXCJuYXRfcnRwX3J0Y3BcIixcbiAgICBcIm5mX25hdF9zZHBfbWVkaWFcIixcbiAgICBcIm5mdF9vYmpfbG9va3VwXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19uZXdvYmpcIixcbiAgICBcIm5mdF9vYmpfZGVsXCIsXG4gICAgXCJoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtdWx0aXBsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zLCBpbmNsdWRpbmcgSVBWUyBjb25uZWN0aW9uIGhhbmRsaW5nIGFuZCBJQ01QL2NoZWNrc3VtIHByb2Nlc3NpbmcsIGNvbm50cmFjayBleHBlY3RhdGlvbiBoYW5kbGluZyBmb3IgU0lQIGFuZCBILjMyMywgbmZfdGFibGVzIG9iamVjdCBsb29rdXAgbWVjaGFuaXNtcywgYW5kIHh0X2hhc2hsaW1pdCBtYXRjaGluZy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzc6NTQuMjM4NDE2OTExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODM0Mjk4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MWQ0OTQyYjg0YjViMmJmMWFjNzI4MGNmOWUxMDJlMjBkYTQ0NWYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDIzOjM3OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaFxcbmluZGV4IGRiYzYxNGRmZTBkNTY1Li5hYWZhMGMwNGY5MTdlYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0cnVjdCBuZl9uYXRfc2lwX2hvb2tzIHtcXG4gXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbik7XFxuIFxcbiBcXHR2b2lkICgqc2VxX2FkanVzdCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMxNiBvZmYpO1xcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgczMyIG9mZik7XFxuIFxcbiBcXHR1bnNpZ25lZCBpbnQgKCpleHBlY3QpKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uOWFlOWFhZDY1NTQxZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5AQCAtMjUsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFx0XFx0LyogZm9yIHVuaW9uIG5mX2luZXRfYWRkciAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXHRcXHRcXHQvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXFx1MDAzZVxcbiAjZW5kaWZcXG5AQCAtMTk3Miw4ICsxOTc0LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxcbi1cXHRcXHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbkBAIC0xOTg2LDggKzE5ODgsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbkBAIC0yMDU5LDE1ICsyMDYxLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIH1cXG4gXFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XFxuK1xcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuICNlbmRpZlxcbiBcXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIHtcXG4gXFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xcbkBAIC0yMDkzLDYgKzIwOTUsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcXG4gXFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKVxcbit7XFxuK1xcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xcbitcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHQvKiBMT0NBTF9PVVQgPyAqL1xcbitcXHRpZiAoIXNrYi1cXHUwMDNlZGV2IHx8IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cXG4rXFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuK1xcdFxcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVxcdTAwM2VydDZpX2ZsYWdzIFxcdTAwMjYgUlRGX0xPQ0FMKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIShza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKVxcbit7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcXG4rfVxcbitcXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcXG5pbmRleCBjMDI0MzQ1YzliZDg2Mi4uMjZkNmJhYmQ5MmZjZDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcXG5AQCAtMTYxLDYgKzE2MSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIFxcdHJldHVybiBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoZXhwZWN0LCAwLCAwLCBmbGFncyk7XFxuIH1cXG4gXFxuK2ludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3RbXSxcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWcpO1xcbitcXG4gc3RydWN0IG5mX2Nvbm5faGVscDtcXG4gdm9pZCBuZl9jdF9leHBlY3RhdGlvbl9nYyhzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXG5pbmRleCA5ZDg0NDM1NGM0ZDk1Ni4uM2JlNjEyMTQ1YzEzMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuQEAgLTEyOTQsNiArMTI5NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdXNlX2luY19yZXN0b3JlKHUzMiAqdXNlKVxcbiAgKlxcdEBzZXRzOiBzZXRzIGluIHRoZSB0YWJsZVxcbiAgKlxcdEBvYmplY3RzOiBzdGF0ZWZ1bCBvYmplY3RzIGluIHRoZSB0YWJsZVxcbiAgKlxcdEBmbG93dGFibGVzOiBmbG93IHRhYmxlcyBpbiB0aGUgdGFibGVcXG4rICpcXHRAb2JqbmFtZV9odDogaGFzaHRhYmxlIGZvciBvYmplY3RzIGxvb2t1cCBieSBuYW1lXFxuICAqXFx0QGhnZW5lcmF0b3I6IGhhbmRsZSBnZW5lcmF0b3Igc3RhdGVcXG4gICpcXHRAaGFuZGxlOiB0YWJsZSBoYW5kbGVcXG4gICpcXHRAdXNlOiBudW1iZXIgb2YgY2hhaW4gcmVmZXJlbmNlcyB0byB0aGlzIHRhYmxlXFxuQEAgLTEzMTMsNiArMTMxNCw3IEBAIHN0cnVjdCBuZnRfdGFibGUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0c2V0cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdG9iamVjdHM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRmbG93dGFibGVzO1xcbitcXHRzdHJ1Y3QgcmhsdGFibGVcXHRcXHRcXHRvYmpuYW1lX2h0O1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRoZ2VuZXJhdG9yO1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRoYW5kbGU7XFxuIFxcdHUzMlxcdFxcdFxcdFxcdHVzZTtcXG5AQCAtMTQwMCw3ICsxNDAyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpuZnRfb2JqX2RhdGEoY29uc3Qgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gI2RlZmluZSBuZnRfZXhwcl9vYmooZXhwcilcXHQqKChzdHJ1Y3QgbmZ0X29iamVjdCAqKiluZnRfZXhwcl9wcml2KGV4cHIpKVxcbiBcXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBvYmp0eXBlLFxcbiBcXHRcXHRcXHRcXHQgIHU4IGdlbm1hc2spO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xcbmluZGV4IDE4M2U4YTNmZjJiYWJkLi42YmNkNjczNDc2OWI1OSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jXFxuQEAgLTE4Miw2ICsxODIsNyBAQCBzdGF0aWMgaW50IG5hdF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRjcF9leHApXFxuIHtcXG4rXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9wYWlyWzJdID0geyBydHBfZXhwLCBydGNwX2V4cCB9O1xcbiBcXHRzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSBuZmN0X2hlbHBfZGF0YShjdCk7XFxuIFxcdGludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxuIFxcdGludCBpO1xcbkBAIC0yMjcsMjIgKzIyOCwxMyBAQCBzdGF0aWMgaW50IG5hdF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHRydHBfZXhwLVxcdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQpO1xcbi1cXHRcXHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydHBfZXhwLCAwKTtcXG4rXFx0XFx0cnRjcF9leHAtXFx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCArIDEpO1xcbitcXHRcXHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHJ0cF9wYWlyLCAwKTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuLVxcdFxcdFxcdHJ0Y3BfZXhwLVxcdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9XFxuLVxcdFxcdFxcdCAgICBodG9ucyhuYXRlZF9wb3J0ICsgMSk7XFxuLVxcdFxcdFxcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwLCAwKTtcXG4tXFx0XFx0XFx0aWYgKHJldCA9PSAwKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xcbi1cXHRcXHRcXHRcXHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fSBlbHNlIGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdFxcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XFxuLVxcdFxcdFxcdFxcdG5hdGVkX3BvcnQgPSAwO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2UgaWYgKHJldCAhPSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH0gZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fSBlbHNlIGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdG5hdGVkX3BvcnQgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5iMmQ3Nzk3MzI3MmQyNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gI2VuZGlmXFxuIFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoZGF0YSwgc2V0KSwgZXh0KTtcXG4tXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcXG4rXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcXHUwMDI2XFx1MDAyNiAhZXh0LVxcdTAwM2V0YXJnZXQpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChkYXRhLCBzZXQpLCBleHQpO1xcbiBcXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcbiBcXHRcXHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKGRhdGEsIHNldCksIGV4dCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG5AQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKlxcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcXG5AQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4rXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqXFx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbmluZGV4IDZlZDI2MjIzNjNmMGQ2Li4zNmM1Y2JhMDNmNWJjYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbkBAIC03MCwyNSArNzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxcbiAgKiAtIGhhc2ggdGFibGUgcmVzaXplIHdvcmtzIGxpa2UgcmVoYXNoIGJ1dCBhbHdheXMgcmVoYXNoZXMgaW50byBuZXcgdGFibGVcXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cXG4rICogLSBvbiByZXNpemUsIGJ1Y2tldCBmcm9tIHRoZSBvbGQgdGFibGUgaXMgbG9ja2VkIGJlZm9yZSBidWNrZXQgZnJvbSB0aGVcXG4rICogbmV3IHRhYmxlXFxuICAqIC0gY3AtXFx1MDAzZWxvY2sgcHJvdGVjdHMgY29ubiBmaWVsZHMgbGlrZSBjcC1cXHUwMDNlZmxhZ3MsIGNwLVxcdTAwM2VkZXN0XFxuICAqL1xcbiBcXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXFxuKy8qKlxcbisgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaFxcbisgKiBAdDpcXHRcXHRoYXNoIHRhYmxlIGZvciBobjAsIG5ld190Ymwgd2hlbiBuZXdfaGFzaD10cnVlXFxuKyAqIEB0MjpcXHRcXHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxcbisgKiBAY3A6XFx0XFx0Y29ubmVjdGlvblxcbisgKiBAaGFzaF9rZXk6XFx0aGFzaCBrZXkgZm9yIGhuMFxcbisgKiBAaGFzaF9rZXkyOlxcdGhhc2gga2V5IGZvciBobjFcXG4rICogQHVzZTI6XFx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXFxuKyAqIEBuZXdfaGFzaDpcXHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICogQG5ld19oYXNoMjpcXHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICogQGhlYWRfcmV0OlxcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxcbisgKiBAaGVhZDJfcmV0OlxcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxcbisgKlxcbisgKiBXZSBzdXBwb3J0IDMgbW9kZXM6XFxuKyAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcXG4rICogLSBoYXNoIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIGhhc2hpbmdcXG4rICogLSBzZWVrIGhuMCBhbmQgaGFzaCBobjEsIHVzZWQgd2hlbiBmb3J3YXJkaW5nIG1ldGhvZCBpcyBjaGFuZ2VkXFxuKyAqL1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWRcXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4tXFx0ICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxcbi1cXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcXG4rY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbitcXHQgICAgICB1MzIgaGFzaF9rZXksIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcXG4rXFx0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXFxuK1xcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XFxuIFxcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XFxuLVxcdHN0cnVjdCBpcF92c19yaHQgKnQyID0gdDtcXG4tXFx0dTMyIGlkeCwgaWR4MjtcXG4rXFx0aW50IGlkeCA9IDAsIGlkeDIgPSAwO1xcbitcXG4rXFx0LyogQWR2YW5jZSBpZHgyIHdoZW4gbmV3X2hhc2ggaXMgbm90IHNldCBidXQgaGFzaF9rZXkyXFxuK1xcdCAqIGlzIGZvciBuZXcgdGFibGVcXG4rXFx0ICovXFxuK1xcdGlmIChuZXdfaGFzaDIgXFx1MDAyNlxcdTAwMjYgdXNlMiBcXHUwMDI2XFx1MDAyNiB0ICE9IHQyKVxcbitcXHRcXHRpZHgyKys7XFxuIFxcbi1cXHRpZHggPSBoYXNoX2tleSBcXHUwMDI2IHQtXFx1MDAzZW1hc2s7XFxuLVxcdGlmICh1c2UyKVxcbi1cXHRcXHRpZHgyID0gaGFzaF9rZXkyIFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0ZWxzZVxcbi1cXHRcXHRpZHgyID0gaWR4O1xcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuIFxcdFxcdC8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqL1xcbiBcXG5AQCAtMTAwLDQ2ICsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4gXFx0XFx0XFx0ICogYm90aCBub2RlcyBpbiBkaWZmZXJlbnQgdGFibGVzLCB1c2UgaWR4L2lkeDJcXG4gXFx0XFx0XFx0ICogZm9yIHByb3BlciBsb2NrIG9yZGVyaW5nIGZvciBoZWFkcy5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlkeCA9IGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0XFx0XFx0aWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmICh1c2UyKSB7XFxuLVxcdFxcdFxcdGlmICghaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcXG4tXFx0XFx0XFx0XFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cXG4tXFx0XFx0XFx0XFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXFx1MDAzZW5ld190YmwpO1xcbi1cXHRcXHRcXHRcXHRpZHgyID0gaGFzaF9rZXkyIFxcdTAwMjYgdDItXFx1MDAzZW1hc2s7XFxuLVxcdFxcdFxcdFxcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0aWR4MiA9IGlkeDtcXG4rXFx0XFx0XFx0aWR4Kys7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAodXNlMiBcXHUwMDI2XFx1MDAyNiAhbmV3X2hhc2gyIFxcdTAwMjZcXHUwMDI2ICFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xcbitcXHRcXHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xcbitcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cXHUwMDNlbmV3X3RibCk7XFxuK1xcdFxcdGlkeDIrKztcXG4rXFx0fVxcbiBcXG4rXFx0aWYgKCF1c2UyKVxcbitcXHRcXHRpZHgyID0gaWR4O1xcbiBcXHRoZWFkID0gdC1cXHUwMDNlYnVja2V0cyArIChoYXNoX2tleSBcXHUwMDI2IHQtXFx1MDAzZW1hc2spO1xcbiBcXHRoZWFkMiA9IHVzZTIgPyB0Mi1cXHUwMDNlYnVja2V0cyArIChoYXNoX2tleTIgXFx1MDAyNiB0Mi1cXHUwMDNlbWFzaykgOiBoZWFkO1xcbiBcXG4tXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbi1cXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xcbi1cXG4tXFx0aWYgKGlkeCBcXHUwMDNjPSBpZHgyKSB7XFxuK1xcdGlmIChpZHggXFx1MDAzZSBpZHgyIHx8IChoZWFkIFxcdTAwM2UgaGVhZDIgXFx1MDAyNlxcdTAwMjYgaWR4ID09IGlkeDIpKSB7XFxuK1xcdFxcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xcbiBcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQpO1xcbi1cXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4tXFx0XFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xcbiBcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQpO1xcbitcXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4rXFx0XFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdH1cXG4gXFx0aWYgKCFuZXdfaGFzaCkge1xcbitcXHRcXHRib29sIGNoYW5nZWQ7XFxuK1xcbiBcXHRcXHQvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovXFxuIFxcdFxcdGhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4tXFx0XFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5KTtcXG4rXFx0XFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcXG4rXFx0XFx0aWYgKHVzZTIgXFx1MDAyNlxcdTAwMjYgIW5ld19oYXNoMikge1xcbitcXHRcXHRcXHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXHRcXHRcXHRjaGFuZ2VkIHw9IGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRoYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyO1xcbitcXHRcXHR9XFxuIFxcdFxcdC8qIEhhc2ggY2hhbmdlZCA/ICovXFxuLVxcdFxcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcXG4tXFx0XFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcXHUwMDI2XFx1MDAyNiB1c2UyKSkge1xcbitcXHRcXHRpZiAoY2hhbmdlZCkge1xcbiBcXHRcXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4gXFx0XFx0XFx0XFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcXG4gXFx0XFx0XFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xcbi1cXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0XFx0XFx0aGFzaF9rZXkgPSBoYXNoX2tleV9uZXc7XFxuIFxcdFxcdFxcdGhhc2hfa2V5MiA9IGhhc2hfa2V5X25ldzI7XFxuIFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuQEAgLTE1NSw3ICsxNzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLFxcbiBcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4gXFx0XFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcXG4gXFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xcbi1cXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbkBAIC0yNjgsOCArMjg2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gXFx0XFx0dXNlMiA9IGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxcbi1cXHRcXHQgICAgICBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxcbitcXHRcXHQgICAgICB0cnVlIC8qIG5ld19oYXNoMiAqLywgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuIFxcbiBcXHRjcC1cXHUwMDNlZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX0hBU0hFRDtcXG4gXFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5LCBoYXNoX2tleSk7XFxuQEAgLTI4MCw2ICsyOTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSwgaGVhZDIpO1xcbiBcXG4gXFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcXG4rXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcdHJldCA9IDE7XFxuIFxcbiBcXHQvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqL1xcbkBAIC0zMDYsMTggKzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCk7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gXFxuIFxcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cXHUwMDNlY29ubl90YWIpO1xcbiBcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4gXFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbiBcXHR1c2UyID0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApO1xcbiBcXG4tXFx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXFxuLVxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcXG4rXFx0XFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4gXFxuIFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XFxuIFxcdFxcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXFxuLVxcdFxcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KSkge1xcbitcXHRcXHRpZiAodXNlMiA9PSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHJlZmNvdW50X2RlY19pZl9vbmUoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpKSB7XFxuIFxcdFxcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjAubm9kZSk7XFxuIFxcdFxcdFxcdGlmICh1c2UyKVxcbiBcXHRcXHRcXHRcXHRobGlzdF9ibF9kZWxfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUpO1xcbkBAIC0zMjgsNiArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gXFxuIFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuIFxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC02MzIsNiArNjU1LDcgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdGludCBudGJsO1xcbiBcXHRpbnQgZGlyO1xcbiBcXG4rcmVzdGFydDpcXG4gXFx0LyogTm8gcGFja2V0cyBmcm9tIGluc2lkZSwgc28gd2UgY2FuIGRvIGl0IGluIDIgc3RlcHMuICovXFxuIFxcdGRpciA9IHVzZTIgPyAxIDogMDtcXG4gXFxuQEAgLTY4Niw2ICs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdC8qIFByb3RlY3QgdGhlIGNwLVxcdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuIFxcbitcXHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXFxuK1xcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xcbitcXHRcXHR1c2UyID0gIXVzZTI7XFxuK1xcdFxcdGlmICh1c2UyKSB7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdC8qIFJlc3RhcnQgd2l0aCBuZXcgdXNlMiB2YWx1ZSAqL1xcbitcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGRpcikge1xcbitcXHRcXHRcXHQvKiBOb3Qgc3RhcnRlZCB5ZXQsIHNvIGp1c3Qgc2tpcCBkaXIgMSAqL1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRkaXItLTtcXG4rXFx0XFx0XFx0Z290byBuZXh0X2RpcjtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBKdXN0IGZpbmlzaCBkaXIgMCAqL1xcbitcXHR9XFxuK1xcbiBcXHQvKiBMb2NrIHNlcWNvdW50IG9ubHkgZm9yIHRoZSBvbGQgYnVja2V0LCBldmVuIGlmIHdlIGFyZSBvbiBuZXcgdGFibGVcXG4gXFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cXG4gXFx0ICovXFxuQEAgLTc1Miw2ICs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdFxcdGdvdG8gbmV4dF9kaXI7XFxuIH1cXG4gXFxuKy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cXG4rc3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gY3AtXFx1MDAzZWlwdnM7XFxuK1xcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XFxuK1xcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcXG4rXFx0c3RydWN0IGlwX3ZzX3JodCAqdCwgKnQyO1xcbitcXG4rXFx0LyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqL1xcbitcXHRpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkgfHxcXG4rXFx0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXFxuK1xcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EpID09XFxuK1xcdCAgICAoKG5ld19mbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cXHUwMDNlY29ubl90YWIpO1xcbitcXHRpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XFxuK1xcdFxcdC8qIFN0b3AgZG91YmxlIGhhc2hpbmcgKi9cXG4rXFx0XFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSk7XFxuK1xcdFxcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5KTtcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcbitcXHRcXHQvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi9cXG4rXFx0XFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSk7XFxuK1xcdFxcdFdSSVRFX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSwgaGFzaF9rZXkpO1xcbitcXHRcXHRobGlzdF9ibF9kZWxfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUpO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XFxuK1xcbitcXHRcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBTdGFydCBkb3VibGUgaGFzaGluZyAqL1xcbitcXG4rXFx0XFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSk7XFxuK1xcbitcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LVxcdTAwM2VuZXdfdGJsKTtcXG4rXFx0XFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xcbitcXHRcXHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcXG4rXFxuK1xcdFxcdC8qIENoYW5nZSB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9ja2VkIGhuMCAqL1xcbitcXHRcXHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxcbitcXHRcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XFxuK1xcdFxcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XFxuK1xcbitcXHRcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qIEdldCBkZWZhdWx0IGxvYWQgZmFjdG9yIHRvIG1hcCBjb25uX2NvdW50L3VfdGhyZXNoIHRvIHQtXFx1MDAzZXNpemUgKi9cXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuIHtcXG5AQCAtMTAxNCw2ICsxMTEwLDkgQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuIFxcdGZsYWdzID0gY3AtXFx1MDAzZWZsYWdzO1xcbiBcXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xcbitcXHRcXHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cXG4rXFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxuK1xcbiBcXHRcXHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcXG4gXFx0XFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXFxuIFxcdFxcdCAqL1xcbkBAIC0xMDIxLDkgKzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuIFxcdFxcdFxcdGNvbm5fZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcXG4gXFx0XFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cXG4gXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xcbitcXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbitcXHRcXHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXFxuK1xcdFxcdCAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcXG4rXFx0XFx0XFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcXG4rXFx0XFx0Y3AtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdH1cXG4tXFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcXG4tXFx0Y3AtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdGNwLVxcdTAwM2VkZXN0ID0gZGVzdDtcXG4gXFxuIFxcdElQX1ZTX0RCR19CVUYoNywgXFxcIkJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXFxcIlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbmluZGV4IGJhZmFiOTM0NTFkMDM3Li42Yjc5ZTBjNGQ5ZTI4NCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbkBAIC04NjcsNyArODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxcbiBcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XFxuIH1cXG5AQCAtOTI0LDEzICs5MjQsMTMgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcXG4gICogLSBpbm91dDogMT1pbi1cXHUwMDNlb3V0LCAwPW91dC1cXHUwMDNlaW5cXG4gICovXFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxcbitcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpXFxuIHtcXG4gXFx0c3RydWN0IGlwaGRyICppcGhcXHQgPSBpcF9oZHIoc2tiKTtcXG4tXFx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gaXBoLVxcdTAwM2VpaGwqNDtcXG4tXFx0c3RydWN0IGljbXBoZHIgKmljbXBoXFx0ID0gKHN0cnVjdCBpY21waGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaWNtcF9vZmZzZXQpO1xcbitcXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdG9mZik7XFxuIFxcdHN0cnVjdCBpcGhkciAqY2lwaFxcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcXG4rXFx0dW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbkBAIC05NDUsOCArOTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cXG4tXFx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rXFx0aWYgKGhhc19wb3J0cykge1xcbiBcXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICsgY2lwaC1cXHUwMDNlaWhsKjQ7XFxuIFxcbiBcXHRcXHRpZiAoaW5vdXQpXFxuQEAgLTk1Nyw0OCArOTU2LDQwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIFxcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXFxuIFxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuLVxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpO1xcbitcXHRpY21waC1cXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcXG4tXFx0XFx0XFx0XFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXFxcIik7XFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFxcXCIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbi1cXHRcXHRcXHRcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXFxcIik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwaFxcdCA9IGlwdjZfaGRyKHNrYik7XFxuLVxcdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XFxuLVxcdHVuc2lnbmVkIGludCBvZmZzXFx0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXFxuLVxcdGludCBwcm90b2NvbDtcXG4gXFx0c3RydWN0IGljbXA2aGRyICppY21waDtcXG4tXFx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XFxuLVxcdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xcbiBcXG4tXFx0aXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZpY21wX29mZnNldCwgSVBQUk9UT19JQ01QVjYsIFxcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XFxuLVxcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGljbXBfb2Zmc2V0KTtcXG4tXFx0b2ZmcyA9IGljbXBfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XFxuLVxcdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcXG4tXFxuLVxcdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZvZmZzLCAtMSwgXFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcXG4rXFx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHRvZmYpO1xcbitcXHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgY2lwaC1cXHUwMDNlb2ZmKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbitcXHRcXHRjaWgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aXBoLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuLVxcdFxcdGNpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4rXFx0XFx0Y2loLVxcdTAwM2VzYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xcbi1cXHRpZiAoIWZyYWdvZmZzIFxcdTAwMjZcXHUwMDI2IChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHRcXHRcXHQgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHtcXG4tXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XFxuK1xcdGlmIChoYXNfcG9ydHMpIHtcXG4rXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cXHUwMDNlZGF0YSArIGNpcGgtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRJUF9WU19EQkcoMTEsIFxcXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXFxuQEAgLTEwMTEsMTkgKzEwMDIsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXG4gXFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cXG4gXFx0aWNtcGgtXFx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gdG9mZixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xcbi1cXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XFxuIFxcdHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcXG4tXFx0XFx0XFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XFxcIik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXFxuLVxcdFxcdFxcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlxcXCIpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xMDMzLDM2ICsxMDIyLDQxIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gICovXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXFxuLVxcdFxcdFxcdFxcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuIHtcXG4rXFx0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XFxuIFxcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcXG4rXFx0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkdfQlVGKDEsIFxcXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFxuK1xcdCAgICBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcXG4rXFx0XFx0Y3RvZmYgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIFxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFx0ZWxzZVxcbiAjZW5kaWZcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcXG4gXFxuIFxcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXFx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5MCw5ICsxMDg0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAqXFx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXFxuICAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuK1xcdFxcdFxcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTExMDcsMTcgKzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xcbiBcXHRcXHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbitcXHRcXHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXFxuK1xcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbi1cXHRvZmZzZXQgPSBpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlobCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuIFxcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuIFxcdGlmIChpYyA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4gXFxuIFxcdElQX1ZTX0RCRygxMiwgXFxcIk91dGdvaW5nIElDTVAgKCVkLCVkKSAlcEk0LVxcdTAwM2UlcEk0XFxcXG5cXFwiLFxcbiBcXHRcXHQgIGljLVxcdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXFxuLVxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4rXFx0XFx0ICBcXHUwMDI2aXB2c2gtXFx1MDAzZXNhZGRyLmlwLCBcXHUwMDI2aXB2c2gtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTExMzYsNyArMTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuIFxcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcXG4gXFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcXHUwMDI2X2NpcGgpO1xcbi1cXHRpZiAoY2loID09IE5VTEwpXFxuK1xcdGlmICghKGNpaCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZWlobCBcXHUwMDNlPSA1KSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuIFxcbiBcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXFx1MDAzZXByb3RvY29sKTtcXG5AQCAtMTE0NCw4ICsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4tXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4rXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2ICFwcC1cXHUwMDNlZG9udF9kZWZyYWcpKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxcbkBAIC0xMTU5LDkgKzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoIWNwKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4tXFx0c25ldC5pcCA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuLVxcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFxcdTAwMjZzbmV0LCBjaWgtXFx1MDAzZXByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTtcXG4rXFx0c25ldC5pcCA9IGlwdnNoLVxcdTAwM2VzYWRkci5pcDtcXG4rXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsIGlobCxcXG4rXFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5AQCAtMTE3NCw3ICsxMTY5LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xcbiBcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbiBcXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4gXFxuIFxcdCpyZWxhdGVkID0gMTtcXG4gXFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbkBAIC0xMjEwLDYgKzEyMDQsMTAgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCFwcClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuK1xcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4rXFx0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXFx1MDAyNlxcdTAwMjYgIXBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXFxuIFxcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVxcdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG4gXFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcXHUwMDI2Y2lwaCk7XFxuQEAgLTEyMTcsOSArMTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xcbi1cXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFxcdTAwMjZzbmV0LCBjaXBoLnByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVxcdTAwM2VsZW4sIGhvb2tudW0pO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTE1NDUsNyArMTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XFxuICNlbmRpZlxcbiBcXHRcXHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcXG4gXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxuLVxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCwgaG9va251bSk7XFxuK1xcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChyZWxhdGVkKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdmVyZGljdDtcXG5AQCAtMTc1Myw5ICsxNzUxLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTE3NjUsNyArMTc2Miw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0O1xcbiBcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XFxuLVxcdGNoYXIgKm91dGVyX3Byb3RvID0gXFxcIklQSVBcXFwiO1xcbitcXHRjaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9IFxcXCJJUElQXFxcIjtcXG4gXFx0dW5zaWduZWQgaW50IGhsZW5faXBpcDtcXG4gXFx0aW50IHVsZW4gPSAwO1xcbiBcXG5AQCAtMTc3NSwxNyArMTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4gXFx0XFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX1NUT0xFTjtcXG4rXFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0fVxcbiBcXG4tXFx0aXBoID0gaXBfaGRyKHNrYik7XFxuLVxcdG9mZnNldCA9IGlobCA9IGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0aWhsID0gaXBoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwaC1cXHUwMDNlbGVuO1xcbiBcXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbiBcXHRpZiAoaWMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRJUF9WU19EQkcoMTIsIFxcXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0ICBpYy1cXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxcbi1cXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTE4NjcsOCArMTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0cHAgPSBwZC1cXHUwMDNlcHA7XFxuIFxcbiBcXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXFxuLVxcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMTg3Niw3ICsxODc0LDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0b2Zmc2V0MiA9IG9mZnNldDtcXG4gXFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFxcdTAwMjZjaXBoKTtcXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuIFxcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxcbiBcXHQgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LlxcbkBAIC0xODk4LDEwICsxODk1LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dmVyZGljdCA9IE5GX0RST1A7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG4tXFx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xcbitcXHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkci5pcCk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0xOTY5LDEwICsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbi1cXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2loLVxcdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2loLVxcdTAwM2Vwcm90b2NvbClcXG4tXFx0XFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjAzMiw4ICsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRwcCA9IHBkLVxcdTAwM2VwcDtcXG4gXFxuLVxcdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xcbi1cXHRpZiAoY2lwaC5mcmFnb2ZmcylcXG4rXFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xcbitcXHRpZiAoY2lwaC5mcmFnb2ZmcyBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMjA1NywyMyArMjA1MiwyMiBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ld19jcCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xcbi1cXHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuLVxcdFxcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0IEFGX0lORVQ2KSkge1xcbitcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuK1xcdFxcdElQX1ZTX0RCRygxLCBcXFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbiBcXG4tXFx0LyogTmVlZCB0byBtYW5nbGUgY29udGFpbmVkIElQdjYgaGVhZGVyIGluIElDTVB2NiBwYWNrZXQgKi9cXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcXG4tXFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuLVxcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjE1Miw3ICsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XFxuIFxcdFxcdFxcdGludCByZWxhdGVkO1xcbiBcXHRcXHRcXHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocmVsYXRlZClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuQEAgLTIyMDAsOCArMjE5NCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAocmVzY2hlZCkge1xcbi1cXHRcXHRcXHRpZiAoIW9sZF9jdClcXG4rXFx0XFx0XFx0aWYgKCFvbGRfY3QpIHtcXG4rXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX05GQ1Q7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKCFhdG9taWNfcmVhZChcXHUwMDI2Y3AtXFx1MDAzZW5fY29udHJvbCkpXFxuIFxcdFxcdFxcdFxcdGlwX3ZzX2Nvbm5fZXhwaXJlX25vdyhjcCk7XFxuIFxcdFxcdFxcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xcbkBAIC0yMjE3LDggKzIyMTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHN5c2N0bF9leHBpcmVfbm9kZXN0X2Nvbm4oaXB2cykpIHtcXG4gXFx0XFx0XFx0Ym9vbCBvbGRfY3QgPSBpcF92c19jb25uX3VzZXNfb2xkX2Nvbm50cmFjayhjcCwgc2tiKTtcXG4gXFxuLVxcdFxcdFxcdGlmICghb2xkX2N0KVxcbitcXHRcXHRcXHRpZiAoIW9sZF9jdCkge1xcbitcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0XFx0Y3AtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfTkZDVDtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aXBfdnNfY29ubl9leHBpcmVfbm93KGNwKTtcXG4gXFx0XFx0XFx0X19pcF92c19jb25uX3B1dChjcCk7XFxuQEAgLTIyODgsNiArMjI4OCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cXHUwMDNlbmV0KTtcXG4rXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cXG5AQCAtMjI5NywxMCArMjI5OCw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc3RhdGUtXFx1MDAzZXBmID09IE5GUFJPVE9fSVBWNCkge1xcbiBcXHRcXHRpZiAoaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFx0XFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XFxuLVxcbiBcXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuIFxcbiBcXHRcXHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXFxuQEAgLTIzMTAsNyArMjMxMCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2spO1xcbitcXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBcXG4gc3RhdGljIGludFxcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXFxuK1xcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcXG4rXFx0c2N0cGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xcbiBcXG4gXFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xcbiBcXHRpZiAoc2N0cGgtXFx1MDAzZXNvdXJjZSAhPSBjcC1cXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxuLVxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxcbitcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XFxuK1xcdHNjdHBoID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcXG4gXFxuIFxcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cXG4gXFx0aWYgKHNjdHBoLVxcdTAwM2VkZXN0ICE9IGNwLVxcdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcXG5AQCAtMTg3LDE5ICsxODcsMjIgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNjdHBoZHIgKnNoO1xcbiBcXHRfX2xlMzIgY21wLCB2YWw7XFxuIFxcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbiBcXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XFxuIFxcbiBcXHRpZiAodmFsICE9IGNtcCkge1xcbiBcXHRcXHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cXG4tXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCBjaGVja3N1bSBmb3JcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbkBAIC0yOSw3ICsyOSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxuK1xcdFxcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xcbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZXNvdXJjZSA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gXFxuIFxcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbitcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0yNjAsNyArMjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZWRlc3QgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcbitcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXFx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXFx1MDAzZW9mZixcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0yNSw3ICsyNSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlc291cmNlID0gY3AtXFx1MDAzZXZwb3J0O1xcbiBcXG4gXFx0LypcXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5OCw0OCArMjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXFxuK1xcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XFxuIFxcbi1cXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuK1xcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVxcdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDlmZWY0MzM1ZGExM2ZkLi4wYjBjNTMwNDk5M2E5MSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbkBAIC0xNTAyLDIwICsxNTAyLDIyIEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiAgKi9cXG4gaW50XFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IHJ0YWJsZVxcdCpydDtcXHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHdsZW47XFxuIFxcbiBcXHQvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlXFxuIFxcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTUzMyw3ICsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsIGNwLVxcdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgTlVMTCwgaXBoKTtcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgY2lwaCk7XFxuIFxcdGlmIChsb2NhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdHdsZW4gPSBjaXBoLVxcdTAwM2VsZW47XFxuK1xcdGlmIChjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxcbitcXHQgICAgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XFxuK1xcdFxcdHdsZW4gKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cyk7XFxuIFxcbiBcXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xcbiBcXHRza2ItXFx1MDAzZWlnbm9yZV9kZiA9IDE7XFxuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIGludFxcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuK1xcdHVuc2lnbmVkIGludCB3bGVuO1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGU7XFxuQEAgLTE2MDAsNyArMTYxMSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xcbiBcXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcXG4gXFx0XFx0aWYgKGNwLVxcdTAwM2VwYWNrZXRfeG1pdClcXG4tXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwdnNoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcXG4gXFx0aWYgKGxvY2FsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcXG5AQCAtMTY0OCwxNCArMTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuIFxcbitcXHR3bGVuID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRpZiAoY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcXG4rXFx0ICAgIGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xcbitcXHRcXHR3bGVuICs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xcbitcXHRcXHRoYXNfcG9ydHMgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuIFxcdGlmIChza2JfY293KHNrYiwgcnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcbi1cXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7XFxuK1xcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXFxuaW5kZXggN2FlNjhkNjA1ODZhMjMuLjhhM2I5ZTMzZTk0Zjc3IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG5AQCAtNDI3LDcgKzQyNyw2IEBAIHN0YXRpYyB2b2lkIG5mX2N0X2V4cGVjdF9pbnNlcnQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCxcXG4gXFx0XFx0ZXhwLVxcdTAwM2V0aW1lb3V0ICs9IGhlbHBlci1cXHUwMDNlZXhwZWN0X3BvbGljeVtleHAtXFx1MDAzZWNsYXNzXS50aW1lb3V0ICogSFo7XFxuIFxcbiBcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmV4cC1cXHUwMDNlbG5vZGUsIFxcdTAwMjZtYXN0ZXJfaGVscC1cXHUwMDNlZXhwZWN0YXRpb25zKTtcXG4tXFx0bWFzdGVyX2hlbHAtXFx1MDAzZWV4cGVjdGluZ1tleHAtXFx1MDAzZWNsYXNzXSsrO1xcbiBcXG4gXFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZleHAtXFx1MDAzZWhub2RlLCBcXHUwMDI2bmZfY3RfZXhwZWN0X2hhc2hbaF0pO1xcbiBcXHRjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XFxuQEAgLTUzNCw2ICs1MzMsNyBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdG1hc3Rlcl9oZWxwLVxcdTAwM2VleHBlY3RpbmdbZXhwZWN0LVxcdTAwM2VjbGFzc10rKztcXG4gXFx0bmZfY3RfZXhwZWN0X2luc2VydChleHBlY3QsIG1hc3Rlcl9oZWxwKTtcXG4gXFxuIFxcdG5mX2N0X2V4cGVjdF9ldmVudF9yZXBvcnQoSVBFWFBfTkVXLCBleHBlY3QsIHBvcnRpZCwgcmVwb3J0KTtcXG5AQCAtNTQ2LDYgKzU0NiwzOSBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KTtcXG4gXFxuK2ludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3RbXSxcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbitcXHRtYXN0ZXJfaGVscCA9IG5mY3RfaGVscChleHBlY3RbMF0tXFx1MDAzZW1hc3Rlcik7XFxuK1xcdGlmICghbWFzdGVyX2hlbHAgfHwgbWFzdGVyX2hlbHAgIT0gbmZjdF9oZWxwKGV4cGVjdFsxXS1cXHUwMDNlbWFzdGVyKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGkrKykge1xcbitcXHRcXHRyZXQgPSBfX25mX2N0X2V4cGVjdF9jaGVjayhleHBlY3RbaV0sIG1hc3Rlcl9oZWxwLCBmbGFncyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChpID09IDEpXFxuK1xcdFxcdFxcdFxcdG1hc3Rlcl9oZWxwLVxcdTAwM2VleHBlY3RpbmdbZXhwZWN0WzBdLVxcdTAwM2VjbGFzc10tLTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bWFzdGVyX2hlbHAtXFx1MDAzZWV4cGVjdGluZ1tleHBlY3RbaV0tXFx1MDAzZWNsYXNzXSsrO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMjsgaSsrKSB7XFxuK1xcdFxcdG5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCk7XFxuK1xcdFxcdG5mX2N0X2V4cGVjdF9ldmVudF9yZXBvcnQoSVBFWFBfTkVXLCBleHBlY3RbaV0sIDAsIDApO1xcbitcXHR9XFxuK291dDpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcik7XFxuK1xcbiB2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3koYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcXG4gXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcXG5pbmRleCBmM2Y5MGE4NjYzMzg5NC4uZTRhNzBkMWQ3N2IwYjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbkBAIC0xNjYzLDcgKzE2NjMsNyBAQCBzdGF0aWMgaW50IHNpcF9oZWxwX3RjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0dW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjtcXG4gXFx0dW5zaWduZWQgaW50IG1zZ2xlbiwgb3JpZ2xlbjtcXG4gXFx0Y29uc3QgY2hhciAqZHB0ciwgKmVuZDtcXG4tXFx0czE2IGRpZmYsIHRkaWZmID0gMDtcXG4rXFx0czMyIGRpZmYsIHRkaWZmID0gMDtcXG4gXFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjbGVuO1xcbiBcXHRib29sIHRlcm07XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcXG5pbmRleCBhZWEwMmY2YWZmMDkyYS4uMTMzYmQ3MTNmZTBjMjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuY1xcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2lwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZl9uYXRfc2lwX3NlcV9hZGp1c3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLVxcdFxcdFxcdFxcdCAgczE2IG9mZilcXG4rXFx0XFx0XFx0XFx0ICBzMzIgb2ZmKVxcbiB7XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG5AQCAtNTkyLDYgKzU5Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbWVkaWFsZW4sXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpydHBfYWRkcilcXG4ge1xcbitcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG4gXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcXG5AQCAtNjIyLDI0ICs2MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0cnRwX2V4cC1cXHUwMDNldHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0KTtcXG4tXFx0XFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgTkZfQ1RfRVhQX0ZfU0tJUF9NQVNURVIpO1xcbi1cXHRcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGVsc2UgaWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cG9ydCA9IDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuIFxcdFxcdHJ0Y3BfZXhwLVxcdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHBvcnQgKyAxKTtcXG4tXFx0XFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcXG4rXFxuK1xcdFxcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xcbi1cXHRcXHRcXHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xcbitcXHRcXHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XFxuK1xcdFxcdGVsc2UgaWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0cG9ydCA9IDA7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCBhOWVhZjk0NTVjNzc4My4uYWYzNTdmNmM1MDcwYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbkBAIC00NSw4ICs0NSw2IEBAIGVudW0ge1xcbiBcXHRORlRfVkFMSURBVEVfRE8sXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IHJobHRhYmxlIG5mdF9vYmpuYW1lX2h0O1xcbi1cXG4gc3RhdGljIHUzMiBuZnRfY2hhaW5faGFzaChjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCk7XFxuIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2hfb2JqKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTtcXG4gc3RhdGljIGludCBuZnRfY2hhaW5faGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKiwgY29uc3Qgdm9pZCAqKTtcXG5AQCAtMTYzNSw2ICsxNjMzLDEwIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2NoYWluX2h0O1xcbiBcXG4rXFx0ZXJyID0gcmhsdGFibGVfaW5pdChcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfb2JqX2h0O1xcbitcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRhYmxlLVxcdTAwM2VjaGFpbnMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGFibGUtXFx1MDAzZXNldHMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGFibGUtXFx1MDAzZW9iamVjdHMpO1xcbkBAIC0xNjUzLDYgKzE2NTUsOCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXd0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2dGFibGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZnRfbmV0LVxcdTAwM2V0YWJsZXMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gZXJyX3RyYW5zOlxcbitcXHRyaGx0YWJsZV9kZXN0cm95KFxcdTAwMjZ0YWJsZS1cXHUwMDNlb2JqbmFtZV9odCk7XFxuK2Vycl9vYmpfaHQ6XFxuIFxcdHJobHRhYmxlX2Rlc3Ryb3koXFx1MDAyNnRhYmxlLVxcdTAwM2VjaGFpbnNfaHQpO1xcbiBlcnJfY2hhaW5faHQ6XFxuIFxcdGtmcmVlKHRhYmxlLVxcdTAwM2V1ZGF0YSk7XFxuQEAgLTE4MTksNiArMTgyMyw3IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc190YWJsZV9kZXN0cm95KHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyaGx0YWJsZV9kZXN0cm95KFxcdTAwMjZ0YWJsZS1cXHUwMDNlY2hhaW5zX2h0KTtcXG4rXFx0cmhsdGFibGVfZGVzdHJveShcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQpO1xcbiBcXHRrZnJlZSh0YWJsZS1cXHUwMDNlbmFtZSk7XFxuIFxcdGtmcmVlKHRhYmxlLVxcdTAwM2V1ZGF0YSk7XFxuIFxcdGtmcmVlKHRhYmxlKTtcXG5AQCAtODA4Niw3ICs4MDkxLDcgQEAgdm9pZCBuZnRfdW5yZWdpc3Rlcl9vYmooc3RydWN0IG5mdF9vYmplY3RfdHlwZSAqb2JqX3R5cGUpXFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7XFxuIFxcbiBzdHJ1Y3QgbmZ0X29iamVjdCAqbmZ0X29ial9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIG9ianR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgdTggZ2VubWFzaylcXG4ge1xcbkBAIC04MTAyLDcgKzgxMDcsNyBAQCBzdHJ1Y3QgbmZ0X29iamVjdCAqbmZ0X29ial9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHQgICAgICFsb2NrZGVwX2NvbW1pdF9sb2NrX2lzX2hlbGQobmV0KSk7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGxpc3QgPSByaGx0YWJsZV9sb29rdXAoXFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcXHUwMDI2aywgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcXG4rXFx0bGlzdCA9IHJobHRhYmxlX2xvb2t1cChcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xcbiBcXHRpZiAoIWxpc3QpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtODM4Miw3ICs4Mzg3LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3b2JqKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl90cmFucztcXG4gXFxuLVxcdGVyciA9IHJobHRhYmxlX2luc2VydChcXHUwMDI2bmZ0X29iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsXFxuK1xcdGVyciA9IHJobHRhYmxlX2luc2VydChcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsXFxuIFxcdFxcdFxcdCAgICAgIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9vYmpfaHQ7XFxuQEAgLTg1NjcsOCArODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGluZm8tXFx1MDAzZWV4dGFjaztcXG4gXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX2N1cihpbmZvLVxcdTAwM2VuZXQpO1xcbiBcXHR1OCBmYW1pbHkgPSBpbmZvLVxcdTAwM2VuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbi1cXHRjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmV0O1xcbitcXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IG5mdF9vYmplY3QgKm9iajtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XFxuIFxcdHUzMiBvYmp0eXBlO1xcbkBAIC0xMDQzNyw5ICsxMDQ0Miw5IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4gXFx0XFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuK3N0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxcbiB7XFxuLVxcdHJobHRhYmxlX3JlbW92ZShcXHUwMDI2bmZ0X29iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XFxuK1xcdHJobHRhYmxlX3JlbW92ZShcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XFxuIFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2b2JqLVxcdTAwM2VsaXN0KTtcXG4gfVxcbiBcXG5AQCAtMTExMjQsNyArMTExMjksNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFTE9CSjpcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFU1RST1lPQko6XFxuLVxcdFxcdFxcdG5mdF9vYmpfZGVsKG5mdF90cmFuc19vYmoodHJhbnMpKTtcXG4rXFx0XFx0XFx0bmZ0X29ial9kZWwodGFibGUsIG5mdF90cmFuc19vYmoodHJhbnMpKTtcXG4gXFx0XFx0XFx0bmZfdGFibGVzX29ial9ub3RpZnkoXFx1MDAyNmN0eCwgbmZ0X3RyYW5zX29iaih0cmFucyksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgdHJhbnMtXFx1MDAzZW1zZ190eXBlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTExNDE2LDcgKzExNDIxLDcgQEAgc3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxcbiBcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdG5mdF91c2VfZGVjX3Jlc3RvcmUoXFx1MDAyNnRhYmxlLVxcdTAwM2V1c2UpO1xcbi1cXHRcXHRcXHRcXHRuZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XFxuK1xcdFxcdFxcdFxcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ERUxPQko6XFxuQEAgLTEyMDQzLDcgKzEyMDQ4LDcgQEAgc3RhdGljIHZvaWQgX19uZnRfcmVsZWFzZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxcbiBcXHRcXHRuZnRfc2V0X2Rlc3Ryb3koXFx1MDAyNmN0eCwgc2V0KTtcXG4gXFx0fVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBuZSwgXFx1MDAyNnRhYmxlLVxcdTAwM2VvYmplY3RzLCBsaXN0KSB7XFxuLVxcdFxcdG5mdF9vYmpfZGVsKG9iaik7XFxuK1xcdFxcdG5mdF9vYmpfZGVsKHRhYmxlLCBvYmopO1xcbiBcXHRcXHRuZnRfdXNlX2RlYyhcXHUwMDI2dGFibGUtXFx1MDAzZXVzZSk7XFxuIFxcdFxcdG5mdF9vYmpfZGVzdHJveShcXHUwMDI2Y3R4LCBvYmopO1xcbiBcXHR9XFxuQEAgLTEyMjI1LDEwICsxMjIzMCw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX3RhYmxlc19tb2R1bGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfbmV0ZGV2X25vdGlmaWVyO1xcbiBcXG4tXFx0ZXJyID0gcmhsdGFibGVfaW5pdChcXHUwMDI2bmZ0X29iam5hbWVfaHQsIFxcdTAwMjZuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xcbi1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJfcmh0X29iam5hbWU7XFxuLVxcbiBcXHRlcnIgPSBuZnRfb2ZmbG9hZF9pbml0KCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9vZmZsb2FkO1xcbkBAIC0xMjI1MSw4ICsxMjI1Miw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX3RhYmxlc19tb2R1bGVfaW5pdCh2b2lkKVxcbiBlcnJfbmV0bGlua19ub3RpZmllcjpcXG4gXFx0bmZ0X29mZmxvYWRfZXhpdCgpO1xcbiBlcnJfb2ZmbG9hZDpcXG4tXFx0cmhsdGFibGVfZGVzdHJveShcXHUwMDI2bmZ0X29iam5hbWVfaHQpO1xcbi1lcnJfcmh0X29iam5hbWU6XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZl90YWJsZXNfZmxvd3RhYmxlX25vdGlmaWVyKTtcXG4gZXJyX25ldGRldl9ub3RpZmllcjpcXG4gXFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcXG5AQCAtMTIyNzQsNyArMTIyNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfdGFibGVzX21vZHVsZV9leGl0KHZvaWQpXFxuIFxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2bmZfdGFibGVzX25ldF9vcHMpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ0cmFuc19nY193b3JrKTtcXG4gXFx0cmN1X2JhcnJpZXIoKTtcXG4tXFx0cmhsdGFibGVfZGVzdHJveShcXHUwMDI2bmZ0X29iam5hbWVfaHQpO1xcbiBcXHRuZl90YWJsZXNfY29yZV9tb2R1bGVfZXhpdCgpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG5pbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTI1OSw5ICsyNTksNyBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG4gXFx0XFx0XFx0XFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IHJlbWFpbmRlciwgZGVsdGEsIGs7XFxuIFxcdHN0cnVjdCBuZnRfZGF0YSBtYXNrID0ge307XFxuLVxcdF9fYmUzMiByZW1haW5kZXJfbWFzaztcXG4gXFxuIFxcdGlmIChwcml2X2xlbiA9PSBmaWVsZF9sZW4pIHtcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZyZWctXFx1MDAzZW1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcXG5AQCAtMjcwLDE1ICsyNjgsNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbXNldChcXHUwMDI2bWFzaywgMHhmZiwgZmllbGRfbGVuKTtcXG4tXFx0cmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTtcXG4tXFx0aWYgKHJlbWFpbmRlcikge1xcbi1cXHRcXHRrID0gcHJpdl9sZW4gLyBzaXplb2YodTMyKTtcXG4tXFx0XFx0ZGVsdGEgPSBmaWVsZF9sZW4gLSBwcml2X2xlbjtcXG4tXFx0XFx0cmVtYWluZGVyX21hc2sgPSBodG9ubCh+KCgxIFxcdTAwM2NcXHUwMDNjIChkZWx0YSAqIEJJVFNfUEVSX0JZVEUpKSAtIDEpKTtcXG4tXFx0XFx0bWFzay5kYXRhW2tdID0gKF9fZm9yY2UgdTMyKXJlbWFpbmRlcl9tYXNrO1xcbi1cXHR9XFxuLVxcbitcXHRtZW1zZXQoXFx1MDAyNm1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcXG4gXFx0bWVtY3B5KFxcdTAwMjZyZWctXFx1MDAzZW1hc2ssIFxcdTAwMjZtYXNrLCBmaWVsZF9sZW4pO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuaW5kZXggMjcwNGI0YjYwZDFlMDQuLjlhZjBmYTg5NWY3MzAyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuQEAgLTExNyw2ICsxMTcsNyBAQCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSB7XFxuIFxcdHJlZmNvdW50X3QgdXNlO1xcbiBcXHR1X2ludDhfdCBmYW1pbHk7XFxuIFxcdGJvb2wgcm5kX2luaXRpYWxpemVkO1xcbitcXHRib29sIHJhdGVtYXRjaDtcXG4gXFxuIFxcdHN0cnVjdCBoYXNobGltaXRfY2ZnMyBjZmc7XFx0LyogY29uZmlnICovXFxuIFxcbkBAIC0zMjMsNiArMzI0LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXFxuIFxcdFxcdGt2ZnJlZShoaW5mbyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuK1xcdGhpbmZvLVxcdTAwM2VyYXRlbWF0Y2ggPSAhIShjZmctXFx1MDAzZW1vZGUgXFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZoaW5mby1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRzd2l0Y2ggKHJldmlzaW9uKSB7XFxuQEAgLTg3Miw3ICs4NzQsMTAgQEAgc3RhdGljIGludCBoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovXFxuLVxcdGlmIChyZXZpc2lvbiBcXHUwMDNlPSAzIFxcdTAwMjZcXHUwMDI2IGNmZy1cXHUwMDNlbW9kZSBcXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIKSB7XFxuK1xcdGlmIChjZmctXFx1MDAzZW1vZGUgXFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCkge1xcbitcXHRcXHRpZiAocmV2aXNpb24gXFx1MDAzYyAzKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdGlmIChjZmctXFx1MDAzZWF2ZyA9PSAwIHx8IGNmZy1cXHUwMDNlYXZnIFxcdTAwM2UgVTMyX01BWCkge1xcbiBcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJpbnZhbGlkIHJhdGVcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG5AQCAtOTA1LDYgKzkxMCwxNSBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXFxuIFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aGFzaGxpbWl0X211dGV4KTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoKGNmZy1cXHUwMDNlbW9kZSBcXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgISgqaGluZm8pLVxcdTAwM2VyYXRlbWF0Y2gpIHx8XFxuK1xcdFxcdCAgICAoIShjZmctXFx1MDAzZW1vZGUgXFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgKCpoaW5mbyktXFx1MDAzZXJhdGVtYXRjaCkpIHtcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xcbitcXHRcXHRcXHRodGFibGVfcHV0KCpoaW5mbyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXFxuaW5kZXggZmIxYzU5ZDQ1NTY3YWYuLjQ0OWM1MThiZDk0N2RjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbkBAIC02MTcsNyArNjE3LDExIEBAIGlwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTozOjoxXFxuIGlwIC1uZXQgXFxcIiRuczJcXFwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAxMC4wLjIuMVxcbiBpcCAtNiAtbmV0IFxcXCIkbnMyXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZGVhZDoyOjoxXFxuIFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcXFxcbitcXHQnbWV0YSBvaWYgdHVuMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wIGFjY2VwdCdcXG4raXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXFxcXG4rXFx0J21ldGEgb2lmIHR1bjYgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNiBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxcXFxuIFxcdCdtZXRhIG9pZiBcXFwidmV0aDBcXFwiIHRjcCBzcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX3JlcGwgYWNjZXB0J1xcbkBAIC02MjksNyArNjMzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgXFxcIklQSVAgdHVubmVsXFxcIjsgdGhlblxcbiBmaVxcbiBcXG4gaWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbi1cXHRlY2hvIFxcXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbFxcXCJcXG4rXFx0Y2hlY2tfY291bnRlcnMgXFxcImZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsXFxcIlxcbiBlbHNlXFxuIFxcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNklQNiB0dW5uZWxcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4gXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBsaXN0IHJ1bGVzZXRcXG5AQCAtNjQyLDYgKzY0Niw4IEBAIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIHNldCB2ZXRoMS4xMCB1cFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMC4xLzI0IGRldiB2ZXRoMS4xMFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZmVlMTo0OjoxLzY0IGRldiB2ZXRoMS4xMCBub2RhZFxcbiBpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDEvMTAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxcXFxuK1xcdCdtZXRhIG9pZiB2ZXRoMS4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB2ZXRoMS4xMCBhY2NlcHQnXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSB0dW4wLjEwIHR5cGUgaXBpcCBsb2NhbCAxOTIuMTY4LjIwLjEgcmVtb3RlIDE5Mi4xNjguMjAuMlxcbkBAIC02NDksNiArNjU1LDggQEAgaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgc2V0IHR1bjAuMTAgdXBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIDE5Mi4xNjguMjAwLjEvMjQgZGV2IHR1bjAuMTBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIwMC4yXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcXFxcbitcXHQnbWV0YSBvaWYgdHVuMC4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wLjEwIGFjY2VwdCdcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lXFxuQEAgLTY1Niw2ICs2NjQsOCBAQCBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBzZXQgdHVuNi4xMCB1cFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZmVlMTo1OjoxLzY0IGRldiB0dW42LjEwIG5vZGFkXFxuIGlwIC02IC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxcbiBpcCAtNiAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MlxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcXFxcbitcXHQnbWV0YSBvaWYgdHVuNi4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW42LjEwIGFjY2VwdCdcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIGFkZCBsaW5rIHZldGgwIG5hbWUgdmV0aDAuMTAgdHlwZSB2bGFuIGlkIDEwXFxuQEAgLTY4Myw3ICs2OTMsNyBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSBcXFwiSVBJUCB0dW5uZWwgb3ZlciB2bGFuXFxcIjsgdGhlblxcbiBmaVxcbiBcXG4gaWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbi1cXHRlY2hvIFxcXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiXFxuK1xcdGNoZWNrX2NvdW50ZXJzIFxcXCJmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiXFxuIGVsc2VcXG4gXFx0ZWNobyBcXFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4gXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBsaXN0IHJ1bGVzZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzc6NTUuMTIyODI5MjE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzM3Mjk4ODU4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9OQVRfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfTkFUX0gzMjNcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwibmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpclwiLFxuICAgIFwibmF0X3J0cF9ydGNwXCIsXG4gICAgXCJuZl9uYXRfc2RwX21lZGlhXCIsXG4gICAgXCJuZnRfb2JqX2xvb2t1cFwiLFxuICAgIFwibmZfdGFibGVzX25ld3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3b2JqXCIsXG4gICAgXCJuZnRfb2JqX2RlbFwiLFxuICAgIFwiaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzFkNDk0MmI4NGI1YjJiZjFhYzcyODBjZjllMTAyZTIwZGE0NDVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIzOjM3OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oXG5pbmRleCBkYmM2MTRkZmUwZDU2NS4uYWFmYTBjMDRmOTE3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgbmZfbmF0X3NpcF9ob29rcyB7XG4gXHRcdFx0ICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbik7XG4gXG4gXHR2b2lkICgqc2VxX2FkanVzdCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgczE2IG9mZik7XG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMzMiBvZmYpO1xuIFxuIFx0dW5zaWduZWQgaW50ICgqZXhwZWN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuQEAgLTI1LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVx0XHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVx0XHRcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xuKyNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC0xOTcyLDggKzE5NzQsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbitcdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XG4gdm9pZCBpcF92c19kZXN0X2RzdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTE5ODYsOCArMTk4OCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuQEAgLTIwNTksMTUgKzIwNjEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiB9XG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbitcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICBib29sIGhhc19wb3J0cyk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbitcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiArMjA5NSwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKVxuK3tcbitcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xuK1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qIExPQ0FMX09VVCA/ICovXG4rXHRpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cbitcdGlmIChhZiA9PSBBRl9JTkVUNikge1xuK1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qKlxuKyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbit7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xuK31cbitcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuaW5kZXggYzAyNDM0NWM5YmQ4NjIuLjI2ZDZiYWJkOTJmY2Q3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuQEAgLTE2MSw2ICsxNjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LFxuIFx0cmV0dXJuIG5mX2N0X2V4cGVjdF9yZWxhdGVkX3JlcG9ydChleHBlY3QsIDAsIDAsIGZsYWdzKTtcbiB9XG4gXG4raW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBmbGFnKTtcbitcbiBzdHJ1Y3QgbmZfY29ubl9oZWxwO1xuIHZvaWQgbmZfY3RfZXhwZWN0YXRpb25fZ2Moc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHApO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggOWQ4NDQzNTRjNGQ5NTYuLjNiZTYxMjE0NWMxMzBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbkBAIC0xMjk0LDYgKzEyOTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZ0X3VzZV9pbmNfcmVzdG9yZSh1MzIgKnVzZSlcbiAgKlx0QHNldHM6IHNldHMgaW4gdGhlIHRhYmxlXG4gICpcdEBvYmplY3RzOiBzdGF0ZWZ1bCBvYmplY3RzIGluIHRoZSB0YWJsZVxuICAqXHRAZmxvd3RhYmxlczogZmxvdyB0YWJsZXMgaW4gdGhlIHRhYmxlXG4rICpcdEBvYmpuYW1lX2h0OiBoYXNodGFibGUgZm9yIG9iamVjdHMgbG9va3VwIGJ5IG5hbWVcbiAgKlx0QGhnZW5lcmF0b3I6IGhhbmRsZSBnZW5lcmF0b3Igc3RhdGVcbiAgKlx0QGhhbmRsZTogdGFibGUgaGFuZGxlXG4gICpcdEB1c2U6IG51bWJlciBvZiBjaGFpbiByZWZlcmVuY2VzIHRvIHRoaXMgdGFibGVcbkBAIC0xMzEzLDYgKzEzMTQsNyBAQCBzdHJ1Y3QgbmZ0X3RhYmxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0c2V0cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0b2JqZWN0cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0Zmxvd3RhYmxlcztcbitcdHN0cnVjdCByaGx0YWJsZVx0XHRcdG9iam5hbWVfaHQ7XG4gXHR1NjRcdFx0XHRcdGhnZW5lcmF0b3I7XG4gXHR1NjRcdFx0XHRcdGhhbmRsZTtcbiBcdHUzMlx0XHRcdFx0dXNlO1xuQEAgLTE0MDAsNyArMTQwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbmZ0X29ial9kYXRhKGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4gI2RlZmluZSBuZnRfZXhwcl9vYmooZXhwcilcdCooKHN0cnVjdCBuZnRfb2JqZWN0ICoqKW5mdF9leHByX3ByaXYoZXhwcikpXG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBvYmp0eXBlLFxuIFx0XHRcdFx0ICB1OCBnZW5tYXNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jXG5pbmRleCAxODNlOGEzZmYyYmFiZC4uNmJjZDY3MzQ3NjliNTkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmNcbkBAIC0xODIsNiArMTgyLDcgQEAgc3RhdGljIGludCBuYXRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLFxuIFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cClcbiB7XG4rXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07XG4gXHRzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSBuZmN0X2hlbHBfZGF0YShjdCk7XG4gXHRpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIFx0aW50IGk7XG5AQCAtMjI3LDIyICsyMjgsMTMgQEAgc3RhdGljIGludCBuYXRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRydHBfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7XG4tXHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsIDApO1xuK1x0XHRydGNwX2V4cC1cdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQgKyAxKTtcbitcdFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcihydHBfcGFpciwgMCk7XG4gXHRcdGlmIChyZXQgPT0gMCkge1xuLVx0XHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID1cbi1cdFx0XHQgICAgaHRvbnMobmF0ZWRfcG9ydCArIDEpO1xuLVx0XHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwLCAwKTtcbi1cdFx0XHRpZiAocmV0ID09IDApXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XG4tXHRcdFx0XHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fSBlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4tXHRcdFx0XHRuYXRlZF9wb3J0ID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIGlmIChyZXQgIT0gLUVCVVNZKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH0gZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdG5hdGVkX3BvcnQgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5iMmQ3Nzk3MzI3MmQyNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAjZW5kaWZcbiBcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoZGF0YSwgc2V0KSwgZXh0KTtcbi1cdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkpXG4rXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbiBcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XG4gXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuIFx0XHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKGRhdGEsIHNldCksIGV4dCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuQEAgLTM2Nyw3ICszNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cdTAwM2VsZW4gKyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGlwdnNoLVx1MDAzZWxlbik7XG4rXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuQEAgLTQ0Myw3ICs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXHUwMDNlbGVuKTtcbitcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZlZDI2MjIzNjNmMGQ2Li4zNmM1Y2JhMDNmNWJjYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSArNzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuICAqIGJ1Y2tldCBvciBoYXNoIHRhYmxlXG4gICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cbisgKiAtIG9uIHJlc2l6ZSwgYnVja2V0IGZyb20gdGhlIG9sZCB0YWJsZSBpcyBsb2NrZWQgYmVmb3JlIGJ1Y2tldCBmcm9tIHRoZVxuKyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4rLyoqXG4rICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcbisgKiBAdDpcdFx0aGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZVxuKyAqIEB0MjpcdFx0aGFzaCB0YWJsZSBmb3IgaG4xLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2gyPXRydWVcbisgKiBAY3A6XHRcdGNvbm5lY3Rpb25cbisgKiBAaGFzaF9rZXk6XHRoYXNoIGtleSBmb3IgaG4wXG4rICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbisgKiBAdXNlMjpcdHVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZFxuKyAqIEBuZXdfaGFzaDpcdG1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxuKyAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbisgKiBAaGVhZF9yZXQ6XHRyZXR1cm5lZCBoZWFkIGZvciBobjBcbisgKiBAaGVhZDJfcmV0Olx0cmV0dXJuZWQgaGVhZCBmb3IgaG4xXG4rICpcbisgKiBXZSBzdXBwb3J0IDMgbW9kZXM6XG4rICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZ1xuKyAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4rICogLSBzZWVrIGhuMCBhbmQgaGFzaCBobjEsIHVzZWQgd2hlbiBmb3J3YXJkaW5nIG1ldGhvZCBpcyBjaGFuZ2VkXG4rICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbi1cdCAgICAgIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcbi1cdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuK2Nvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX3JodCAqdDIsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbitcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuK1x0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXG4rXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuIFx0dTMyIGhhc2hfa2V5X25ldywgaGFzaF9rZXlfbmV3Mjtcbi1cdHN0cnVjdCBpcF92c19yaHQgKnQyID0gdDtcbi1cdHUzMiBpZHgsIGlkeDI7XG4rXHRpbnQgaWR4ID0gMCwgaWR4MiA9IDA7XG4rXG4rXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcbitcdCAqIGlzIGZvciBuZXcgdGFibGVcbitcdCAqL1xuK1x0aWYgKG5ld19oYXNoMiBcdTAwMjZcdTAwMjYgdXNlMiBcdTAwMjZcdTAwMjYgdCAhPSB0MilcbitcdFx0aWR4MisrO1xuIFxuLVx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGlmICh1c2UyKVxuLVx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRlbHNlXG4tXHRcdGlkeDIgPSBpZHg7XG4gXHRpZiAoIW5ld19oYXNoKSB7XG4gXHRcdC8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqL1xuIFxuQEAgLTEwMCw0NiArMTIwLDQ1IEBAIGNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4gXHRcdFx0ICogYm90aCBub2RlcyBpbiBkaWZmZXJlbnQgdGFibGVzLCB1c2UgaWR4L2lkeDJcbiBcdFx0XHQgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRcdFx0aWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHR9XG4tXHRcdGlmICh1c2UyKSB7XG4tXHRcdFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xuLVx0XHRcdFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cbi1cdFx0XHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVx1MDAzZW5ld190YmwpO1xuLVx0XHRcdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaztcbi1cdFx0XHRcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlkeDIgPSBpZHg7XG4rXHRcdFx0aWR4Kys7XG4gXHRcdH1cbiBcdH1cbitcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyIFx1MDAyNlx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbitcdFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cbitcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4rXHRcdGlkeDIrKztcbitcdH1cbiBcbitcdGlmICghdXNlMilcbitcdFx0aWR4MiA9IGlkeDtcbiBcdGhlYWQgPSB0LVx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzayk7XG4gXHRoZWFkMiA9IHVzZTIgPyB0Mi1cdTAwM2VidWNrZXRzICsgKGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaykgOiBoZWFkO1xuIFxuLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0LyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi9cbi1cbi1cdGlmIChpZHggXHUwMDNjPSBpZHgyKSB7XG4rXHRpZiAoaWR4IFx1MDAzZSBpZHgyIHx8IChoZWFkIFx1MDAzZSBoZWFkMiBcdTAwMjZcdTAwMjYgaWR4ID09IGlkeDIpKSB7XG4rXHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuLVx0XHRpZiAoaGVhZCAhPSBoZWFkMilcbi1cdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuK1x0XHRpZiAoaGVhZCAhPSBoZWFkMilcbitcdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH1cbiBcdGlmICghbmV3X2hhc2gpIHtcbitcdFx0Ym9vbCBjaGFuZ2VkO1xuK1xuIFx0XHQvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovXG4gXHRcdGhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuLVx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXHRcdGNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7XG4rXHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuK1x0XHRcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IGhhc2hfa2V5MjtcbitcdFx0fVxuIFx0XHQvKiBIYXNoIGNoYW5nZWQgPyAqL1xuLVx0XHRpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8XG4tXHRcdCAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgXHUwMDI2XHUwMDI2IHVzZTIpKSB7XG4rXHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgKzE3NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXG4gXHRpZiAoaGVhZCAhPSBoZWFkMilcbiBcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcbiBcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5AQCAtMjY4LDggKzI4Niw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHVzZTIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRjcC1cdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xuIFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbkBAIC0yODAsNiArMjk5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyZXQgPSAxO1xuIFxuIFx0LyogU2NoZWR1bGUgcmVzaXppbmcgaWYgbG9hZCBpbmNyZWFzZXMgKi9cbkBAIC0zMDYsMTggKzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XG4gXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tXHRcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpKSB7XG4gXHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjAubm9kZSk7XG4gXHRcdFx0aWYgKHVzZTIpXG4gXHRcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbkBAIC0zMjgsNiArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4gXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02MzIsNiArNjU1LDcgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRpbnQgbnRibDtcbiBcdGludCBkaXI7XG4gXG4rcmVzdGFydDpcbiBcdC8qIE5vIHBhY2tldHMgZnJvbSBpbnNpZGUsIHNvIHdlIGNhbiBkbyBpdCBpbiAyIHN0ZXBzLiAqL1xuIFx0ZGlyID0gdXNlMiA/IDEgOiAwO1xuIFxuQEAgLTY4Niw2ICs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHQvKiBQcm90ZWN0IHRoZSBjcC1cdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcbitcdC8qIFJlY2hlY2sgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2sgKi9cbitcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuK1x0XHR1c2UyID0gIXVzZTI7XG4rXHRcdGlmICh1c2UyKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdFx0LyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovXG4rXHRcdFx0Z290byByZXN0YXJ0O1xuK1x0XHR9XG4rXHRcdGlmIChkaXIpIHtcbitcdFx0XHQvKiBOb3Qgc3RhcnRlZCB5ZXQsIHNvIGp1c3Qgc2tpcCBkaXIgMSAqL1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuK1x0XHRcdGRpci0tO1xuK1x0XHRcdGdvdG8gbmV4dF9kaXI7XG4rXHRcdH1cbitcdFx0LyogSnVzdCBmaW5pc2ggZGlyIDAgKi9cbitcdH1cbitcbiBcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxuIFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cbiBcdCAqL1xuQEAgLTc1Miw2ICs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuKy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cbitzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC1cdTAwM2VpcHZzO1xuK1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbitcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbitcdHN0cnVjdCBpcF92c19yaHQgKnQsICp0MjtcbitcbitcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbitcdGlmICgoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkgfHxcbitcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xuK1x0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cbitcdCAgICAoKG5ld19mbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcbitcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4rXHRpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4rXHRcdC8qIFN0b3AgZG91YmxlIGhhc2hpbmcgKi9cbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcdFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXG4rXHRcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcbitcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxuK1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcbitcdFx0LyogS2VlcCBib3RoIGhhc2gga2V5cyBpbiBzYW1lIHRhYmxlICovXG4rXHRcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4rXHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XG4rXHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcbitcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXG4rXG4rXHRcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4rXG4rXHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXHUwMDNlbmV3X3RibCk7XG4rXHRcdGhhc2gyID0gaXBfdnNfY29ubl9oYXNoa2V5X2Nvbm4odDIsIGNwLCB0cnVlKTtcbitcdFx0aGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7XG4rXG4rXHRcdC8qIENoYW5nZSB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9ja2VkIGhuMCAqL1xuK1x0XHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuK1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcbitcdFx0XHQgICAgICBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4rXG4rXHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpO1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4rXG4rXHRcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4rXHR9XG4rfVxuK1xuIC8qIEdldCBkZWZhdWx0IGxvYWQgZmFjdG9yIHRvIG1hcCBjb25uX2NvdW50L3VfdGhyZXNoIHRvIHQtXHUwMDNlc2l6ZSAqL1xuIHN0YXRpYyBpbnQgaXBfdnNfY29ubl9kZWZhdWx0X2xvYWRfZmFjdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuIHtcbkBAIC0xMDE0LDYgKzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG4gXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xuK1x0XHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cbitcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcbitcbiBcdFx0LyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkXG4gXHRcdCAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLlxuIFx0XHQgKi9cbkBAIC0xMDIxLDkgKzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4gXHRcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7XG4gXHRcdC8qIGNvbm5lY3Rpb25zIGluaGVyaXQgZm9yd2FyZGluZyBtZXRob2QgZnJvbSBkZXN0ICovXG4gXHRcdGZsYWdzIFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xuK1x0XHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuK1x0XHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXG4rXHRcdCAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzXG4rXHRcdCAqL1xuK1x0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpXG4rXHRcdFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4rXHR9IGVsc2Uge1xuK1x0XHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0fVxuLVx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbi1cdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRjcC1cdTAwM2VkZXN0ID0gZGVzdDtcbiBcbiBcdElQX1ZTX0RCR19CVUYoNywgXCJCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkIFwiXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbmluZGV4IGJhZmFiOTM0NTFkMDM3Li42Yjc5ZTBjNGQ5ZTI4NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbkBAIC04NjcsNyArODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxuIFxuICNlbmRpZlxuIFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbitzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyArOTI0LDEzIEBAIHN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXG4gICogLSBpbm91dDogMT1pbi1cdTAwM2VvdXQsIDA9b3V0LVx1MDAzZWluXG4gICovXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4rXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICBib29sIGhhc19wb3J0cylcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4tXHRcdFx0XHRcdFx0ICAgICAgaWNtcF9vZmZzZXQpO1xuK1x0c3RydWN0IGljbXBoZHIgKmljbXBoXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xuK1x0dW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NDUsOCArOTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0fVxuIFxuIFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXG4tXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wpIHtcbitcdGlmIChoYXNfcG9ydHMpIHtcbiBcdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCArIGNpcGgtXHUwMDNlaWhsKjQ7XG4gXG4gXHRcdGlmIChpbm91dClcbkBAIC05NTcsNDggKzk1Niw0MCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gXHQvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqL1xuIFx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSAwO1xuLVx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGljbXBfb2Zmc2V0KTtcbitcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCB0b2ZmKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4tXHRcdFx0XCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwiKTtcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbitcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcIik7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXBoXHQgPSBpcHY2X2hkcihza2IpO1xuLVx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDtcbi1cdHVuc2lnbmVkIGludCBvZmZzXHQgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki9cbi1cdGludCBwcm90b2NvbDtcbiBcdHN0cnVjdCBpY21wNmhkciAqaWNtcGg7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqY2lwaDtcbi1cdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xuK1x0c3RydWN0IGlwdjZoZHIgKmNpaDtcbiBcbi1cdGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZpY21wX29mZnNldCwgSVBQUk9UT19JQ01QVjYsIFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcbi1cdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGljbXBfb2Zmc2V0KTtcbi1cdG9mZnMgPSBpY21wX29mZnNldCArIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xuLVx0Y2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnMpO1xuLVxuLVx0cHJvdG9jb2wgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2b2ZmcywgLTEsIFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcbitcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItXHUwMDNlZGF0YSArIHRvZmYpO1xuK1x0Y2loID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICsgY2lwaC1cdTAwM2VvZmYpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbitcdFx0Y2loLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuIFx0fSBlbHNlIHtcbiBcdFx0aXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuLVx0XHRjaXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuK1x0XHRjaWgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4gXHR9XG4gXG4gXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cbi1cdGlmICghZnJhZ29mZnMgXHUwMDI2XHUwMDI2IChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0XHRcdCAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkge1xuLVx0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcbitcdGlmIChoYXNfcG9ydHMpIHtcbitcdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICsgY2lwaC1cdTAwM2VsZW4pO1xuIFxuIFx0XHRJUF9WU19EQkcoMTEsIFwiJXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcXG5cIiwgX19mdW5jX18sXG4gXHRcdFx0ICAgICAgbnRvaHMoaW5vdXQgPyBwb3J0c1sxXSA6IHBvcnRzWzBdKSxcbkBAIC0xMDExLDE5ICsxMDAyLDE3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXG4gXHRpY21waC1cdTAwM2VpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSBpY21wX29mZnNldCxcbitcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRvZmYsXG4gXHRcdFx0XHRcdCAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTtcbi1cdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xuK1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XG4gXHRza2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcbi1cdFx0XHQgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NlwiKTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4rXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QdjZcIik7XG4gfVxuICNlbmRpZlxuQEAgLTEwMzMsMzYgKzEwMjIsNDEgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuICAqL1xuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0dW5pb24gbmZfaW5ldF9hZGRyICpzbmV0LFxuLVx0XHRcdFx0X191OCBwcm90b2NvbCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuK1x0XHRcdFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdFx0XHRcdHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCxcbitcdFx0XHRcdHVuc2lnbmVkIGludCB0b2ZmLCB1bnNpZ25lZCBpbnQgaG9va251bSlcbiB7XG4rXHRpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbitcdHVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtXHUwMDNlbGVuO1xuK1x0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcbiBcbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSlcbiBcdFx0Z290byBhZnRlcl9uYXQ7XG4gXG4gXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbi1cdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcdTAwMjZcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcIkZvcndhcmQgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXMhXFxuXCIsXG4gXHRcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpXG4tXHRcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbitcdCAgICBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xuK1x0XHRjdG9mZiArPSAyICogc2l6ZW9mKF9fdTE2KTtcbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdGlmIChhZiA9PSBBRl9JTkVUNilcbi1cdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xuK1x0XHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xuK1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTAsOSArMTA4NCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqXHRDdXJyZW50bHkgaGFuZGxlcyBlcnJvciB0eXBlcyAtIHVucmVhY2hhYmxlLCBxdWVuY2gsIHR0bCBleGNlZWRlZC5cbiAgKi9cbiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4rXHRcdFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTEwNywxNyArMTEwMSwxOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4rXHRcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSlcbitcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbitcdGlobCA9IGlwdnNoLVx1MDAzZWxlbjtcbitcdG9mZnNldCA9IGlwdnNoLVx1MDAzZWxlbjtcbiBcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbiBcdGlmIChpYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdElQX1ZTX0RCRygxMiwgXCJPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCIsXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbitcdFx0ICBcdTAwMjZpcHZzaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXB2c2gtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTEzNiw3ICsxMTMyLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XG4gXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFx1MDAyNl9jaXBoKTtcbi1cdGlmIChjaWggPT0gTlVMTClcbitcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZWlobCBcdTAwM2U9IDUpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcbiBcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTE0NCw4ICsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuK1x0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbkBAIC0xMTU5LDkgKzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFjcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbi1cdHNuZXQuaXAgPSBpcGgtXHUwMDNlc2FkZHI7XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjaWgtXHUwMDNlcHJvdG9jb2wsIGNwLFxuLVx0XHRcdFx0ICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTtcbitcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbitcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNwLCBwcCwgXHUwMDI2Y2lwaCwgaWhsLFxuK1x0XHRcdFx0ICAgIGhvb2tudW0pO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xMTc0LDcgKzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxMCw2ICsxMjA0LDEwIEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXBwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuK1x0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuK1x0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXG4gXHRjcCA9IElORElSRUNUX0NBTExfMShwcC1cdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcbiBcdFx0XHQgICAgIGlwdnMsIEFGX0lORVQ2LCBza2IsIFx1MDAyNmNpcGgpO1xuQEAgLTEyMTcsOSArMTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbitcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsXG4rXHRcdFx0XHQgICAgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMTU0NSw3ICsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuK1x0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLFxuK1x0XHRcdFx0XHRcdCAgICAgaG9va251bSwgXHUwMDI2aXBoKTtcbiBcbiBcdFx0XHRpZiAocmVsYXRlZClcbiBcdFx0XHRcdHJldHVybiB2ZXJkaWN0O1xuQEAgLTE3NTMsOSArMTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuK1x0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTc2NSw3ICsxNzYyLDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0dW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0O1xuIFx0Ym9vbCB0dW5uZWwsIG5ld19jcCA9IGZhbHNlO1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyICpyYWRkcjtcbi1cdGNoYXIgKm91dGVyX3Byb3RvID0gXCJJUElQXCI7XG4rXHRjaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9IFwiSVBJUFwiO1xuIFx0dW5zaWduZWQgaW50IGhsZW5faXBpcDtcbiBcdGludCB1bGVuID0gMDtcbiBcbkBAIC0xNzc1LDE3ICsxNzcyLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuK1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcGgpKVxuK1x0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHR9XG4gXG4tXHRpcGggPSBpcF9oZHIoc2tiKTtcbi1cdG9mZnNldCA9IGlobCA9IGlwaC1cdTAwM2VpaGwgKiA0O1xuK1x0aWhsID0gaXBoLVx1MDAzZWxlbjtcbitcdG9mZnNldCA9IGlwaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwiSW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwiLFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4rXHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTg2Nyw4ICsxODY2LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuK1x0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbkBAIC0xODc2LDcgKzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4gXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxuIFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cbkBAIC0xODk4LDEwICsxODk1LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHZlcmRpY3QgPSBORl9EUk9QO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSB8fCB0dW5uZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCJJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxcblwiLFxuLVx0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyKTtcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NjksMTAgKzE5NjcsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cbiBcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpaC1cdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2loLVx1MDAzZXByb3RvY29sKVxuLVx0XHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XG4tXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFx1MDAyNmNpcGgpO1xuK1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDMyLDggKzIwMjcsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRwcCA9IHBkLVx1MDAzZXBwO1xuIFxuLVx0LyogQ2Fubm90IGhhbmRsZSBmcmFnbWVudGVkIGVtYmVkZGVkIHByb3RvY29sICovXG4tXHRpZiAoY2lwaC5mcmFnb2ZmcylcbitcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbitcdGlmIChjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTIwNTcsMjMgKzIwNTIsMjIgQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRuZXdfY3AgPSB0cnVlO1xuIFx0fVxuIFxuLVx0LyogVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIGp1c3QgbGV0IGl0IGdvICovXG4tXHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcbi1cdFx0dmVyZGljdCA9IE5GX0FDQ0VQVDtcbitcdHZlcmRpY3QgPSBORl9EUk9QO1xuK1xuK1x0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4rXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuK1x0XHRcdFx0XHQgQUZfSU5FVDYpKSB7XG4rXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbitcdFx0SVBfVlNfREJHKDEsIFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXG5cIixcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbi1cdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXG4tXHRvZmZzZXQgPSBjaXBoLmxlbjtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcbi1cdFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuLVxuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbitcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIGlwaC1cdTAwM2VsZW4sIGhvb2tudW0sIFx1MDAyNmNpcGgpO1xuIFxuIG91dDpcbiBcdGlmIChsaWtlbHkoIW5ld19jcCkpXG5AQCAtMjE1Miw3ICsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4rXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0yMjAwLDggKzIxOTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0fVxuIFxuIFx0XHRpZiAocmVzY2hlZCkge1xuLVx0XHRcdGlmICghb2xkX2N0KVxuK1x0XHRcdGlmICghb2xkX2N0KSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4gXHRcdFx0XHRjcC1cdTAwM2VmbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfTkZDVDtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNwLVx1MDAzZW5fY29udHJvbCkpXG4gXHRcdFx0XHRpcF92c19jb25uX2V4cGlyZV9ub3coY3ApO1xuIFx0XHRcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xuQEAgLTIyMTcsOCArMjIxNCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxuIFx0XHRpZiAoc3lzY3RsX2V4cGlyZV9ub2Rlc3RfY29ubihpcHZzKSkge1xuIFx0XHRcdGJvb2wgb2xkX2N0ID0gaXBfdnNfY29ubl91c2VzX29sZF9jb25udHJhY2soY3AsIHNrYik7XG4gXG4tXHRcdFx0aWYgKCFvbGRfY3QpXG4rXHRcdFx0aWYgKCFvbGRfY3QpIHtcbitcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9ORkNUO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdFx0fVxuIFxuIFx0XHRcdGlwX3ZzX2Nvbm5fZXhwaXJlX25vdyhjcCk7XG4gXHRcdFx0X19pcF92c19jb25uX3B1dChjcCk7XG5AQCAtMjI4OCw2ICsyMjg4LDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4rXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XG4gXHRpbnQgcjtcbiBcbiBcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cbkBAIC0yMjk3LDEwICsyMjk4LDkgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc3RhdGUtXHUwMDNlcGYgPT0gTkZQUk9UT19JUFY0KSB7XG4gXHRcdGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX0lDTVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgKzIzMTAsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAjZW5kaWZcbiBcdH1cbiBcbi1cdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vayk7XG4rXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbkBAIC0xMSw3ICsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gc2N0cF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxuK1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcbitcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZXNvdXJjZSAhPSBjcC1cdTAwM2V2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xNTcsNyArMTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4rXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyArMTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmO1xuK1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlZGVzdCAhPSBjcC1cdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xODcsMTkgKzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpXG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbitcdHVuc2lnbmVkIGludCBzY3RwaG9mZiA9IGlwaC1cdTAwM2VsZW47XG4gXHRzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRfX2xlMzIgY21wLCB2YWw7XG4gXG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuIFx0dmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpO1xuIFxuIFx0aWYgKHZhbCAhPSBjbXApIHtcbiBcdFx0LyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovXG4tXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbkBAIC0yOSw3ICsyOSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZik7XG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbitcdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTc5LDcgKzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB0Y3Bob2ZmO1xuK1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuK1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI2MCw3ICsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdGNwaG9mZjtcbitcdHRjcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZilcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xuK1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuK1x0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgKzI1LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHVkcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuK1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcbitcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKlxuQEAgLTIzOCw3ICsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbitcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0yNTQsNyArMjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHVkcGhvZmY7XG4rXHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHVkcGhvZmY7XG4gXHR1ZHBoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMjk4LDQ4ICsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4ge1xuIFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVoO1xuIFxuLVx0dWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCB1ZHBob2ZmLCBzaXplb2YoX3VkcGgpLCBcdTAwMjZfdWRwaCk7XG4rXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdGlmICghdWgtXHUwMDNlY2hlY2spXG4rXHRcdHJldHVybiAxO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuaW5kZXggOWZlZjQzMzVkYTEzZmQuLjBiMGM1MzA0OTkzYTkxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1MDIsMjAgKzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgcnRhYmxlXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcbitcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgd2xlbjtcbiBcbiBcdC8qIFRoZSBJQ01QIHBhY2tldCBmb3IgVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIHdpbGwgYmVcbiBcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcGgpO1xuK1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE1MzMsNyArMTUzNSw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuK1x0XHRcdFx0ICAgTlVMTCwgY2lwaCk7XG4gXHRpZiAobG9jYWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHRydCA9IHNrYl9ydGFibGUoc2tiKTtcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBpbnRcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbitcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuK1x0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcbiBcdHN0cnVjdCBydDZfaW5mb1x0KnJ0O1x0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbitcdHVuc2lnbmVkIGludCB3bGVuO1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGU7XG5AQCAtMTYwMCw3ICsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7XG4rXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydF92NihjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XG4rXHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcbkBAIC0xNjQ4LDE0ICsxNjU5LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbmluZGV4IDdhZTY4ZDYwNTg2YTIzLi44YTNiOWUzM2U5NGY3NyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuQEAgLTQyNyw3ICs0MjcsNiBAQCBzdGF0aWMgdm9pZCBuZl9jdF9leHBlY3RfaW5zZXJ0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsXG4gXHRcdGV4cC1cdTAwM2V0aW1lb3V0ICs9IGhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2V4cC1cdTAwM2VjbGFzc10udGltZW91dCAqIEhaO1xuIFxuIFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmV4cC1cdTAwM2Vsbm9kZSwgXHUwMDI2bWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0YXRpb25zKTtcbi1cdG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHAtXHUwMDNlY2xhc3NdKys7XG4gXG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZXhwLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtoXSk7XG4gXHRjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG5AQCAtNTM0LDYgKzUzMyw3IEBAIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0bWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cdTAwM2VjbGFzc10rKztcbiBcdG5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0LCBtYXN0ZXJfaGVscCk7XG4gXG4gXHRuZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0LCBwb3J0aWQsIHJlcG9ydCk7XG5AQCAtNTQ2LDYgKzU0NiwzOSBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9yZWxhdGVkX3JlcG9ydCk7XG4gXG4raW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscDtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbitcdG1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKGV4cGVjdFswXS1cdTAwM2VtYXN0ZXIpO1xuK1x0aWYgKCFtYXN0ZXJfaGVscCB8fCBtYXN0ZXJfaGVscCAhPSBuZmN0X2hlbHAoZXhwZWN0WzFdLVx1MDAzZW1hc3RlcikpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpKyspIHtcbitcdFx0cmV0ID0gX19uZl9jdF9leHBlY3RfY2hlY2soZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCwgZmxhZ3MpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0aWYgKGkgPT0gMSlcbitcdFx0XHRcdG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHBlY3RbMF0tXHUwMDNlY2xhc3NdLS07XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0bWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdFtpXS1cdTAwM2VjbGFzc10rKztcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkrKykge1xuK1x0XHRuZl9jdF9leHBlY3RfaW5zZXJ0KGV4cGVjdFtpXSwgbWFzdGVyX2hlbHApO1xuK1x0XHRuZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0W2ldLCAwLCAwKTtcbitcdH1cbitvdXQ6XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcik7XG4rXG4gdm9pZCBuZl9jdF9leHBlY3RfaXRlcmF0ZV9kZXN0cm95KGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXG4gXHRcdFx0XHQgIHZvaWQgKmRhdGEpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbmluZGV4IGYzZjkwYTg2NjMzODk0Li5lNGE3MGQxZDc3YjBiOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuQEAgLTE2NjMsNyArMTY2Myw3IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0dW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjtcbiBcdHVuc2lnbmVkIGludCBtc2dsZW4sIG9yaWdsZW47XG4gXHRjb25zdCBjaGFyICpkcHRyLCAqZW5kO1xuLVx0czE2IGRpZmYsIHRkaWZmID0gMDtcbitcdHMzMiBkaWZmLCB0ZGlmZiA9IDA7XG4gXHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuIFx0dW5zaWduZWQgbG9uZyBjbGVuO1xuIFx0Ym9vbCB0ZXJtO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcbmluZGV4IGFlYTAyZjZhZmYwOTJhLi4xMzNiZDcxM2ZlMGMyOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuY1xuQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX25hdF9zaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5mX25hdF9zaXBfc2VxX2FkanVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi1cdFx0XHRcdCAgczE2IG9mZilcbitcdFx0XHRcdCAgczMyIG9mZilcbiB7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsIFx1MDAyNmN0aW5mbyk7XG5AQCAtNTkyLDYgKzU5Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG1lZGlhbGVuLFxuIFx0XHRcdFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKnJ0cF9hZGRyKVxuIHtcbitcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfcGFpclsyXSA9IHsgcnRwX2V4cCwgcnRjcF9leHAgfTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgXHUwMDI2Y3RpbmZvKTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG5AQCAtNjIyLDI0ICs2MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRydHBfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCk7XG4tXHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsXG4tXHRcdFx0XHRcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHBvcnQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCArIDEpO1xuLVx0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydGNwX2V4cCxcbi1cdFx0XHRcdFx0ICAgTkZfQ1RfRVhQX0ZfU0tJUF9NQVNURVIpO1xuK1xuK1x0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHJ0cF9wYWlyLFxuK1x0XHRcdFx0XHRcdE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XG4tXHRcdFx0bmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTtcbitcdFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fSBlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xuK1x0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRwb3J0ID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGE5ZWFmOTQ1NWM3NzgzLi5hZjM1N2Y2YzUwNzBiMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTQ1LDggKzQ1LDYgQEAgZW51bSB7XG4gXHRORlRfVkFMSURBVEVfRE8sXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IHJobHRhYmxlIG5mdF9vYmpuYW1lX2h0O1xuLVxuIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2goY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpO1xuIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2hfb2JqKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTtcbiBzdGF0aWMgaW50IG5mdF9jaGFpbl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqLCBjb25zdCB2b2lkICopO1xuQEAgLTE2MzUsNiArMTYzMywxMCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXd0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfY2hhaW5faHQ7XG4gXG4rXHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQsIFx1MDAyNm5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9vYmpfaHQ7XG4rXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlc2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VvYmplY3RzKTtcbkBAIC0xNjUzLDYgKzE2NTUsOCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXd0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2bmZ0X25ldC1cdTAwM2V0YWJsZXMpO1xuIFx0cmV0dXJuIDA7XG4gZXJyX3RyYW5zOlxuK1x0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0KTtcbitlcnJfb2JqX2h0OlxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnNfaHQpO1xuIGVycl9jaGFpbl9odDpcbiBcdGtmcmVlKHRhYmxlLVx1MDAzZXVkYXRhKTtcbkBAIC0xODE5LDYgKzE4MjMsNyBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfdGFibGVfZGVzdHJveShzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnNfaHQpO1xuK1x0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0KTtcbiBcdGtmcmVlKHRhYmxlLVx1MDAzZW5hbWUpO1xuIFx0a2ZyZWUodGFibGUtXHUwMDNldWRhdGEpO1xuIFx0a2ZyZWUodGFibGUpO1xuQEAgLTgwODYsNyArODA5MSw3IEBAIHZvaWQgbmZ0X3VucmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7XG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBvYmp0eXBlLFxuIFx0XHRcdFx0ICB1OCBnZW5tYXNrKVxuIHtcbkBAIC04MTAyLDcgKzgxMDcsNyBAQCBzdHJ1Y3QgbmZ0X29iamVjdCAqbmZ0X29ial9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHQgICAgICFsb2NrZGVwX2NvbW1pdF9sb2NrX2lzX2hlbGQobmV0KSk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsaXN0ID0gcmhsdGFibGVfbG9va3VwKFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuK1x0bGlzdCA9IHJobHRhYmxlX2xvb2t1cChcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuIFx0aWYgKCFsaXN0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC04MzgyLDcgKzgzODcsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdvYmooc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3RyYW5zO1xuIFxuLVx0ZXJyID0gcmhsdGFibGVfaW5zZXJ0KFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCxcbitcdGVyciA9IHJobHRhYmxlX2luc2VydChcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCxcbiBcdFx0XHQgICAgICBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfb2JqX2h0O1xuQEAgLTg1NjcsOCArODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBpbmZvLVx1MDAzZWV4dGFjaztcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIoaW5mby1cdTAwM2VuZXQpO1xuIFx0dTggZmFtaWx5ID0gaW5mby1cdTAwM2VuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4tXHRjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmV0O1xuK1x0c3RydWN0IG5mdF90YWJsZSAqdGFibGU7XG4gXHRzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4gXHR1MzIgb2JqdHlwZTtcbkBAIC0xMDQzNyw5ICsxMDQ0Miw5IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbiBcdFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4rc3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF90YWJsZSAqdGFibGUsIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4ge1xuLVx0cmhsdGFibGVfcmVtb3ZlKFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCwgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcbitcdHJobHRhYmxlX3JlbW92ZShcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCwgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZvYmotXHUwMDNlbGlzdCk7XG4gfVxuIFxuQEAgLTExMTI0LDcgKzExMTI5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX0RFTE9CSjpcbiBcdFx0Y2FzZSBORlRfTVNHX0RFU1RST1lPQko6XG4tXHRcdFx0bmZ0X29ial9kZWwobmZ0X3RyYW5zX29iaih0cmFucykpO1xuK1x0XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4gXHRcdFx0bmZfdGFibGVzX29ial9ub3RpZnkoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfb2JqKHRyYW5zKSxcbiBcdFx0XHRcdFx0ICAgICB0cmFucy1cdTAwM2Vtc2dfdHlwZSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTE0MTYsNyArMTE0MjEsNyBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4gXHRcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdG5mdF91c2VfZGVjX3Jlc3RvcmUoXHUwMDI2dGFibGUtXHUwMDNldXNlKTtcbi1cdFx0XHRcdG5mdF9vYmpfZGVsKG5mdF90cmFuc19vYmoodHJhbnMpKTtcbitcdFx0XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMT0JKOlxuQEAgLTEyMDQzLDcgKzEyMDQ4LDcgQEAgc3RhdGljIHZvaWQgX19uZnRfcmVsZWFzZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuIFx0XHRuZnRfc2V0X2Rlc3Ryb3koXHUwMDI2Y3R4LCBzZXQpO1xuIFx0fVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmUsIFx1MDAyNnRhYmxlLVx1MDAzZW9iamVjdHMsIGxpc3QpIHtcbi1cdFx0bmZ0X29ial9kZWwob2JqKTtcbitcdFx0bmZ0X29ial9kZWwodGFibGUsIG9iaik7XG4gXHRcdG5mdF91c2VfZGVjKFx1MDAyNnRhYmxlLVx1MDAzZXVzZSk7XG4gXHRcdG5mdF9vYmpfZGVzdHJveShcdTAwMjZjdHgsIG9iaik7XG4gXHR9XG5AQCAtMTIyMjUsMTAgKzEyMjMwLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9uZXRkZXZfbm90aWZpZXI7XG4gXG4tXHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuLVx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfcmh0X29iam5hbWU7XG4tXG4gXHRlcnIgPSBuZnRfb2ZmbG9hZF9pbml0KCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9vZmZsb2FkO1xuQEAgLTEyMjUxLDggKzEyMjUyLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpXG4gZXJyX25ldGxpbmtfbm90aWZpZXI6XG4gXHRuZnRfb2ZmbG9hZF9leGl0KCk7XG4gZXJyX29mZmxvYWQ6XG4tXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm5mdF9vYmpuYW1lX2h0KTtcbi1lcnJfcmh0X29iam5hbWU6XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZuZl90YWJsZXNfZmxvd3RhYmxlX25vdGlmaWVyKTtcbiBlcnJfbmV0ZGV2X25vdGlmaWVyOlxuIFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcbkBAIC0xMjI3NCw3ICsxMjI3Myw2IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl90YWJsZXNfbW9kdWxlX2V4aXQodm9pZClcbiBcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZuZl90YWJsZXNfbmV0X29wcyk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnRyYW5zX2djX3dvcmspO1xuIFx0cmN1X2JhcnJpZXIoKTtcbi1cdHJobHRhYmxlX2Rlc3Ryb3koXHUwMDI2bmZ0X29iam5hbWVfaHQpO1xuIFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTI1OSw5ICsyNTksNyBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxuIFx0XHRcdFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXG4ge1xuLVx0dW5zaWduZWQgaW50IHJlbWFpbmRlciwgZGVsdGEsIGs7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGEgbWFzayA9IHt9O1xuLVx0X19iZTMyIHJlbWFpbmRlcl9tYXNrO1xuIFxuIFx0aWYgKHByaXZfbGVuID09IGZpZWxkX2xlbikge1xuIFx0XHRtZW1zZXQoXHUwMDI2cmVnLVx1MDAzZW1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcbkBAIC0yNzAsMTUgKzI2OCw3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdG1lbXNldChcdTAwMjZtYXNrLCAweGZmLCBmaWVsZF9sZW4pO1xuLVx0cmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTtcbi1cdGlmIChyZW1haW5kZXIpIHtcbi1cdFx0ayA9IHByaXZfbGVuIC8gc2l6ZW9mKHUzMik7XG4tXHRcdGRlbHRhID0gZmllbGRfbGVuIC0gcHJpdl9sZW47XG4tXHRcdHJlbWFpbmRlcl9tYXNrID0gaHRvbmwofigoMSBcdTAwM2NcdTAwM2MgKGRlbHRhICogQklUU19QRVJfQllURSkpIC0gMSkpO1xuLVx0XHRtYXNrLmRhdGFba10gPSAoX19mb3JjZSB1MzIpcmVtYWluZGVyX21hc2s7XG4tXHR9XG4tXG4rXHRtZW1zZXQoXHUwMDI2bWFzaywgMHhmZiwgcHJpdl9sZW4pO1xuIFx0bWVtY3B5KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCBcdTAwMjZtYXNrLCBmaWVsZF9sZW4pO1xuIFxuIFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbmluZGV4IDI3MDRiNGI2MGQxZTA0Li45YWYwZmE4OTVmNzMwMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbkBAIC0xMTcsNiArMTE3LDcgQEAgc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUge1xuIFx0cmVmY291bnRfdCB1c2U7XG4gXHR1X2ludDhfdCBmYW1pbHk7XG4gXHRib29sIHJuZF9pbml0aWFsaXplZDtcbitcdGJvb2wgcmF0ZW1hdGNoO1xuIFxuIFx0c3RydWN0IGhhc2hsaW1pdF9jZmczIGNmZztcdC8qIGNvbmZpZyAqL1xuIFxuQEAgLTMyMyw2ICszMjQsNyBAQCBzdGF0aWMgaW50IGh0YWJsZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaGFzaGxpbWl0X2NmZzMgKmNmZyxcbiBcdFx0a3ZmcmVlKGhpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4rXHRoaW5mby1cdTAwM2VyYXRlbWF0Y2ggPSAhIShjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aGluZm8tXHUwMDNlbG9jayk7XG4gXG4gXHRzd2l0Y2ggKHJldmlzaW9uKSB7XG5AQCAtODcyLDcgKzg3NCwxMCBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovXG4tXHRpZiAocmV2aXNpb24gXHUwMDNlPSAzIFx1MDAyNlx1MDAyNiBjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHtcbitcdGlmIChjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHtcbitcdFx0aWYgKHJldmlzaW9uIFx1MDAzYyAzKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0XHRpZiAoY2ZnLVx1MDAzZWF2ZyA9PSAwIHx8IGNmZy1cdTAwM2VhdmcgXHUwMDNlIFUzMl9NQVgpIHtcbiBcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiaW52YWxpZCByYXRlXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuQEAgLTkwNSw2ICs5MTAsMTUgQEAgc3RhdGljIGludCBoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLFxuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGlmICgoY2ZnLVx1MDAzZW1vZGUgXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICEoKmhpbmZvKS1cdTAwM2VyYXRlbWF0Y2gpIHx8XG4rXHRcdCAgICAoIShjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAoKmhpbmZvKS1cdTAwM2VyYXRlbWF0Y2gpKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhhc2hsaW1pdF9tdXRleCk7XG4rXHRcdFx0aHRhYmxlX3B1dCgqaGluZm8pO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aGFzaGxpbWl0X211dGV4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IGZiMWM1OWQ0NTU2N2FmLi40NDljNTE4YmQ5NDdkYyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5AQCAtNjE3LDcgKzYxNywxMSBAQCBpcCAtNiAtbmV0IFwiJG5zcjJcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTozOjoxXG4gaXAgLW5ldCBcIiRuczJcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4yLjFcbiBpcCAtNiAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcbiBcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuK1x0J21ldGEgb2lmIHR1bjAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjAgYWNjZXB0J1xuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4rXHQnbWV0YSBvaWYgdHVuNiB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNiBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbiBcdCdtZXRhIG9pZiBcInZldGgwXCIgdGNwIHNwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfcmVwbCBhY2NlcHQnXG5AQCAtNjI5LDcgKzYzMyw3IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCIkbnMxXCIgXCIkbnMyXCIgMSBcIklQSVAgdHVubmVsXCI7IHRoZW5cbiBmaVxuIFxuIGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbi1cdGVjaG8gXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbFwiXG4rXHRjaGVja19jb3VudGVycyBcImZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsXCJcbiBlbHNlXG4gXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA2SVA2IHR1bm5lbFwiIDFcdTAwM2VcdTAwMjYyXG4gXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG5AQCAtNjQyLDYgKzY0Niw4IEBAIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHZldGgxLjEwIHVwXG4gaXAgLW5ldCBcIiRuc3IxXCIgYWRkciBhZGQgMTkyLjE2OC4yMC4xLzI0IGRldiB2ZXRoMS4xMFxuIGlwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIGZlZTE6NDo6MS82NCBkZXYgdmV0aDEuMTAgbm9kYWRcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS8xMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4rXHQnbWV0YSBvaWYgdmV0aDEuMTAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHZldGgxLjEwIGFjY2VwdCdcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjAuMTAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yXG5AQCAtNjQ5LDYgKzY1NSw4IEBAIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHR1bjAuMTAgdXBcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCAxOTIuMTY4LjIwMC4xLzI0IGRldiB0dW4wLjEwXG4gaXAgLW5ldCBcIiRuc3IxXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjAwLjJcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbitcdCdtZXRhIG9pZiB0dW4wLjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0J1xuIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wLjEwIGFjY2VwdCdcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lXG5AQCAtNjU2LDYgKzY2NCw4IEBAIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHR1bjYuMTAgdXBcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCBmZWUxOjU6OjEvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbiBpcCAtNiAtbmV0IFwiJG5zcjFcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxuIGlwIC02IC1uZXQgXCIkbnNyMVwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZWUxOjU6OjJcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuK1x0J21ldGEgb2lmIHR1bjYuMTAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjYuMTAgYWNjZXB0J1xuIFxuIGlwIC1uZXQgXCIkbnNyMlwiIGxpbmsgYWRkIGxpbmsgdmV0aDAgbmFtZSB2ZXRoMC4xMCB0eXBlIHZsYW4gaWQgMTBcbkBAIC02ODMsNyArNjkzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcIiRuczFcIiBcIiRuczJcIiAxIFwiSVBJUCB0dW5uZWwgb3ZlciB2bGFuXCI7IHRoZW5cbiBmaVxuIFxuIGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbi1cdGVjaG8gXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cIlxuK1x0Y2hlY2tfY291bnRlcnMgXCJmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cIlxuIGVsc2VcbiBcdGVjaG8gXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsIG92ZXIgdmxhblwiIDFcdTAwM2VcdTAwMjYyXG4gXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozNzo1NS4xMjI4MzIxODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjY3MTU5MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBzZXJpZXMgaGVyZSB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgbmV0d29yayBzdWJzeXN0ZW1zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBoaWdobHkgZnVuY3Rpb25hbCBhbmQgcmVhY2ggaW50byBzb21lIHZlcnkgY3J1Y2lhbCBuZXR3b3JrIGZpbHRlcmluZyBhbmQgbG9hZCBiYWxhbmNpbmcgbG9naWMsIHNvLCBhcyBhbiBleHBlcnQsIEkgY2FuIHRlbGwgaW1tZWRpYXRlbHksIHllcywgKipXb3J0aEZ1enppbmc9dHJ1ZSoqLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBhcmVhcyBhbmQgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFzcGVjdHMsIHRoZSBwb3RlbnRpYWwgXCJGb2N1c1N5bWJvbHNcIiBhbmQgdGhlIHJlbGV2YW50IFwiRW5hYmxlQ29uZmlnc1wiIHdlJ2xsIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRlc3RpbmcuXG5cbkZpcnN0LCB3ZSdyZSBsb29raW5nIGF0ICoqYG5ldC9uZXRmaWx0ZXIvaXB2cy9gKiouIFRoaXMgaXMgSVBWUywgdGhlIElQIFZpcnR1YWwgU2VydmVyIHN0dWZmLCByaWdodCBpbiB0aGUgY29yZTogY29ubmVjdGlvbiBoYW5kbGluZywgTkFULCB0aGUgd29ya3MuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YC4gTWFrZSBzdXJlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIGFyZSBhbGwgZW5hYmxlZCBhbmQgZnVuY3Rpb25hbCBmb3IgdGhlc2UuXG5cbk5leHQsIHdlJ3ZlIGdvdCBDb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgYW5kIHRoZSBTSVAvSC4zMjMgTkFUIGhlbHBlcnMgaW4gKipgbmV0L25ldGZpbHRlci9gKiouIFNwZWNpZmljYWxseSwgYG5mX2Nvbm50cmFja19leHBlY3QuY2AsIGBuZl9jb25udHJhY2tfc2lwLmNgLCBgbmZfbmF0X3NpcC5jYCwgYW5kIGBuZl9uYXRfaDMyMy5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb246IGBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyYCwgYG5hdF9ydHBfcnRjcGAsIGBuZl9uYXRfc2RwX21lZGlhYC4gQ29uZmlncyBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfTkFUX1NJUGAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGFuZCBgTkZfTkFUX0gzMjNgIGFyZSB0aGUga2V5IGVuYWJsaW5nIGZsYWdzIGhlcmUuXG5cbk1vdmluZyBvbiwgd2UncmUgbG9va2luZyBhdCAqKmBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oYCoqIGFuZCAqKmBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AqKi4gTG9va3MgbGlrZSBgbmZfdGFibGVzYCBpcyB1c2luZyBgcmhsdGFibGVgIGZvciBvYmplY3QgbG9va3VwIGJ5IG5hbWUuIEZvciBgbmZfdGFibGVzYCwgdGhlIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhcmU6IGBuZnRfb2JqX2xvb2t1cGAsIGBuZl90YWJsZXNfbmV3dGFibGVgLCBgbmZfdGFibGVzX3RhYmxlX2Rlc3Ryb3lgLCBgbmZfdGFibGVzX25ld29iamAsIGBuZl90YWJsZXNfY29tbWl0YCwgYW5kIGBfX25mX3RhYmxlc19hYm9ydGAuIEknbGwgbmVlZCBgTkZfVEFCTEVTYCB0byB0ZXN0IHRoaXMgcHJvcGVybHkuXG5cbkFsc28sIHRoZXJlIGFyZSBzb21lIGZpeGVzIHJlbGF0ZWQgdG8gKipgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCoqIGFuZCAqKmBuZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jYCoqLlxuXG5MYXN0bHksIHRoZSAqKmB4dF9oYXNobGltaXQuY2AqKiBmaXggbG9va3MgbGlrZSBpdCdzIGltcGFjdGluZyBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAgYW5kIGBodGFibGVfY3JlYXRlYC4gVGhpcyBsb29rcyBpbXBvcnRhbnQsIHNvIG1ha2Ugc3VyZSBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAgaXMgc2V0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGVzZSBjb25maWdzIHVzaW5nIGNvZGUgc2VhcmNoOyBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgZ2l2ZXMgdXMgYSBzb2xpZCBiYXNpcyBmb3IgdGFyZ2V0ZWQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODowNC43ODk5OTQ2MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NDIwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODowNC45OTQ0MjEwNDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI4OTE1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBJUF9WU19JUFY2YCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYElQX1ZTX0lQVjZgLiBVbmRlcnN0YW5kaW5nIGl0cyBjb25maWd1cmF0aW9uIGlzIGNyaXRpY2FsLCBvZiBjb3Vyc2UsIGJlY2F1c2UgaXQncyB0aGUgYmVkcm9jayBvZiBob3cgdHJhZmZpYyBpcyBiZWluZyBoYW5kbGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgbXkgbWluZCBpcyBjdXJyZW50bHkgZm9jdXNlZCBvbjpcblxuKiAgICoqSXRzIHN0YXR1czoqKiBJcyBpdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgcGFydGlhbGx5IGNvbmZpZ3VyZWQ/IFdoYXQga2VybmVsIG1vZHVsZSB2ZXJzaW9ucyBhcmUgd2Ugd29ya2luZyB3aXRoP1xuKiAgICoqQ29uZmxpY3QgcmVzb2x1dGlvbjoqKiBJJ20gbWVudGFsbHkgcGFyc2luZyBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgcnVsZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtYXkgY29uZmxpY3Qgd2l0aCBvdXIgZGVzaXJlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBhIG1ldGhvZGljYWwgZXhhbWluYXRpb24gb2YgdGhlIGN1cnJlbnQgc2V0dXAgdG8gc2VlIGlmIGl0IHBsYXlzIHdlbGwgd2l0aCB0aGUgcmVzdCBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUuXG4qICAgKipTZWN1cml0eSBpbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IHBvbGljeSBjb25zaWRlcmF0aW9ucyB3aXRoIHRoZSB1c2Ugb2YgdGhlIElQVjYgbW9kdWxlP1xuKiAgICoqT3B0aW1pemF0aW9uOioqIFdoYXQgb3B0aW1pemF0aW9ucywgaWYgYW55LCBoYXZlIGJlZW4gYXBwbGllZCBwcmV2aW91c2x5PyBJcyB0aGVyZSBhbnkgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSdtIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggbXkgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFscyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODowOC44MjMzMzk1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMTM1OTI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzg6MDguOTI2NDg1MjM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzQ1MjE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUy9JUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSBwb3BwZWQgdXAsIHNwZWNpZmljYWxseSBgSVBfVlNfSVBWNmAsIGFuZCB0aGUgaGludCBwb2ludHMgdG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhhdCBzb3VuZHMgYWJvdXQgcmlnaHQsIHRob3VnaCBJIGFsd2F5cyBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZWl0aGVyIGp1bXAgZGlyZWN0bHkgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCwgb3IsIHRvIGtlZXAgdGhpbmdzIHF1aWNrLCBJJ2xsIGp1c3QgcnVuIGEgYGdyZXBgIGZvciB0aGUgc3ltYm9sLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgcmVhbGx5IGZhc3QgLSB3aGVyZSBlbHNlIGl0J3MgcmVmZXJlbmNlZCwgZGVwZW5kZW5jaWVzLCBhbmQgc28gb24uIEVmZmljaWVuY3kgaXMga2V5IHdoZW4gbmF2aWdhdGluZyB0aGVzZSBjb25maWcgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoxMi4yNDk5NDA2ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyODIzNzY5MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoxNi41NzgxODg3NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyOTkyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgTG9hZCBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGBDT05GSUdfSVBfVlNfSVBWNmAgc3ByaW5rbGVkIHRocm91Z2hvdXQgdGhpcyBjb2RlLiBPa2F5LCBsZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hlcmUgdGhpcyBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZCwgYmVjYXVzZSB0aGF0IHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgdGhlIGJlaGF2aW9yIGFuZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBsb2FkIGJhbGFuY2luZyBmZWF0dXJlcyBJJ20gbG9va2luZyBhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBLY29uZmlnIG9wdGlvbnMuIEl0J3MgY3J1Y2lhbCBJIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoaXMgbWFjcm8gdG8gZm9sbG93IHRoZSBsb2dpYyBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGVzZSBpbXBsZW1lbnRhdGlvbiBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjE5LjYyMTE4NDIxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MDgyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjc9aWYgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyOTpjb25maWdcXHRJUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiSVB2NiBzdXBwb3J0IGZvciBJUFZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoxOS44MjAyNzQ5NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MzQ1NDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIFNldHRpbmcqKlxuXG5SaWdodCwgc28gSSd2ZSBiZWVuIHdyZXN0bGluZyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCdzIHN0YXJpbmcgbWUgaW4gdGhlIGZhY2UuIEl0J3MgYWN0dWFsbHkgYGNvbmZpZyBJUF9WU19JUFY2YCwgYnV0IEkgY29tcGxldGVseSBtaXNzZWQgdGhlIHRhYiBjaGFyYWN0ZXIgd2hlbiBJIHdhcyBidWlsZGluZyBteSByZWd1bGFyIGV4cHJlc3Npb24uIEkgd2FzIHJ1bm5pbmcgYGNvbmZpZyBJUF9WU19JUFY2YCBpbnN0ZWFkISBSb29raWUgbWlzdGFrZSwgSSByZWFsbHkgc2hvdWxkIGhhdmUga25vd24gYmV0dGVyLCBJIHJlYWxseSBzaG91bGQgaGF2ZSB0ZXN0ZWQgaXQgYWdhaW5zdCB0aGUgc291cmNlIGEgYml0IG1vcmUgdmlnb3JvdXNseS5cblxuTm93IHRoYXQgSSd2ZSBob3BlZnVsbHkgY2xlYXJlZCB1cCB0aGF0IG9uZSBwb3RlbnRpYWwgcmVkIGhlcnJpbmcsIEkgbmVlZCB0byBjaGVjayBvdXQgYSBjb3VwbGUgb3RoZXIsIHJlbGF0ZWQgc2V0dGluZ3MgZm9yIHRoZSBOQVQgc3Vic3lzdGVtLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgTkZfTkFUX1NJUGAgYW5kIGBORl9OQVRfSDMyM2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIGEgY29uZmxpY3Qgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhvc2Ugdm9pY2Utb3Zlci1JUCBvciBzZXNzaW9uIGVzdGFibGlzaG1lbnQgc2NlbmFyaW9zLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIG5vdyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NzEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoyMy4yODM3MzI0MDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg0ODY2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVF9TSVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00MjY9Y29uZmlnIE5GX05BVF9JUkNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQzMTpjb25maWcgTkZfTkFUX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzItXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzg6MjcuNzcyMjI0ODU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDg3NDM3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipORl9OQVRfSDMyMyAtIEEgTGluZ2VyaW5nIFF1ZXN0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24sIHByb2JhYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb21ldGhpbmcgbGlrZSBhIGZpcmV3YWxsIG9yIGEgcm91dGVyLCByaWdodD8gV2UncmUgZGVhbGluZyB3aXRoIE5BVCwgdGhhdCdzIGNsZWFyLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzICpzcGVjaWZpY2FsbHkqIGBORl9OQVRfSDMyM2AuIFdoYXQgYWJvdXQgaXQ/IEl04oCZcyBhIHZlcnkgcG9pbnRlZCBxdWVyeSwgc28gc29tZXRoaW5n4oCZcyBwaXF1ZWQgbXkgaW50ZXJlc3QgcmVnYXJkaW5nIEguMzIzLiBQZXJoYXBzIHRoZXJlJ3MgYSBwYXJ0aWN1bGFyIHByb2JsZW0gSSdtIHRyeWluZyB0byBkaWFnbm9zZS4gTWF5YmUgSSdtIHRyb3VibGVzaG9vdGluZyBhbiBILjMyMy1iYXNlZCBWb0lQIHNldHVwIGFuZCBJJ20gd29uZGVyaW5nIGlmIGEgc3BlY2lmaWMgbW9kdWxlIHJlbGF0ZWQgdG8gdGhhdCBwcm90b2NvbCBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseS4gT3IgSSdtIGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgZXZlbiB0aGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdHMgTkFUIGltcGxlbWVudGF0aW9uLiBJcyBpdCBwcm9wZXJseSBtYW5hZ2luZyB0aGUgc2lnbmFsaW5nIGFuZCBtZWRpYSBzdHJlYW1zPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IElzIGl0IHNvbWV0aGluZyBJIG5lZWQgdG8gY29uZmlndXJlLCBkZWJ1Zywgb3IgbWF5YmUgZXZlbiByZXBsYWNlPyBUaGUgbGFjayBvZiBjb250ZXh0IGltcGxpZXMgdGhhdCBJJ3ZlIGFscmVhZHkgc2V0IGEgbG90IG9mIHN0YWdlLCBhbmQgdGhhdCBqdXN0IHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgbW9kdWxlIHJlbGF0ZWQgdG8gSC4zMjMgaXMgZW5vdWdoIHRvIHNwdXIgdGhvdWdodC4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgYSB2ZXJ5IHNwZWNpZmljLCBhbmQgcHJvYmFibHkgbm9uLXRyaXZpYWwsIGRldGFpbCB3aXRoaW4gdGhpcyB3aG9sZSBuZXR3b3JrIHRyYW5zbGF0aW9uIHByb2Nlc3MuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlIG15IGxpbmUgb2YgcmVhc29uaW5nLCBidXQgdGhhdCBzaW5nbGUgbW9kdWxlIG5hbWUgaXMgY2xlYXJseSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgbmV4dCBwaWVjZSBvZiB0aGlzIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzNDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODozMi42MjA5NzI4MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzIyMDA1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVF9IMzIzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTg9Y29uZmlnIE5GX05BVF9QUFRQXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9OQVRfSDMyM1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODozNi4yNTMxNzkxOTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MzA1NTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgQWJvdXQgSGFzaGxpbWl0cyBhbmQgTmV0ZmlsdGVyKipcblxuSG1tLCBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAuIFRoYXQncyB0aGUgb25lIHRoYXQgYWx3YXlzIG1ha2VzIG1lIHRoaW5rLi4uIGhvdyByb2J1c3QgaXMgdGhlIGltcGxlbWVudGF0aW9uIHJlYWxseT8gV2hhdCBhcmUgdGhlIGtleSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhdCBzY2FsZT8gSXMgaXQgdGhyZWFkLXNhZmUgaW4gYWxsIHRoZSB3YXlzIGl0ICpuZWVkcyogdG8gYmU/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHRoYXQgbWlnaHQgcmVhciB0aGVpciB1Z2x5IGhlYWRzIHVuZGVyIGhlYXZ5IGxvYWQsIGNhdXNpbmcgdW5leHBlY3RlZCBkcm9wcyBvciBldmVuIHdvcnNlLCBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyDigJMgaG93IGFyZSBjb2xsaXNpb25zIGhhbmRsZWQgd2l0aGluIHRoZSBoYXNoIHRhYmxlPyBBbmQgd2hhdCBhYm91dCBtZW1vcnkgY29uc3VtcHRpb24gd2l0aCBhIGxhcmdlIG51bWJlciBvZiBydWxlcz8gQXJlIHRoZXJlIGFueSBnb3RjaGFzIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaGFzaCBsaW1pdHMgdGhlbXNlbHZlcz8gSSBzaG91bGQgcmV2aWV3IHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWNlbnQgcGF0Y2hlcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjM5Ljg0NjIzNzcxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwODA5MTEyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTEzMTQ9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9FU1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzIzOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzMjQtXFx0dHJpc3RhdGUgJ1xcXCJoYXNobGltaXRcXFwiIG1hdGNoIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjQzLjY1NDMzNjcwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIyNzQ0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgRXNzZW50aWFsIE5ldHdvcmsgUHJvdG9jb2wgQ29uc3RhbnRzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5kYW1lbnRhbCBjb25zdGFudHMgc3RyYWlnaHQgaW4gbXkgaGVhZCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFZpcnR1YWwgU2VydmVyIChWUykgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY29ycmVjdCBkZWZpbml0aW9ucyBmb3IgdGhlIHByb3RvY29sIGlkZW50aWZpZXJzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSB2YWx1ZXMgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcyBvZiBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGEgYmVhdC4gQWZ0ZXIgYWxsLCBpbmNvcnJlY3QgdmFsdWVzIGhlcmUgY291bGQgbGVhZCB0byBzb21lIHNpZ25pZmljYW50IGFuZCBlYXNpbHkgb3Zlcmxvb2tlZCBlcnJvcnMgZG93bnN0cmVhbSBpbiB0cmFmZmljIHJvdXRpbmcgb3IgaGVhbHRoIGNoZWNrcy4gTGV0IG1lIG1ha2Ugc3VyZSBJIGtub3cgdGhlIHZhbHVlcy4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjQ2LjY3NzA4NDYyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NjIxMzg0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjUwLjk3MzMwODYxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk4MzkzMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIElQVlMgQ29uZmlnIGZvciBQUk9UT19UQ1AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVENQIHdpdGhpbiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgY29kZS4gTXkgaW5zdGluY3Qgc2F5cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgd291bGQgYmUgdGhlIGBLY29uZmlnYCBmaWxlLCBsb2NhdGVkIHVuZGVyIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL2AgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSBrZXJuZWwgbW9kdWxlcyBkZWZpbmUgdGhlaXIgYnVpbGQgb3B0aW9ucy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYFBST1RPX1RDUGAuIFRoaXMgc2hvdWxkIHBvaW50IG1lIHRvd2FyZHMgaG93IFRDUCBsb2FkIGJhbGFuY2luZyBhbmQgb3RoZXIgcmVsYXRlZCBUQ1Atc3BlY2lmaWMgZmVhdHVyZXMgd2l0aGluIElQVlMgYXJlIGNvbmZpZ3VyZWQuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzM5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjU0LjM3MTcwNTI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NjY2MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzg6NTQuODkxMzc2OTEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzQxNzk0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBTeW1ib2wgU2V0IGZvciBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBJJ3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gZXhhbWluZSByZWxhdGVkIHRvIElQVlMsIGNvbm50cmFjaywgTmV0ZmlsdGVyIHRhYmxlcywgYW5kIGhhc2hsaW1pdC4gRmlyc3QsIEkndmUgY29uZmlybWVkIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIGFyZSBhbGwgdmFsaWQgcHJvdG9jb2wgZGVmaW5pdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC5cblxuTm93LCBsZXQncyBjbGFyaWZ5IHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4gSSd2ZSBub3RlZCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYElQX1ZTYCwgYElQX1ZTX0lQVjZgLCBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGBJUF9WU19QUk9UT19TQ1RQYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfTkFUX1NJUGAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9OQVRfSDMyM2AsIGBORl9UQUJMRVNgLCBhbmQgYE5FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVRgLlxuXG5OZXh0LCBJJ20gZGl2aW5nIGludG8gdGhlIG1vcmUgZ3JhbnVsYXIgc3ltYm9scywgZm9jdXNpbmcgb24gdGhvc2UgdGhhdCBhcmUgbGlrZWx5IHJlbGV2YW50LlxuXG5Gb3IgSVBWUywgSSd2ZSBpZGVudGlmaWVkOiBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGFuZCBgc2N0cF9jc3VtX2NoZWNrYC5cblxuSW4gdGhlIGNvbm50cmFjayByZWFsbSwgSSdtIGxvb2tpbmcgYXQ6IGBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyYCwgYG5hdF9ydHBfcnRjcGAsIGFuZCBgbmZfbmF0X3NkcF9tZWRpYWAuXG5cbk5ldGZpbHRlciB0YWJsZXMgYXJlIHJlcHJlc2VudGVkIGJ5OiBgbmZ0X29ial9sb29rdXBgLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc190YWJsZV9kZXN0cm95YCwgYG5mX3RhYmxlc19uZXdvYmpgLCBhbmQgYG5mdF9vYmpfZGVsYC5cblxuRmluYWxseSwgZm9yIHh0X2hhc2hsaW1pdCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6IGBoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uYCBhbmQgYGh0YWJsZV9jcmVhdGVgLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIHZpc2liaWxpdHkgb2YgZnVuY3Rpb25zIGlzIG5lY2Vzc2FyeS4gSXQgc2VlbXMgYG5mdF9vYmpfZGVsYCBpcyBzdGF0aWMgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLiBGdXJ0aGVyLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc190YWJsZV9kZXN0cm95YCwgYW5kIGBuZl90YWJsZXNfbmV3b2JqYCBhcmUgYWxzbyBzdGF0aWMuIEFsdGhvdWdoIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGV5J3JlIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsuIEhvd2V2ZXIsIGBuZl90YWJsZXNfdGFibGVfZGVzdHJveWAgaXMgc3RhdGljLCBzbyBJJ2xsIGF2b2lkIGluY2x1ZGluZyBpdC4gSSdsbCBzdGljayB3aXRoIGBuZnRfb2JqX2xvb2t1cGAgYW5kIGBuZl90YWJsZXNfbmV3dGFibGVgLCB3aGljaCBhcmUgYWNjZXNzaWJsZS5cblxuYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgIGlzIGV4cG9ydGVkLCBzbyBpdCdzIGdvb2QuIGBuYXRfcnRwX3J0Y3BgIGFuZCBgbmZfbmF0X3NkcF9tZWRpYWAgYXJlIHN0YXRpYywgcmVzaWRpbmcgaW4gYG5mX25hdF9oMzIzLmNgIGFuZCBgbmZfbmF0X3NpcC5jYCByZXNwZWN0aXZlbHkuXG5cbkNoZWNraW5nIHRoZSBJUFZTIGZ1bmN0aW9ucyBhZ2FpbiwgSSBmaW5kIHRoYXQgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpcyBzdGF0aWMgaW4gYGlwX3ZzX2Nvbm4uY2AuIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAgYXJlIGV4cG9ydGVkLiBgaXBfdnNfb3V0X2ljbXBgIGFuZCBgaXBfdnNfaW5faWNtcGAgYXJlIHN0YXRpYyBpbiBgaXBfdnNfY29yZS5jYC5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSd2ZSBmaW5hbGl6ZWQgbXkgc2V0IG9mIHN5bWJvbHMgdG8gaW5jbHVkZTpcblxuYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgLCBgc2N0cF9jc3VtX2NoZWNrYCwgYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgLCBgbmF0X3J0cF9ydGNwYCwgYG5mX25hdF9zZHBfbWVkaWFgLCBgbmZ0X29ial9sb29rdXBgLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc19uZXdvYmpgLCBgbmZ0X29ial9kZWxgLCBhbmQgYGhhc2hsaW1pdF9tdF9jaGVja19jb21tb25gLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCBhbmQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeVxuXG4iLCJJbnB1dFRva2VucyI6MzM4MjIsIk91dHB1dFRva2VucyI6NDA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM5OjA4LjYzMzE3NTQ2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTUzNTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9OQVRfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfTkFUX0gzMjNcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwibmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpclwiLFxuICAgIFwibmF0X3J0cF9ydGNwXCIsXG4gICAgXCJuZl9uYXRfc2RwX21lZGlhXCIsXG4gICAgXCJuZnRfb2JqX2xvb2t1cFwiLFxuICAgIFwibmZfdGFibGVzX25ld3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3b2JqXCIsXG4gICAgXCJuZnRfb2JqX2RlbFwiLFxuICAgIFwiaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9OQVRfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfTkFUX0gzMjNcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwibmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpclwiLFxuICAgIFwibmF0X3J0cF9ydGNwXCIsXG4gICAgXCJuZl9uYXRfc2RwX21lZGlhXCIsXG4gICAgXCJuZnRfb2JqX2xvb2t1cFwiLFxuICAgIFwibmZfdGFibGVzX25ld3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3b2JqXCIsXG4gICAgXCJuZnRfb2JqX2RlbFwiLFxuICAgIFwiaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowfgcjq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 23:17:51 +0000 UTC FinishedAt: 2026-07-23 23:39:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP", "NF_CONNTRACK_SIP", "NF_NAT_SIP", "NF_CONNTRACK_H323", "NF_NAT_H323", "NF_TABLES", "NETFILTER_XT_MATCH_HASHLIMIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP", "NF_CONNTRACK_SIP", "NF_NAT_SIP", "NF_CONNTRACK_H323", "NF_NAT_H323", "NF_TABLES", "NETFILTER_XT_MATCH_HASHLIMIT" ], "series_id": "01ddf54a-ed60-4049-9b31-1f92fc2e0296" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_conn_fill_cport", "ip_vs_conn_change_fwd_mask", "ip_vs_nat_icmp", "ip_vs_nat_icmp_v6", "ip_vs_out_icmp", "ip_vs_in_icmp", "ip_vs_icmp_xmit", "ip_vs_icmp_xmit_v6", "tcp_csum_check", "udp_csum_check", "sctp_csum_check", "nf_ct_expect_related_pair", "nat_rtp_rtcp", "nf_nat_sdp_media", "nft_obj_lookup", "nf_tables_newtable", "nf_tables_newobj", "nft_obj_del", "hashlimit_mt_check_common" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfTkFUX1NJUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9OQVRfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7c2N0cF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O25mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXImIzM0OywKICAgICYjMzQ7bmF0X3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mX25hdF9zZHBfbWVkaWEmIzM0OywKICAgICYjMzQ7bmZ0X29ial9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdvYmomIzM0OywKICAgICYjMzQ7bmZ0X29ial9kZWwmIzM0OywKICAgICYjMzQ7aGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG11bHRpcGxlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMsIGluY2x1ZGluZyBJUFZTIGNvbm5lY3Rpb24gaGFuZGxpbmcgYW5kIElDTVAvY2hlY2tzdW0gcHJvY2Vzc2luZywgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGhhbmRsaW5nIGZvciBTSVAgYW5kIEguMzIzLCBuZl90YWJsZXMgb2JqZWN0IGxvb2t1cCBtZWNoYW5pc21zLCBhbmQgeHRfaGFzaGxpbWl0IG1hdGNoaW5nLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzFkNDk0MmI4NGI1YjJiZjFhYzcyODBjZjllMTAyZTIwZGE0NDVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIzOjM3OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaFxuaW5kZXggZGJjNjE0ZGZlMGQ1NjUuLmFhZmEwYzA0ZjkxN2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcbkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBuZl9uYXRfc2lwX2hvb2tzIHtcbiBcdFx0XHQgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuKTtcbiBcbiBcdHZvaWQgKCpzZXFfYWRqdXN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGludCBwcm90b2ZmLCBzMTYgb2ZmKTtcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMzMiBvZmYpO1xuIFxuIFx0dW5zaWduZWQgaW50ICgqZXhwZWN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuQEAgLTI1LDcgJiM0MzsyNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcdTAwM2VcdFx0LyogZm9yIHVuaW9uIG5mX2luZXRfYWRkciAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcdFx0XHQvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC0xOTcyLDggJiM0MzsxOTc0LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBpbnQgaXBfdnNfZHJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcbi1cdFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4mIzQzO1x0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XG4gdm9pZCBpcF92c19kZXN0X2RzdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTE5ODYsOCAmIzQzOzE5ODgsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuQEAgLTIwNTksMTUgJiM0MzsyMDYxLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gfVxuIFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XG4mIzQzO1x0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICBib29sIGhhc19wb3J0cyk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7XG4tXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcbiB7XG4gXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XG5AQCAtMjA5Myw2ICYjNDM7MjA5NSwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcbiYjNDM7e1xuJiM0MztcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xuJiM0MztcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdC8qIExPQ0FMX09VVCA/ICovXG4mIzQzO1x0aWYgKCFza2ItXHUwMDNlZGV2IHx8IHNrYi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cbiYjNDM7XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbiYjNDM7XHRcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVx1MDAzZXJ0NmlfZmxhZ3MgXHUwMDI2IFJURl9MT0NBTCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbiYjNDM7e1xuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuaW5kZXggYzAyNDM0NWM5YmQ4NjIuLjI2ZDZiYWJkOTJmY2Q3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuQEAgLTE2MSw2ICYjNDM7MTYxLDkgQEAgc3RhdGljIGlubGluZSBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiBcdHJldHVybiBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoZXhwZWN0LCAwLCAwLCBmbGFncyk7XG4gfVxuIFxuJiM0MztpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0W10sXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBmbGFnKTtcbiYjNDM7XG4gc3RydWN0IG5mX2Nvbm5faGVscDtcbiB2b2lkIG5mX2N0X2V4cGVjdGF0aW9uX2djKHN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbmluZGV4IDlkODQ0MzU0YzRkOTU2Li4zYmU2MTIxNDVjMTMwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtMTI5NCw2ICYjNDM7MTI5NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdXNlX2luY19yZXN0b3JlKHUzMiAqdXNlKVxuICAqXHRAc2V0czogc2V0cyBpbiB0aGUgdGFibGVcbiAgKlx0QG9iamVjdHM6IHN0YXRlZnVsIG9iamVjdHMgaW4gdGhlIHRhYmxlXG4gICpcdEBmbG93dGFibGVzOiBmbG93IHRhYmxlcyBpbiB0aGUgdGFibGVcbiYjNDM7ICpcdEBvYmpuYW1lX2h0OiBoYXNodGFibGUgZm9yIG9iamVjdHMgbG9va3VwIGJ5IG5hbWVcbiAgKlx0QGhnZW5lcmF0b3I6IGhhbmRsZSBnZW5lcmF0b3Igc3RhdGVcbiAgKlx0QGhhbmRsZTogdGFibGUgaGFuZGxlXG4gICpcdEB1c2U6IG51bWJlciBvZiBjaGFpbiByZWZlcmVuY2VzIHRvIHRoaXMgdGFibGVcbkBAIC0xMzEzLDYgJiM0MzsxMzE0LDcgQEAgc3RydWN0IG5mdF90YWJsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHNldHM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdG9iamVjdHM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGZsb3d0YWJsZXM7XG4mIzQzO1x0c3RydWN0IHJobHRhYmxlXHRcdFx0b2JqbmFtZV9odDtcbiBcdHU2NFx0XHRcdFx0aGdlbmVyYXRvcjtcbiBcdHU2NFx0XHRcdFx0aGFuZGxlO1xuIFx0dTMyXHRcdFx0XHR1c2U7XG5AQCAtMTQwMCw3ICYjNDM7MTQwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbmZ0X29ial9kYXRhKGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4gI2RlZmluZSBuZnRfZXhwcl9vYmooZXhwcilcdCooKHN0cnVjdCBuZnRfb2JqZWN0ICoqKW5mdF9leHByX3ByaXYoZXhwcikpXG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCB1MzIgb2JqdHlwZSxcbiBcdFx0XHRcdCAgdTggZ2VubWFzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xuaW5kZXggMTgzZThhM2ZmMmJhYmQuLjZiY2Q2NzM0NzY5YjU5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jXG5AQCAtMTgyLDYgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IG5hdF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9leHAsXG4gXHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07XG4gXHRzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSBuZmN0X2hlbHBfZGF0YShjdCk7XG4gXHRpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIFx0aW50IGk7XG5AQCAtMjI3LDIyICYjNDM7MjI4LDEzIEBAIHN0YXRpYyBpbnQgbmF0X3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0cnRwX2V4cC1cdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQpO1xuLVx0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydHBfZXhwLCAwKTtcbiYjNDM7XHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCAmIzQzOyAxKTtcbiYjNDM7XHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsIDApO1xuIFx0XHRpZiAocmV0ID09IDApIHtcbi1cdFx0XHRydGNwX2V4cC1cdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9XG4tXHRcdFx0ICAgIGh0b25zKG5hdGVkX3BvcnQgJiM0MzsgMSk7XG4tXHRcdFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsIDApO1xuLVx0XHRcdGlmIChyZXQgPT0gMClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHtcbi1cdFx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdFx0bmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTtcbi1cdFx0XHRcdG5hdGVkX3BvcnQgPSAwO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKHJldCAhPSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdG5hdGVkX3BvcnQgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5iMmQ3Nzk3MzI3MmQyNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMDA1LDcgJiM0MzsxMDA1LDcgQEAgbXR5cGVfYWRkKHN0cnVjdCBpcF9zZXQgKnNldCwgdm9pZCAqdmFsdWUsIGNvbnN0IHN0cnVjdCBpcF9zZXRfZXh0ICpleHQsXG4gI2VuZGlmXG4gXHRpZiAoU0VUX1dJVEhfQ09VTlRFUihzZXQpKVxuIFx0XHRpcF9zZXRfaW5pdF9jb3VudGVyKGV4dF9jb3VudGVyKGRhdGEsIHNldCksIGV4dCk7XG4tXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKVxuJiM0MztcdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkgXHUwMDI2XHUwMDI2ICFleHQtXHUwMDNldGFyZ2V0KVxuIFx0XHRpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZGF0YSwgc2V0KSwgZXh0KTtcbiBcdGlmIChTRVRfV0lUSF9TS0JJTkZPKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X3NrYmluZm8oZXh0X3NrYmluZm8oZGF0YSwgc2V0KSwgZXh0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5AQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cdTAwM2VsZW4gJiM0Mzsgc2l6ZW9mKCp0aCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaXB2c2gtXHUwMDNlbGVuKTtcbiYjNDM7XHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4gXG4gXHQvKlxuIFx0ICpcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcbkBAIC00NDMsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICYjNDM7IHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZlZDI2MjIzNjNmMGQ2Li4zNmM1Y2JhMDNmNWJjYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSAmIzQzOzcwLDQ1IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4mIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXG4mIzQzOyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4mIzQzOy8qKlxuJiM0MzsgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaFxuJiM0MzsgKiBAdDpcdFx0aGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZVxuJiM0MzsgKiBAdDI6XHRcdGhhc2ggdGFibGUgZm9yIGhuMSwgbmV3X3RibCB3aGVuIG5ld19oYXNoMj10cnVlXG4mIzQzOyAqIEBjcDpcdFx0Y29ubmVjdGlvblxuJiM0MzsgKiBAaGFzaF9rZXk6XHRoYXNoIGtleSBmb3IgaG4wXG4mIzQzOyAqIEBoYXNoX2tleTI6XHRoYXNoIGtleSBmb3IgaG4xXG4mIzQzOyAqIEB1c2UyOlx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXG4mIzQzOyAqIEBuZXdfaGFzaDpcdG1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxuJiM0MzsgKiBAbmV3X2hhc2gyOlx0bW9kZSBmb3IgaG4xLCBoYXNoIG5vZGUgKHRydWUpIG9yIHNlZWsgbm9kZSAoZmFsc2UpXG4mIzQzOyAqIEBoZWFkX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxuJiM0MzsgKiBAaGVhZDJfcmV0Olx0cmV0dXJuZWQgaGVhZCBmb3IgaG4xXG4mIzQzOyAqXG4mIzQzOyAqIFdlIHN1cHBvcnQgMyBtb2RlczpcbiYjNDM7ICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZ1xuJiM0MzsgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZ1xuJiM0MzsgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcbiYjNDM7ICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbi1cdCAgICAgIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcbi1cdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuJiM0Mztjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4mIzQzO1x0ICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4mIzQzO1x0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXG4mIzQzO1x0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXG4ge1xuIFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbiBcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XG4tXHRzdHJ1Y3QgaXBfdnNfcmh0ICp0MiA9IHQ7XG4tXHR1MzIgaWR4LCBpZHgyO1xuJiM0MztcdGludCBpZHggPSAwLCBpZHgyID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogQWR2YW5jZSBpZHgyIHdoZW4gbmV3X2hhc2ggaXMgbm90IHNldCBidXQgaGFzaF9rZXkyXG4mIzQzO1x0ICogaXMgZm9yIG5ldyB0YWJsZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChuZXdfaGFzaDIgXHUwMDI2XHUwMDI2IHVzZTIgXHUwMDI2XHUwMDI2IHQgIT0gdDIpXG4mIzQzO1x0XHRpZHgyJiM0MzsmIzQzOztcbiBcbi1cdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRpZiAodXNlMilcbi1cdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0ZWxzZVxuLVx0XHRpZHgyID0gaWR4O1xuIFx0aWYgKCFuZXdfaGFzaCkge1xuIFx0XHQvKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGJ1Y2tldCBpbiB0aGUgcmlnaHQgdGFibGUgKi9cbiBcbkBAIC0xMDAsNDYgJiM0MzsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHQgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MlxuIFx0XHRcdCAqIGZvciBwcm9wZXIgbG9jayBvcmRlcmluZyBmb3IgaGVhZHMuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdFx0XHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdH1cbi1cdFx0aWYgKHVzZTIpIHtcbi1cdFx0XHRpZiAoIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4tXHRcdFx0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuLVx0XHRcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4tXHRcdFx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrO1xuLVx0XHRcdFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWR4MiA9IGlkeDtcbiYjNDM7XHRcdFx0aWR4JiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0fVxuJiM0MztcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyIFx1MDAyNlx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbiYjNDM7XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbiYjNDM7XHRcdGlkeDImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiBcbiYjNDM7XHRpZiAoIXVzZTIpXG4mIzQzO1x0XHRpZHgyID0gaWR4O1xuIFx0aGVhZCA9IHQtXHUwMDNlYnVja2V0cyAmIzQzOyAoaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzayk7XG4gXHRoZWFkMiA9IHVzZTIgPyB0Mi1cdTAwM2VidWNrZXRzICYjNDM7IChoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2spIDogaGVhZDtcbiBcbi1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdC8qIERvIG5vdCB0b3VjaCBzZXFjb3VudCwgdGhpcyBpcyBhIHNhZmUgb3BlcmF0aW9uICovXG4tXG4tXHRpZiAoaWR4IFx1MDAzYz0gaWR4Mikge1xuJiM0MztcdGlmIChpZHggXHUwMDNlIGlkeDIgfHwgKGhlYWQgXHUwMDNlIGhlYWQyIFx1MDAyNlx1MDAyNiBpZHggPT0gaWR4MikpIHtcbiYjNDM7XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuLVx0XHRpZiAoaGVhZCAhPSBoZWFkMilcbi1cdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuJiM0MztcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4mIzQzO1x0XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0fVxuIFx0aWYgKCFuZXdfaGFzaCkge1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VkO1xuJiM0MztcbiBcdFx0LyogRW5zdXJlIGhhc2hfa2V5IGlzIHJlYWQgdW5kZXIgbG9jayAqL1xuIFx0XHRoYXNoX2tleV9uZXcgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbi1cdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcdFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcbiYjNDM7XHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFx0Y2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XG4mIzQzO1x0XHR9XG4gXHRcdC8qIEhhc2ggY2hhbmdlZCA/ICovXG4tXHRcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcbi1cdFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcdTAwMjZcdTAwMjYgdXNlMikpIHtcbiYjNDM7XHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgJiM0MzsxNzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLFxuIFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdGhsaXN0X2JsX3VubG9jayhoZWFkMik7XG4gXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XG4tXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuQEAgLTI2OCw4ICYjNDM7Mjg2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0dXNlMiA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiBcbiBcdGNwLVx1MDAzZWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xuQEAgLTI4MCw2ICYjNDM7Mjk5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmV0ID0gMTtcbiBcbiBcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXG5AQCAtMzA2LDE4ICYjNDM7MzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcbiBcdFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cbi1cdFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuJiM0MztcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuIFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4wLm5vZGUpO1xuIFx0XHRcdGlmICh1c2UyKVxuIFx0XHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG5AQCAtMzI4LDYgJiM0MzszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiBcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02MzIsNiAmIzQzOzY1NSw3IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0aW50IG50Ymw7XG4gXHRpbnQgZGlyO1xuIFxuJiM0MztyZXN0YXJ0OlxuIFx0LyogTm8gcGFja2V0cyBmcm9tIGluc2lkZSwgc28gd2UgY2FuIGRvIGl0IGluIDIgc3RlcHMuICovXG4gXHRkaXIgPSB1c2UyID8gMSA6IDA7XG4gXG5AQCAtNjg2LDYgJiM0Mzs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHQvKiBQcm90ZWN0IHRoZSBjcC1cdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcbiYjNDM7XHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXG4mIzQzO1x0aWYgKHVzZTIgIT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4mIzQzO1x0XHR1c2UyID0gIXVzZTI7XG4mIzQzO1x0XHRpZiAodXNlMikge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0LyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovXG4mIzQzO1x0XHRcdGdvdG8gcmVzdGFydDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChkaXIpIHtcbiYjNDM7XHRcdFx0LyogTm90IHN0YXJ0ZWQgeWV0LCBzbyBqdXN0IHNraXAgZGlyIDEgKi9cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdGRpci0tO1xuJiM0MztcdFx0XHRnb3RvIG5leHRfZGlyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogSnVzdCBmaW5pc2ggZGlyIDAgKi9cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXG4gXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxuIFx0ICovXG5AQCAtNzUyLDYgJiM0Mzs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovXG4mIzQzO3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gY3AtXHUwMDNlaXB2cztcbiYjNDM7XHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuJiM0MztcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbiYjNDM7XHRzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7XG4mIzQzO1xuJiM0MztcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbiYjNDM7XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XG4mIzQzO1x0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXG4mIzQzO1x0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cbiYjNDM7XHQgICAgKChuZXdfZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4mIzQzO1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiYjNDM7XHRpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4mIzQzO1x0XHQvKiBTdG9wIGRvdWJsZSBoYXNoaW5nICovXG4mIzQzO1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuJiM0MztcdFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuJiM0MztcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4mIzQzO1xuJiM0MztcdFx0LyogS2VlcCBib3RoIGhhc2gga2V5cyBpbiBzYW1lIHRhYmxlICovXG4mIzQzO1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuJiM0MztcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5KTtcbiYjNDM7XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi9cbiYjNDM7XG4mIzQzO1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuJiM0MztcbiYjNDM7XHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXHUwMDNlbmV3X3RibCk7XG4mIzQzO1x0XHRoYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7XG4mIzQzO1x0XHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBDaGFuZ2UgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2tlZCBobjAgKi9cbiYjNDM7XHRcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXG4mIzQzO1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpO1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1x0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbiYjNDM7XG4mIzQzO1x0XHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBHZXQgZGVmYXVsdCBsb2FkIGZhY3RvciB0byBtYXAgY29ubl9jb3VudC91X3RocmVzaCB0byB0LVx1MDAzZXNpemUgKi9cbiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbiB7XG5AQCAtMTAxNCw2ICYjNDM7MTExMCw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0ZmxhZ3MgPSBjcC1cdTAwM2VmbGFncztcbiBcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XG4mIzQzO1x0XHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cbiYjNDM7XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XG4mIzQzO1xuIFx0XHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcbiBcdFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXG4gXHRcdCAqL1xuQEAgLTEwMjEsOSAmIzQzOzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4gXHRcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7XG4gXHRcdC8qIGNvbm5lY3Rpb25zIGluaGVyaXQgZm9yd2FyZGluZyBtZXRob2QgZnJvbSBkZXN0ICovXG4gXHRcdGZsYWdzIFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xuJiM0MztcdFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbiYjNDM7XHRcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cbiYjNDM7XHRcdCAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbiYjNDM7XHRcdFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHR9XG4tXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuLVx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGNwLVx1MDAzZWRlc3QgPSBkZXN0O1xuIFxuIFx0SVBfVlNfREJHX0JVRig3LCBcJiMzNDtCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkIFwmIzM0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uNmI3OWUwYzRkOWUyODQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuJiM0MztzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyAmIzQzOzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICBib29sIGhhc19wb3J0cylcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NDUsOCAmIzQzOzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzO1x0aWYgKGhhc19wb3J0cykge1xuIFx0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICYjNDM7IGNpcGgtXHUwMDNlaWhsKjQ7XG4gXG4gXHRcdGlmIChpbm91dClcbkBAIC05NTcsNDggJiM0Mzs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4mIzQzO1x0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwaFx0ID0gaXB2Nl9oZHIoc2tiKTtcbi1cdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc1x0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXG4tXHRpbnQgcHJvdG9jb2w7XG4gXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xuLVx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XG4tXHR1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmcztcbiYjNDM7XHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xuIFxuLVx0aXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuLVx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGljbXBfb2Zmc2V0KTtcbi1cdG9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbi1cdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7XG4tXG4tXHRwcm90b2NvbCA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmZzLCAtMSwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuJiM0MztcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiYjNDM7XHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VvZmYpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpZiAoaGFzX3BvcnRzKSB7XG4mIzQzO1x0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VsZW4pO1xuIFxuIFx0XHRJUF9WU19EQkcoMTEsIFwmIzM0OyVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHQgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLFxuQEAgLTEwMTEsMTkgJiM0MzsxMDAyLDE3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXG4gXHRpY21waC1cdTAwM2VpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSBpY21wX29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0b2ZmLFxuIFx0XHRcdFx0XHQgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7XG4tXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQgJiM0MzsgaWNtcF9vZmZzZXQ7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0b2ZmO1xuIFx0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NlwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuJiM0MztcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QdjZcJiMzNDspO1xuIH1cbiAjZW5kaWZcbkBAIC0xMDMzLDM2ICYjNDM7MTAyMiw0MSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gICovXG4gc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXG4tXHRcdFx0XHRfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiYjNDM7XHRpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XG4mIzQzO1x0XHRjdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7XG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTtcbiYjNDM7XHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFx0ZWxzZVxuICNlbmRpZlxuLVx0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTAsOSAmIzQzOzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4mIzQzO1x0XHRcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTEwNywxNyAmIzQzOzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuJiM0MztcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXB2c2gpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4mIzQzO1x0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcJiMzNDtPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCYjMzQ7LFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4mIzQzO1x0XHQgIFx1MDAyNmlwdnNoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcHZzaC1cdTAwM2VkYWRkci5pcCk7XG4gXG4gXHQvKlxuIFx0ICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy5cbkBAIC0xMTM2LDcgJiM0MzsxMTMyLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4mIzQzO1x0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuIFxuIFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQ0LDggJiM0MzsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuJiM0MztcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTE1OSw5ICYjNDM7MTE1NCw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuJiM0MztcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbiYjNDM7XHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyAmIzQzOzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxMCw2ICYjNDM7MTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiYjNDM7XHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiBcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXIgKi9cbiBcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxuIFx0XHRcdCAgICAgaXB2cywgQUZfSU5FVDYsIHNrYiwgXHUwMDI2Y2lwaCk7XG5AQCAtMTIxNyw5ICYjNDM7MTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0xNTQ1LDcgJiM0MzsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuJiM0MztcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMTc1Myw5ICYjNDM7MTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NjUsNyAmIzQzOzE3NjIsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XG4gXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuLVx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuJiM0MztcdGNoYXIgKm91dGVyX3Byb3RvIF9fbWF5YmVfdW51c2VkID0gXCYjMzQ7SVBJUFwmIzM0OztcbiBcdHVuc2lnbmVkIGludCBobGVuX2lwaXA7XG4gXHRpbnQgdWxlbiA9IDA7XG4gXG5AQCAtMTc3NSwxNyAmIzQzOzE3NzIsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4mIzQzO1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcGgpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcGgtXHUwMDNlbGVuO1xuJiM0MztcdG9mZnNldCA9IGlwaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwmIzM0O0luY29taW5nIElDTVAgKCVkLCVkKSAlcEk0LVx1MDAzZSVwSTRcXG5cJiMzNDssXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbiYjNDM7XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTg2Nyw4ICYjNDM7MTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTE4NzYsNyAmIzQzOzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4gXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxuIFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cbkBAIC0xODk4LDEwICYjNDM7MTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cJiMzNDssXG4tXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NjksMTAgJiM0MzsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDMyLDggJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbi1cdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xuLVx0aWYgKGNpcGguZnJhZ29mZnMpXG4mIzQzO1x0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuJiM0MztcdGlmIChjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTIwNTcsMjMgJiM0MzsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV3X2NwID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xuLVx0aWYgKChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4tXHRcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XG4mIzQzO1x0dmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuJiM0MztcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuJiM0MztcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuJiM0MztcdFx0SVBfVlNfREJHKDEsIFwmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbi1cdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXG4tXHRvZmZzZXQgPSBjaXBoLmxlbjtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbi1cbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMTUyLDcgJiM0MzsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMjIwMCw4ICYjNDM7MjE5NCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxuIFx0XHR9XG4gXG4gXHRcdGlmIChyZXNjaGVkKSB7XG4tXHRcdFx0aWYgKCFvbGRfY3QpXG4mIzQzO1x0XHRcdGlmICghb2xkX2N0KSB7XG4mIzQzO1x0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuIFx0XHRcdFx0Y3AtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX05GQ1Q7XG4mIzQzO1x0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNwLVx1MDAzZW5fY29udHJvbCkpXG4gXHRcdFx0XHRpcF92c19jb25uX2V4cGlyZV9ub3coY3ApO1xuIFx0XHRcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xuQEAgLTIyMTcsOCAmIzQzOzIyMTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHN5c2N0bF9leHBpcmVfbm9kZXN0X2Nvbm4oaXB2cykpIHtcbiBcdFx0XHRib29sIG9sZF9jdCA9IGlwX3ZzX2Nvbm5fdXNlc19vbGRfY29ubnRyYWNrKGNwLCBza2IpO1xuIFxuLVx0XHRcdGlmICghb2xkX2N0KVxuJiM0MztcdFx0XHRpZiAoIW9sZF9jdCkge1xuJiM0MztcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9ORkNUO1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aXBfdnNfY29ubl9leHBpcmVfbm93KGNwKTtcbiBcdFx0XHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbkBAIC0yMjg4LDYgJiM0MzsyMjg4LDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4mIzQzO1x0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xuIFx0aW50IHI7XG4gXG4gXHQvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovXG5AQCAtMjI5NywxMCAmIzQzOzIyOTgsOSBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChzdGF0ZS1cdTAwM2VwZiA9PSBORlBST1RPX0lQVjQpIHtcbiBcdFx0aWYgKGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgJiM0MzsyMzEwLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gI2VuZGlmXG4gXHR9XG4gXG4tXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2spO1xuJiM0MztcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vaywgXHUwMDI2aXBoZHIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGlwX3ZzX29wczRbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuY1xuQEAgLTExLDcgJiM0MzsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmO1xuJiM0MztcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2Vzb3VyY2UgIT0gY3AtXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTU3LDcgJiM0MzsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHNjdHBob2ZmKSlcbiYjNDM7XHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgc2N0cGhvZmY7XG4mIzQzO1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZWRlc3QgIT0gY3AtXHUwMDNlZHBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XG5AQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZilcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXHUwMDNlbGVuO1xuIFx0c3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0X19sZTMyIGNtcCwgdmFsO1xuIFxuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZik7XG4gXHRjbXAgPSBzaC1cdTAwM2VjaGVja3N1bTtcbiBcdHZhbCA9IHNjdHBfY29tcHV0ZV9ja3N1bShza2IsIHNjdHBob2ZmKTtcbiBcbiBcdGlmICh2YWwgIT0gY21wKSB7XG4gXHRcdC8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqL1xuLVx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbmluZGV4IGY4NmI3NjNlZmNjNGRjLi45OWEyODZmZGM5MGM2NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcbiYjNDM7XHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICYjNDM7MTY2LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjtcbiYjNDM7XHR0Y3BoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbiYjNDM7XHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjYwLDcgJiM0MzsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7XG4mIzQzO1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0Y2FzZSBDSEVDS1NVTV9OT05FOlxuLVx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLCAwKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxuLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuLVx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fVENQLCBhZikpIHtcbiYjNDM7XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgJiM0MzsyNSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdWRwaG9mZik7XG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTUsNyAmIzQzOzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuJiM0MztcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dWRwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdWRwaG9mZjtcbiYjNDM7XHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyB1ZHBob2ZmO1xuIFx0dWRwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qXG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbiYjNDM7XHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMjU0LDcgJiM0MzsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHVkcGhvZmY7XG4mIzQzO1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0yOTgsNDggJiM0MzsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbiBcdHN0cnVjdCB1ZHBoZHIgX3VkcGgsICp1aDtcbiBcbi1cdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdWRwaG9mZiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuJiM0MztcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVx1MDAzZWxlbiwgc2l6ZW9mKF91ZHBoKSwgXHUwMDI2X3VkcGgpO1xuIFx0aWYgKHVoID09IE5VTEwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHVoLVx1MDAzZWNoZWNrICE9IDApIHtcbi1cdFx0c3dpdGNoIChza2ItXHUwMDNlaXBfc3VtbWVkKSB7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0XHRza2ItXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLCAwKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0XHRpZiAoYWYgPT0gQUZfSU5FVDYpIHtcbi1cdFx0XHRcdGlmIChjc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbi1cdFx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHVkcGhvZmYsXG4tXHRcdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRpZiAoIXVoLVx1MDAzZWNoZWNrKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5pbmRleCA5ZmVmNDMzNWRhMTNmZC4uMGIwYzUzMDQ5OTNhOTEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXG5AQCAtMTUwMiwyMCAmIzQzOzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiBcdHN0cnVjdCBydGFibGVcdCpydDtcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG4gXHRpbnQgcmM7XG4gXHRpbnQgbG9jYWw7XG4gXHRpbnQgcnRfbW9kZSwgd2FzX2lucHV0O1xuJiM0MztcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdsZW47XG4gXG4gXHQvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlXG4gXHQgICBmb3J3YXJkZWQgZGlyZWN0bHkgaGVyZSwgYmVjYXVzZSB0aGVyZSBpcyBubyBuZWVkIHRvXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcbiYjNDM7XHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTUzMyw3ICYjNDM7MTUzNSw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuJiM0MztcdFx0XHRcdCAgIE5VTEwsIGNpcGgpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBza2JfcnRhYmxlKHNrYik7XG5AQCAtMTU2NCwxNCAmIzQzOzE1NjYsMjEgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4mIzQzO1x0aWYgKGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxuJiM0MztcdCAgICBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xuJiM0MztcdFx0d2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4mIzQzO1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDApO1xuJiM0MztcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsMTAgJiM0MzsxNTk2LDEyIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gaW50XG4gaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXB2c2gpXG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuJiM0MztcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4gXHRzdHJ1Y3QgcnQ2X2luZm9cdCpydDtcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IHdsZW47XG4gXHRpbnQgcmM7XG4gXHRpbnQgbG9jYWw7XG4gXHRpbnQgcnRfbW9kZTtcbkBAIC0xNjAwLDcgJiM0MzsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7XG4mIzQzO1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE2MTcsNyAmIzQzOzE2MjgsNyBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIElQX1ZTX1JUX01PREVfTE9DQUwgfCBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8XG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9SRFIgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTDtcbiBcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLVx1MDAzZWlwdnMsIGNwLVx1MDAzZWFmLCBza2IsIGNwLVx1MDAzZWRlc3QsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTtcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcbkBAIC0xNjQ4LDE0ICYjNDM7MTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0fVxuIFxuJiM0MztcdHdsZW4gPSBjaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XG4mIzQzO1x0XHR3bGVuICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbiYjNDM7XHRcdGhhc19wb3J0cyA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKHNrYl9jb3coc2tiLCBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4tXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7XG4mIzQzO1x0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXG4gXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xuIFx0c2tiLVx1MDAzZWlnbm9yZV9kZiA9IDE7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuaW5kZXggN2FlNjhkNjA1ODZhMjMuLjhhM2I5ZTMzZTk0Zjc3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG5AQCAtNDI3LDcgJiM0Mzs0MjcsNiBAQCBzdGF0aWMgdm9pZCBuZl9jdF9leHBlY3RfaW5zZXJ0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsXG4gXHRcdGV4cC1cdTAwM2V0aW1lb3V0ICYjNDM7PSBoZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtleHAtXHUwMDNlY2xhc3NdLnRpbWVvdXQgKiBIWjtcbiBcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZleHAtXHUwMDNlbG5vZGUsIFx1MDAyNm1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGF0aW9ucyk7XG4tXHRtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwLVx1MDAzZWNsYXNzXSYjNDM7JiM0Mzs7XG4gXG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZXhwLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtoXSk7XG4gXHRjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG5AQCAtNTM0LDYgJiM0Mzs1MzMsNyBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSYjNDM7JiM0Mzs7XG4gXHRuZl9jdF9leHBlY3RfaW5zZXJ0KGV4cGVjdCwgbWFzdGVyX2hlbHApO1xuIFxuIFx0bmZfY3RfZXhwZWN0X2V2ZW50X3JlcG9ydChJUEVYUF9ORVcsIGV4cGVjdCwgcG9ydGlkLCByZXBvcnQpO1xuQEAgLTU0Niw2ICYjNDM7NTQ2LDM5IEBAIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KTtcbiBcbiYjNDM7aW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscDtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiYjNDM7XHRtYXN0ZXJfaGVscCA9IG5mY3RfaGVscChleHBlY3RbMF0tXHUwMDNlbWFzdGVyKTtcbiYjNDM7XHRpZiAoIW1hc3Rlcl9oZWxwIHx8IG1hc3Rlcl9oZWxwICE9IG5mY3RfaGVscChleHBlY3RbMV0tXHUwMDNlbWFzdGVyKSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IF9fbmZfY3RfZXhwZWN0X2NoZWNrKGV4cGVjdFtpXSwgbWFzdGVyX2hlbHAsIGZsYWdzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGkgPT0gMSlcbiYjNDM7XHRcdFx0XHRtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0WzBdLVx1MDAzZWNsYXNzXS0tO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHBlY3RbaV0tXHUwMDNlY2xhc3NdJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRuZl9jdF9leHBlY3RfaW5zZXJ0KGV4cGVjdFtpXSwgbWFzdGVyX2hlbHApO1xuJiM0MztcdFx0bmZfY3RfZXhwZWN0X2V2ZW50X3JlcG9ydChJUEVYUF9ORVcsIGV4cGVjdFtpXSwgMCwgMCk7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIpO1xuJiM0MztcbiB2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3koYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcbiBcdFx0XHRcdCAgdm9pZCAqZGF0YSlcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuaW5kZXggZjNmOTBhODY2MzM4OTQuLmU0YTcwZDFkNzdiMGI5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5AQCAtMTY2Myw3ICYjNDM7MTY2Myw3IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0dW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjtcbiBcdHVuc2lnbmVkIGludCBtc2dsZW4sIG9yaWdsZW47XG4gXHRjb25zdCBjaGFyICpkcHRyLCAqZW5kO1xuLVx0czE2IGRpZmYsIHRkaWZmID0gMDtcbiYjNDM7XHRzMzIgZGlmZiwgdGRpZmYgPSAwO1xuIFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcbiBcdHVuc2lnbmVkIGxvbmcgY2xlbjtcbiBcdGJvb2wgdGVybTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jXG5pbmRleCBhZWEwMmY2YWZmMDkyYS4uMTMzYmQ3MTNmZTBjMjkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcbkBAIC0zMjEsNyAmIzQzOzMyMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NpcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZfbmF0X3NpcF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLVx0XHRcdFx0ICBzMTYgb2ZmKVxuJiM0MztcdFx0XHRcdCAgczMyIG9mZilcbiB7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsIFx1MDAyNmN0aW5mbyk7XG5AQCAtNTkyLDYgJiM0Mzs1OTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX25hdF9zZHBfbWVkaWEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtZWRpYWxlbixcbiBcdFx0XHRcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpydHBfYWRkcilcbiB7XG4mIzQzO1x0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9wYWlyWzJdID0geyBydHBfZXhwLCBydGNwX2V4cCB9O1xuIFx0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87XG4gXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCBcdTAwMjZjdGluZm8pO1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbkBAIC02MjIsMjQgJiM0Mzs2MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRydHBfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCk7XG4tXHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsXG4tXHRcdFx0XHRcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHBvcnQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCAmIzQzOyAxKTtcbi1cdFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsXG4tXHRcdFx0XHRcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHJ0cF9wYWlyLFxuJiM0MztcdFx0XHRcdFx0XHRORl9DVF9FWFBfRl9TS0lQX01BU1RFUik7XG4gXHRcdGlmIChyZXQgPT0gMClcbiBcdFx0XHRicmVhaztcbi1cdFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xuLVx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4mIzQzO1x0XHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4mIzQzO1x0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRwb3J0ID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGE5ZWFmOTQ1NWM3NzgzLi5hZjM1N2Y2YzUwNzBiMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTQ1LDggJiM0Mzs0NSw2IEBAIGVudW0ge1xuIFx0TkZUX1ZBTElEQVRFX0RPLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCByaGx0YWJsZSBuZnRfb2JqbmFtZV9odDtcbi1cbiBzdGF0aWMgdTMyIG5mdF9jaGFpbl9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTtcbiBzdGF0aWMgdTMyIG5mdF9jaGFpbl9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCk7XG4gc3RhdGljIGludCBuZnRfY2hhaW5faGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKiwgY29uc3Qgdm9pZCAqKTtcbkBAIC0xNjM1LDYgJiM0MzsxNjMzLDEwIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jaGFpbl9odDtcbiBcbiYjNDM7XHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQsIFx1MDAyNm5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX29ial9odDtcbiYjNDM7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlc2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VvYmplY3RzKTtcbkBAIC0xNjUzLDYgJiM0MzsxNjU1LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3dGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnRhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNm5mdF9uZXQtXHUwMDNldGFibGVzKTtcbiBcdHJldHVybiAwO1xuIGVycl90cmFuczpcbiYjNDM7XHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQpO1xuJiM0MztlcnJfb2JqX2h0OlxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnNfaHQpO1xuIGVycl9jaGFpbl9odDpcbiBcdGtmcmVlKHRhYmxlLVx1MDAzZXVkYXRhKTtcbkBAIC0xODE5LDYgJiM0MzsxODIzLDcgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX3RhYmxlX2Rlc3Ryb3koc3RydWN0IG5mdF90YWJsZSAqdGFibGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJobHRhYmxlX2Rlc3Ryb3koXHUwMDI2dGFibGUtXHUwMDNlY2hhaW5zX2h0KTtcbiYjNDM7XHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQpO1xuIFx0a2ZyZWUodGFibGUtXHUwMDNlbmFtZSk7XG4gXHRrZnJlZSh0YWJsZS1cdTAwM2V1ZGF0YSk7XG4gXHRrZnJlZSh0YWJsZSk7XG5AQCAtODA4Niw3ICYjNDM7ODA5MSw3IEBAIHZvaWQgbmZ0X3VucmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7XG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCB1MzIgb2JqdHlwZSxcbiBcdFx0XHRcdCAgdTggZ2VubWFzaylcbiB7XG5AQCAtODEwMiw3ICYjNDM7ODEwNyw3IEBAIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAgICAgIWxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChuZXQpKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3QgPSByaGx0YWJsZV9sb29rdXAoXHUwMDI2bmZ0X29iam5hbWVfaHQsIFx1MDAyNmssIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4mIzQzO1x0bGlzdCA9IHJobHRhYmxlX2xvb2t1cChcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuIFx0aWYgKCFsaXN0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC04MzgyLDcgJiM0Mzs4Mzg3LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3b2JqKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl90cmFucztcbiBcbi1cdGVyciA9IHJobHRhYmxlX2luc2VydChcdTAwMjZuZnRfb2JqbmFtZV9odCwgXHUwMDI2b2JqLVx1MDAzZXJobGhlYWQsXG4mIzQzO1x0ZXJyID0gcmhsdGFibGVfaW5zZXJ0KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQsIFx1MDAyNm9iai1cdTAwM2VyaGxoZWFkLFxuIFx0XHRcdCAgICAgIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9vYmpfaHQ7XG5AQCAtODU2Nyw4ICYjNDM7ODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBpbmZvLVx1MDAzZWV4dGFjaztcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIoaW5mby1cdTAwM2VuZXQpO1xuIFx0dTggZmFtaWx5ID0gaW5mby1cdTAwM2VuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4tXHRjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmV0O1xuJiM0MztcdHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlO1xuIFx0c3RydWN0IG5mdF9vYmplY3QgKm9iajtcbiBcdHN0cnVjdCBza19idWZmICpza2IyO1xuIFx0dTMyIG9ianR5cGU7XG5AQCAtMTA0MzcsOSAmIzQzOzEwNDQyLDkgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9jaGFpbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxuIFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiYjNDM7c3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF90YWJsZSAqdGFibGUsIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4ge1xuLVx0cmhsdGFibGVfcmVtb3ZlKFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCwgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcbiYjNDM7XHRyaGx0YWJsZV9yZW1vdmUoXHUwMDI2dGFibGUtXHUwMDNlb2JqbmFtZV9odCwgXHUwMDI2b2JqLVx1MDAzZXJobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4gXHRsaXN0X2RlbF9yY3UoXHUwMDI2b2JqLVx1MDAzZWxpc3QpO1xuIH1cbiBcbkBAIC0xMTEyNCw3ICYjNDM7MTExMjksNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMT0JKOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWU9CSjpcbi1cdFx0XHRuZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4mIzQzO1x0XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4gXHRcdFx0bmZfdGFibGVzX29ial9ub3RpZnkoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfb2JqKHRyYW5zKSxcbiBcdFx0XHRcdFx0ICAgICB0cmFucy1cdTAwM2Vtc2dfdHlwZSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTE0MTYsNyAmIzQzOzExNDIxLDcgQEAgc3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxuIFx0XHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRuZnRfdXNlX2RlY19yZXN0b3JlKFx1MDAyNnRhYmxlLVx1MDAzZXVzZSk7XG4tXHRcdFx0XHRuZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4mIzQzO1x0XHRcdFx0bmZ0X29ial9kZWwodGFibGUsIG5mdF90cmFuc19vYmoodHJhbnMpKTtcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxPQko6XG5AQCAtMTIwNDMsNyAmIzQzOzEyMDQ4LDcgQEAgc3RhdGljIHZvaWQgX19uZnRfcmVsZWFzZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuIFx0XHRuZnRfc2V0X2Rlc3Ryb3koXHUwMDI2Y3R4LCBzZXQpO1xuIFx0fVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmUsIFx1MDAyNnRhYmxlLVx1MDAzZW9iamVjdHMsIGxpc3QpIHtcbi1cdFx0bmZ0X29ial9kZWwob2JqKTtcbiYjNDM7XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBvYmopO1xuIFx0XHRuZnRfdXNlX2RlYyhcdTAwMjZ0YWJsZS1cdTAwM2V1c2UpO1xuIFx0XHRuZnRfb2JqX2Rlc3Ryb3koXHUwMDI2Y3R4LCBvYmopO1xuIFx0fVxuQEAgLTEyMjI1LDEwICYjNDM7MTIyMzAsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl90YWJsZXNfbW9kdWxlX2luaXQodm9pZClcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX25ldGRldl9ub3RpZmllcjtcbiBcbi1cdGVyciA9IHJobHRhYmxlX2luaXQoXHUwMDI2bmZ0X29iam5hbWVfaHQsIFx1MDAyNm5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4tXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yaHRfb2JqbmFtZTtcbi1cbiBcdGVyciA9IG5mdF9vZmZsb2FkX2luaXQoKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX29mZmxvYWQ7XG5AQCAtMTIyNTEsOCAmIzQzOzEyMjUyLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpXG4gZXJyX25ldGxpbmtfbm90aWZpZXI6XG4gXHRuZnRfb2ZmbG9hZF9leGl0KCk7XG4gZXJyX29mZmxvYWQ6XG4tXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm5mdF9vYmpuYW1lX2h0KTtcbi1lcnJfcmh0X29iam5hbWU6XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZuZl90YWJsZXNfZmxvd3RhYmxlX25vdGlmaWVyKTtcbiBlcnJfbmV0ZGV2X25vdGlmaWVyOlxuIFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcbkBAIC0xMjI3NCw3ICYjNDM7MTIyNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfdGFibGVzX21vZHVsZV9leGl0KHZvaWQpXG4gXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2bmZfdGFibGVzX25ldF9vcHMpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ0cmFuc19nY193b3JrKTtcbiBcdHJjdV9iYXJyaWVyKCk7XG4tXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm5mdF9vYmpuYW1lX2h0KTtcbiBcdG5mX3RhYmxlc19jb3JlX21vZHVsZV9leGl0KCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggMzkxNTM5YTFjZWFhNzcuLjhhNDQ3MmZkNzdkOWYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yNTksOSAmIzQzOzI1OSw3IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG4gXHRcdFx0XHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgcmVtYWluZGVyLCBkZWx0YSwgaztcbiBcdHN0cnVjdCBuZnRfZGF0YSBtYXNrID0ge307XG4tXHRfX2JlMzIgcmVtYWluZGVyX21hc2s7XG4gXG4gXHRpZiAocHJpdl9sZW4gPT0gZmllbGRfbGVuKSB7XG4gXHRcdG1lbXNldChcdTAwMjZyZWctXHUwMDNlbWFzaywgMHhmZiwgcHJpdl9sZW4pO1xuQEAgLTI3MCwxNSAmIzQzOzI2OCw3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdG1lbXNldChcdTAwMjZtYXNrLCAweGZmLCBmaWVsZF9sZW4pO1xuLVx0cmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTtcbi1cdGlmIChyZW1haW5kZXIpIHtcbi1cdFx0ayA9IHByaXZfbGVuIC8gc2l6ZW9mKHUzMik7XG4tXHRcdGRlbHRhID0gZmllbGRfbGVuIC0gcHJpdl9sZW47XG4tXHRcdHJlbWFpbmRlcl9tYXNrID0gaHRvbmwofigoMSBcdTAwM2NcdTAwM2MgKGRlbHRhICogQklUU19QRVJfQllURSkpIC0gMSkpO1xuLVx0XHRtYXNrLmRhdGFba10gPSAoX19mb3JjZSB1MzIpcmVtYWluZGVyX21hc2s7XG4tXHR9XG4tXG4mIzQzO1x0bWVtc2V0KFx1MDAyNm1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcbiBcdG1lbWNweShcdTAwMjZyZWctXHUwMDNlbWFzaywgXHUwMDI2bWFzaywgZmllbGRfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG5pbmRleCAyNzA0YjRiNjBkMWUwNC4uOWFmMGZhODk1ZjczMDIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSB7XG4gXHRyZWZjb3VudF90IHVzZTtcbiBcdHVfaW50OF90IGZhbWlseTtcbiBcdGJvb2wgcm5kX2luaXRpYWxpemVkO1xuJiM0MztcdGJvb2wgcmF0ZW1hdGNoO1xuIFxuIFx0c3RydWN0IGhhc2hsaW1pdF9jZmczIGNmZztcdC8qIGNvbmZpZyAqL1xuIFxuQEAgLTMyMyw2ICYjNDM7MzI0LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXG4gXHRcdGt2ZnJlZShoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuJiM0MztcdGhpbmZvLVx1MDAzZXJhdGVtYXRjaCA9ICEhKGNmZy1cdTAwM2Vtb2RlIFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZoaW5mby1cdTAwM2Vsb2NrKTtcbiBcbiBcdHN3aXRjaCAocmV2aXNpb24pIHtcbkBAIC04NzIsNyAmIzQzOzg3NCwxMCBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovXG4tXHRpZiAocmV2aXNpb24gXHUwMDNlPSAzIFx1MDAyNlx1MDAyNiBjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZW1vZGUgXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIKSB7XG4mIzQzO1x0XHRpZiAocmV2aXNpb24gXHUwMDNjIDMpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdFx0aWYgKGNmZy1cdTAwM2VhdmcgPT0gMCB8fCBjZmctXHUwMDNlYXZnIFx1MDAzZSBVMzJfTUFYKSB7XG4gXHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtpbnZhbGlkIHJhdGVcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuQEAgLTkwNSw2ICYjNDM7OTEwLDE1IEBAIHN0YXRpYyBpbnQgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aGFzaGxpbWl0X211dGV4KTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICgoY2ZnLVx1MDAzZW1vZGUgXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAhKCpoaW5mbyktXHUwMDNlcmF0ZW1hdGNoKSB8fFxuJiM0MztcdFx0ICAgICghKGNmZy1cdTAwM2Vtb2RlIFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgICAoKmhpbmZvKS1cdTAwM2VyYXRlbWF0Y2gpKSB7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xuJiM0MztcdFx0XHRodGFibGVfcHV0KCpoaW5mbyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhhc2hsaW1pdF9tdXRleCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5pbmRleCBmYjFjNTlkNDU1NjdhZi4uNDQ5YzUxOGJkOTQ3ZGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTYxNyw3ICYjNDM7NjE3LDExIEBAIGlwIC02IC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6Mzo6MVxuIGlwIC1uZXQgXCYjMzQ7JG5zMlwmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4yLjFcbiBpcCAtNiAtbmV0IFwmIzM0OyRuczJcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGRlYWQ6Mjo6MVxuIFxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4mIzQzO1x0JiMzOTttZXRhIG9pZiB0dW4wIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5O1xuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4mIzQzO1x0JiMzOTttZXRhIG9pZiB0dW42IHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuNiBhY2NlcHQmIzM5O1xuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbiBcdCYjMzk7bWV0YSBvaWYgXCYjMzQ7dmV0aDBcJiMzNDsgdGNwIHNwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfcmVwbCBhY2NlcHQmIzM5O1xuQEAgLTYyOSw3ICYjNDM7NjMzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSBcJiMzNDtJUElQIHR1bm5lbFwmIzM0OzsgdGhlblxuIGZpXG4gXG4gaWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSA2IFwmIzM0O1tkZWFkOjI6Ojk5XVwmIzM0OyAxMjM0NTsgdGhlblxuLVx0ZWNobyBcJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbFwmIzM0O1xuJiM0MztcdGNoZWNrX2NvdW50ZXJzIFwmIzM0O2Zsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsXCYjMzQ7XG4gZWxzZVxuIFx0ZWNobyBcJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4gXHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXRcbkBAIC02NDIsNiAmIzQzOzY0Niw4IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdmV0aDEuMTAgdXBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjAuMS8yNCBkZXYgdmV0aDEuMTBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGFkZHIgYWRkIGZlZTE6NDo6MS82NCBkZXYgdmV0aDEuMTAgbm9kYWRcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4mIzQzO2lwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbiYjNDM7XHQmIzM5O21ldGEgb2lmIHZldGgxLjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdmV0aDEuMTAgYWNjZXB0JiMzOTtcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuMC4xMCB0eXBlIGlwaXAgbG9jYWwgMTkyLjE2OC4yMC4xIHJlbW90ZSAxOTIuMTY4LjIwLjJcbkBAIC02NDksNiAmIzQzOzY1NSw4IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdHVuMC4xMCB1cFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgMTkyLjE2OC4yMDAuMS8yNCBkZXYgdHVuMC4xMFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjAwLjJcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnR1bjAvMTAuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuJiM0MztcdCYjMzk7bWV0YSBvaWYgdHVuMC4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCYjMzk7XG4gaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAmIzM5O21ldGEgb2lmIHR1bjAuMTAgYWNjZXB0JiMzOTtcbiBcbiBpcCAtbmV0IFwmIzM0OyRuc3IxXCYjMzQ7IGxpbmsgYWRkIG5hbWUgdHVuNi4xMCB0eXBlIGlwNnRubCBsb2NhbCBmZWUxOjQ6OjEgcmVtb3RlIGZlZTE6NDo6MiBlbmNhcGxpbWl0IG5vbmVcbkBAIC02NTYsNiAmIzQzOzY2NCw4IEBAIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgbGluayBzZXQgdHVuNi4xMCB1cFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgYWRkciBhZGQgZmVlMTo1OjoxLzY0IGRldiB0dW42LjEwIG5vZGFkXG4gaXAgLTYgLW5ldCBcJiMzNDskbnNyMVwmIzM0OyByb3V0ZSBkZWxldGUgZGVmYXVsdFxuIGlwIC02IC1uZXQgXCYjMzQ7JG5zcjFcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MlxuJiM0MztpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4mIzQzO1x0JiMzOTttZXRhIG9pZiB0dW42LjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTtcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuNi4xMCBhY2NlcHQmIzM5O1xuIFxuIGlwIC1uZXQgXCYjMzQ7JG5zcjJcJiMzNDsgbGluayBhZGQgbGluayB2ZXRoMCBuYW1lIHZldGgwLjEwIHR5cGUgdmxhbiBpZCAxMFxuQEAgLTY4Myw3ICYjNDM7NjkzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcJiMzNDskbnMxXCYjMzQ7IFwmIzM0OyRuczJcJiMzNDsgMSBcJiMzNDtJUElQIHR1bm5lbCBvdmVyIHZsYW5cJiMzNDs7IHRoZW5cbiBmaVxuIFxuIGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCYjMzQ7JG5zMVwmIzM0OyBcJiMzNDskbnMyXCYjMzQ7IDEgNiBcJiMzNDtbZGVhZDoyOjo5OV1cJiMzNDsgMTIzNDU7IHRoZW5cbi1cdGVjaG8gXCYjMzQ7UEFTUzogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIElQNklQNiB0dW5uZWwgb3ZlciB2bGFuXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfY291bnRlcnMgXCYjMzQ7ZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIElQNklQNiB0dW5uZWwgb3ZlciB2bGFuXCYjMzQ7XG4gZWxzZVxuIFx0ZWNobyBcJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsIG92ZXIgdmxhblwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuIFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgbGlzdCBydWxlc2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfTkFUX1NJUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9OQVRfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19uYXRfaWNtcF92NiYjMzQ7LAogICAgJiMzNDtpcF92c19vdXRfaWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7c2N0cF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O25mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXImIzM0OywKICAgICYjMzQ7bmF0X3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mX25hdF9zZHBfbWVkaWEmIzM0OywKICAgICYjMzQ7bmZ0X29ial9sb29rdXAmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdvYmomIzM0OywKICAgICYjMzQ7bmZ0X29ial9kZWwmIzM0OywKICAgICYjMzQ7aGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG11bHRpcGxlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMsIGluY2x1ZGluZyBJUFZTIGNvbm5lY3Rpb24gaGFuZGxpbmcgYW5kIElDTVAvY2hlY2tzdW0gcHJvY2Vzc2luZywgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGhhbmRsaW5nIGZvciBTSVAgYW5kIEguMzIzLCBuZl90YWJsZXMgb2JqZWN0IGxvb2t1cCBtZWNoYW5pc21zLCBhbmQgeHRfaGFzaGxpbWl0IG1hdGNoaW5nLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MWQ0OTQyYjg0YjViMmJmMWFjNzI4MGNmOWUxMDJlMjBkYTQ0NWYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMjM6Mzc6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgKaW5kZXggZGJjNjE0ZGZlMGQ1NjUuLmFhZmEwYzA0ZjkxN2ViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oCkBAIC0xMTUsNyAmIzQzOzExNSw3IEBAIHN0cnVjdCBuZl9uYXRfc2lwX2hvb2tzIHsKIAkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pOwogCiAJdm9pZCAoKnNlcV9hZGp1c3QpKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgczE2IG9mZik7CiYjNDM7CQkJICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMzMiBvZmYpOwogCiAJdW5zaWduZWQgaW50ICgqZXhwZWN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTI1LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyLmgmZ3Q7CQkvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovCiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CQkJLyogZm9yIHN0cnVjdCBpcHY2aGRyICovCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9yb3V0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcDZfZmliLmgmZ3Q7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKQogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgmZ3Q7CiAjZW5kaWYKQEAgLTE5NzIsOCAmIzQzOzE5NzQsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQkgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQkgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwKLQkJICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiYjNDM7CQkgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtMTk4Niw4ICYjNDM7MTk4OCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCSAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LAotCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMjA1OSwxNSAmIzQzOzIwNjEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcCkKIH0KIAogdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTsKJiM0MzsJCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgIGJvb2wgaGFzX3BvcnRzKTsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpOwomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7CiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTsKLQogc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSkKIHsKIAlfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07CkBAIC0yMDkzLDYgJiM0MzsyMDk1LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pCiAJcmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZikKJiM0Mzt7CiYjNDM7CS8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqLwomIzQzOwlpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJLyogTE9DQUxfT1VUID8gKi8KJiM0MzsJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0xPT1BCQUNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi8KJiM0MzsJaWYgKGFmID09IEFGX0lORVQ2KSB7CiYjNDM7CQlpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS0mZ3Q7cnQ2aV9mbGFncyAmYW1wOyBSVEZfTE9DQUwpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKQomIzQzO3sKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9uZWVkZWQoc2tiLCBhZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTsKJiM0Mzt9CiYjNDM7CiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaAppbmRleCBjMDI0MzQ1YzliZDg2Mi4uMjZkNmJhYmQ5MmZjZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaApAQCAtMTYxLDYgJiM0MzsxNjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LAogCXJldHVybiBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoZXhwZWN0LCAwLCAwLCBmbGFncyk7CiB9CiAKJiM0MztpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0W10sCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50IGZsYWcpOwomIzQzOwogc3RydWN0IG5mX2Nvbm5faGVscDsKIHZvaWQgbmZfY3RfZXhwZWN0YXRpb25fZ2Moc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKaW5kZXggOWQ4NDQzNTRjNGQ5NTYuLjNiZTYxMjE0NWMxMzBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC0xMjk0LDYgJiM0MzsxMjk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5mdF91c2VfaW5jX3Jlc3RvcmUodTMyICp1c2UpCiAgKglAc2V0czogc2V0cyBpbiB0aGUgdGFibGUKICAqCUBvYmplY3RzOiBzdGF0ZWZ1bCBvYmplY3RzIGluIHRoZSB0YWJsZQogICoJQGZsb3d0YWJsZXM6IGZsb3cgdGFibGVzIGluIHRoZSB0YWJsZQomIzQzOyAqCUBvYmpuYW1lX2h0OiBoYXNodGFibGUgZm9yIG9iamVjdHMgbG9va3VwIGJ5IG5hbWUKICAqCUBoZ2VuZXJhdG9yOiBoYW5kbGUgZ2VuZXJhdG9yIHN0YXRlCiAgKglAaGFuZGxlOiB0YWJsZSBoYW5kbGUKICAqCUB1c2U6IG51bWJlciBvZiBjaGFpbiByZWZlcmVuY2VzIHRvIHRoaXMgdGFibGUKQEAgLTEzMTMsNiAmIzQzOzEzMTQsNyBAQCBzdHJ1Y3QgbmZ0X3RhYmxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzZXRzOwogCXN0cnVjdCBsaXN0X2hlYWQJCW9iamVjdHM7CiAJc3RydWN0IGxpc3RfaGVhZAkJZmxvd3RhYmxlczsKJiM0MzsJc3RydWN0IHJobHRhYmxlCQkJb2JqbmFtZV9odDsKIAl1NjQJCQkJaGdlbmVyYXRvcjsKIAl1NjQJCQkJaGFuZGxlOwogCXUzMgkJCQl1c2U7CkBAIC0xNDAwLDcgJiM0MzsxNDAyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpuZnRfb2JqX2RhdGEoY29uc3Qgc3RydWN0IG5mdF9vYmplY3QgKm9iaikKICNkZWZpbmUgbmZ0X2V4cHJfb2JqKGV4cHIpCSooKHN0cnVjdCBuZnRfb2JqZWN0ICoqKW5mdF9leHByX3ByaXYoZXhwcikpCiAKIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIG9ianR5cGUsCiAJCQkJICB1OCBnZW5tYXNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuYwppbmRleCAxODNlOGEzZmYyYmFiZC4uNmJjZDY3MzQ3NjliNTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jCkBAIC0xODIsNiAmIzQzOzE4Miw3IEBAIHN0YXRpYyBpbnQgbmF0X3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLAogCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwKQogewomIzQzOwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07CiAJc3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyICppbmZvID0gbmZjdF9oZWxwX2RhdGEoY3QpOwogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJaW50IGk7CkBAIC0yMjcsMjIgJiM0MzsyMjgsMTMgQEAgc3RhdGljIGludCBuYXRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQlpbnQgcmV0OwogCiAJCXJ0cF9leHAtJmd0O3R1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7Ci0JCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsIDApOwomIzQzOwkJcnRjcF9leHAtJmd0O3R1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCAmIzQzOyAxKTsKJiM0MzsJCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsIDApOwogCQlpZiAocmV0ID09IDApIHsKLQkJCXJ0Y3BfZXhwLSZndDt0dXBsZS5kc3QudS51ZHAucG9ydCA9Ci0JCQkgICAgaHRvbnMobmF0ZWRfcG9ydCAmIzQzOyAxKTsKLQkJCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwLCAwKTsKLQkJCWlmIChyZXQgPT0gMCkKLQkJCQlicmVhazsKLQkJCWVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHsKLQkJCQluZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmIChyZXQgJmx0OyAwKSB7Ci0JCQkJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTsKLQkJCQluYXRlZF9wb3J0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIGlmIChyZXQgIT0gLUVCVVNZKSB7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9IGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0gZWxzZSBpZiAocmV0ICZsdDsgMCkgewogCQkJbmF0ZWRfcG9ydCA9IDA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKaW5kZXggODIzMTMxN2IwZjFmNGIuLmIyZDc3OTczMjcyZDI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKQEAgLTEwMDUsNyAmIzQzOzEwMDUsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCwKICNlbmRpZgogCWlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpCiAJCWlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoZGF0YSwgc2V0KSwgZXh0KTsKLQlpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpKQomIzQzOwlpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpICZhbXA7JmFtcDsgIWV4dC0mZ3Q7dGFyZ2V0KQogCQlpcF9zZXRfaW5pdF9jb21tZW50KHNldCwgZXh0X2NvbW1lbnQoZGF0YSwgc2V0KSwgZXh0KTsKIAlpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKQogCQlpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKGRhdGEsIHNldCksIGV4dCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggYjBlMDBiZTg1Y2IxMmMuLjExY2JkYmFmNTYxZGFmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCkBAIC0zNjcsNyAmIzQzOzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApAQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC0mZ3Q7bGVuICYjNDM7IHNpemVvZigqdGgpKSkKIAkJcmV0dXJuIDA7CiAKLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLSZndDtsZW4pOwomIzQzOwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBpcHZzaC0mZ3Q7bGVuKTsKIAogCS8qCiAJICoJUmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKaW5kZXggNmVkMjYyMjM2M2YwZDYuLjM2YzVjYmEwM2Y1YmNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTcwLDI1ICYjNDM7NzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogICogYnVja2V0IG9yIGhhc2ggdGFibGUKICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZQogICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW4KJiM0MzsgKiAtIG9uIHJlc2l6ZSwgYnVja2V0IGZyb20gdGhlIG9sZCB0YWJsZSBpcyBsb2NrZWQgYmVmb3JlIGJ1Y2tldCBmcm9tIHRoZQomIzQzOyAqIG5ldyB0YWJsZQogICogLSBjcC0mZ3Q7bG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLSZndDtmbGFncywgY3AtJmd0O2Rlc3QKICAqLwogCi0vKiBMb2NrIGNvbm5fdGFiIGJ1Y2tldCBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2ggKi8KJiM0MzsvKioKJiM0MzsgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaAomIzQzOyAqIEB0OgkJaGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZQomIzQzOyAqIEB0MjoJCWhhc2ggdGFibGUgZm9yIGhuMSwgbmV3X3RibCB3aGVuIG5ld19oYXNoMj10cnVlCiYjNDM7ICogQGNwOgkJY29ubmVjdGlvbgomIzQzOyAqIEBoYXNoX2tleToJaGFzaCBrZXkgZm9yIGhuMAomIzQzOyAqIEBoYXNoX2tleTI6CWhhc2gga2V5IGZvciBobjEKJiM0MzsgKiBAdXNlMjoJdXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kCiYjNDM7ICogQG5ld19oYXNoOgltb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgKiBAbmV3X2hhc2gyOgltb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgKiBAaGVhZF9yZXQ6CXJldHVybmVkIGhlYWQgZm9yIGhuMAomIzQzOyAqIEBoZWFkMl9yZXQ6CXJldHVybmVkIGhlYWQgZm9yIGhuMQomIzQzOyAqCiYjNDM7ICogV2Ugc3VwcG9ydCAzIG1vZGVzOgomIzQzOyAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmcKJiM0MzsgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZwomIzQzOyAqIC0gc2VlayBobjAgYW5kIGhhc2ggaG4xLCB1c2VkIHdoZW4gZm9yd2FyZGluZyBtZXRob2QgaXMgY2hhbmdlZAomIzQzOyAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCi1jb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LAotCSAgICAgIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCwKLQkgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldCkKJiM0Mztjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiYjNDM7CSAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLAomIzQzOwkgICAgICBib29sIG5ld19oYXNoMiwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCwKJiM0MzsJICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpCiB7CiAJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjsKIAl1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyOwotCXN0cnVjdCBpcF92c19yaHQgKnQyID0gdDsKLQl1MzIgaWR4LCBpZHgyOwomIzQzOwlpbnQgaWR4ID0gMCwgaWR4MiA9IDA7CiYjNDM7CiYjNDM7CS8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MgomIzQzOwkgKiBpcyBmb3IgbmV3IHRhYmxlCiYjNDM7CSAqLwomIzQzOwlpZiAobmV3X2hhc2gyICZhbXA7JmFtcDsgdXNlMiAmYW1wOyZhbXA7IHQgIT0gdDIpCiYjNDM7CQlpZHgyJiM0MzsmIzQzOzsKIAotCWlkeCA9IGhhc2hfa2V5ICZhbXA7IHQtJmd0O21hc2s7Ci0JaWYgKHVzZTIpCi0JCWlkeDIgPSBoYXNoX2tleTIgJmFtcDsgdC0mZ3Q7bWFzazsKLQllbHNlCi0JCWlkeDIgPSBpZHg7CiAJaWYgKCFuZXdfaGFzaCkgewogCQkvKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGJ1Y2tldCBpbiB0aGUgcmlnaHQgdGFibGUgKi8KIApAQCAtMTAwLDQ2ICYjNDM7MTIwLDQ1IEBAIGNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksCiAJCQkgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MgogCQkJICogZm9yIHByb3BlciBsb2NrIG9yZGVyaW5nIGZvciBoZWFkcy4KIAkJCSAqLwotCQkJaWR4ID0gaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzazsKLQkJCWlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKLQkJfQotCQlpZiAodXNlMikgewotCQkJaWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkgewotCQkJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCi0JCQkJdDIgPSByY3VfZGVyZWZlcmVuY2UodDItJmd0O25ld190YmwpOwotCQkJCWlkeDIgPSBoYXNoX2tleTIgJmFtcDsgdDItJmd0O21hc2s7Ci0JCQkJaWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlkeDIgPSBpZHg7CiYjNDM7CQkJaWR4JiM0MzsmIzQzOzsKIAkJfQogCX0KJiM0MzsJaWYgKHVzZTIgJmFtcDsmYW1wOyAhbmV3X2hhc2gyICZhbXA7JmFtcDsgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7CiYjNDM7CQkvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqLwomIzQzOwkJdDIgPSByY3VfZGVyZWZlcmVuY2UodDItJmd0O25ld190YmwpOwomIzQzOwkJaWR4MiYjNDM7JiM0Mzs7CiYjNDM7CX0KIAomIzQzOwlpZiAoIXVzZTIpCiYjNDM7CQlpZHgyID0gaWR4OwogCWhlYWQgPSB0LSZndDtidWNrZXRzICYjNDM7IChoYXNoX2tleSAmYW1wOyB0LSZndDttYXNrKTsKIAloZWFkMiA9IHVzZTIgPyB0Mi0mZ3Q7YnVja2V0cyAmIzQzOyAoaGFzaF9rZXkyICZhbXA7IHQyLSZndDttYXNrKSA6IGhlYWQ7CiAKLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JLyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi8KLQotCWlmIChpZHggJmx0Oz0gaWR4MikgewomIzQzOwlpZiAoaWR4ICZndDsgaWR4MiB8fCAoaGVhZCAmZ3Q7IGhlYWQyICZhbXA7JmFtcDsgaWR4ID09IGlkeDIpKSB7CiYjNDM7CQlobGlzdF9ibF9sb2NrKGhlYWQyKTsKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKLQkJaWYgKGhlYWQgIT0gaGVhZDIpCi0JCQlobGlzdF9ibF9sb2NrKGhlYWQyKTsKIAl9IGVsc2UgewotCQlobGlzdF9ibF9sb2NrKGhlYWQyKTsKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKJiM0MzsJCWlmIChoZWFkICE9IGhlYWQyKQomIzQzOwkJCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCX0KIAlpZiAoIW5ld19oYXNoKSB7CiYjNDM7CQlib29sIGNoYW5nZWQ7CiYjNDM7CiAJCS8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi8KIAkJaGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwotCQloYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwomIzQzOwkJY2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldzsKJiM0MzsJCWlmICh1c2UyICZhbXA7JmFtcDsgIW5ld19oYXNoMikgewomIzQzOwkJCWhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiYjNDM7CQkJY2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaGFzaF9rZXlfbmV3MiA9IGhhc2hfa2V5MjsKJiM0MzsJCX0KIAkJLyogSGFzaCBjaGFuZ2VkID8gKi8KLQkJaWYgKGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldyB8fAotCQkgICAgKGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyICZhbXA7JmFtcDsgdXNlMikpIHsKJiM0MzsJCWlmIChjaGFuZ2VkKSB7CiAJCQlpZiAoaGVhZCAhPSBoZWFkMikKIAkJCQlobGlzdF9ibF91bmxvY2soaGVhZDIpOwogCQkJaGxpc3RfYmxfdW5sb2NrKGhlYWQpOwotCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCQloYXNoX2tleSA9IGhhc2hfa2V5X25ldzsKIAkJCWhhc2hfa2V5MiA9IGhhc2hfa2V5X25ldzI7CiAJCQlnb3RvIHJldHJ5OwpAQCAtMTU1LDcgJiM0MzsxNzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLAogCWlmIChoZWFkICE9IGhlYWQyKQogCQlobGlzdF9ibF91bmxvY2soaGVhZDIpOwogCWhsaXN0X2JsX3VubG9jayhoZWFkKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAogc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpOwpAQCAtMjY4LDggJiM0MzsyODYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCQl1c2UyID0gZmFsc2U7CiAJfQogCi0JY29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLywKLQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwljb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLAomIzQzOwkJICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiAKIAljcC0mZ3Q7ZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX0hBU0hFRDsKIAlXUklURV9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXksIGhhc2hfa2V5KTsKQEAgLTI4MCw2ICYjNDM7Mjk5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlLCBoZWFkMik7CiAKIAljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKIAlyZXQgPSAxOwogCiAJLyogU2NoZWR1bGUgcmVzaXppbmcgaWYgbG9hZCBpbmNyZWFzZXMgKi8KQEAgLTMwNiwxOCAmIzQzOzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCQlyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZSgmYW1wO2NwLSZndDtyZWZjbnQpOwogCiAJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiAKIAl0ID0gcmN1X2RlcmVmZXJlbmNlKGlwdnMtJmd0O2Nvbm5fdGFiKTsKIAloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKIAloYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiAJdXNlMiA9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKTsKIAotCWNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLAotCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwljb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLywKJiM0MzsJCSAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKIAogCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0hBU0hFRCkgewogCQkvKiBEZWNyZWFzZSByZWZjbnQgYW5kIHVubGluayBjb25uIG9ubHkgaWYgd2UgYXJlIGxhc3QgdXNlciAqLwotCQlpZiAocmVmY291bnRfZGVjX2lmX29uZSgmYW1wO2NwLSZndDtyZWZjbnQpKSB7CiYjNDM7CQlpZiAodXNlMiA9PSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHJlZmNvdW50X2RlY19pZl9vbmUoJmFtcDtjcC0mZ3Q7cmVmY250KSkgewogCQkJaGxpc3RfYmxfZGVsX3JjdSgmYW1wO2NwLSZndDtobjAubm9kZSk7CiAJCQlpZiAodXNlMikKIAkJCQlobGlzdF9ibF9kZWxfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlKTsKQEAgLTMyOCw2ICYjNDM7MzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAogCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiAKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjMyLDYgJiM0Mzs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydCkKIAlpbnQgbnRibDsKIAlpbnQgZGlyOwogCiYjNDM7cmVzdGFydDoKIAkvKiBObyBwYWNrZXRzIGZyb20gaW5zaWRlLCBzbyB3ZSBjYW4gZG8gaXQgaW4gMiBzdGVwcy4gKi8KIAlkaXIgPSB1c2UyID8gMSA6IDA7CiAKQEAgLTY4Niw2ICYjNDM7NzEwLDIzIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KQogCS8qIFByb3RlY3QgdGhlIGNwLSZndDtmbGFncyBtb2RpZmljYXRpb24gKi8KIAlzcGluX2xvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiAKJiM0MzsJLyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqLwomIzQzOwlpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHsKJiM0MzsJCXVzZTIgPSAhdXNlMjsKJiM0MzsJCWlmICh1c2UyKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJLyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovCiYjNDM7CQkJZ290byByZXN0YXJ0OwomIzQzOwkJfQomIzQzOwkJaWYgKGRpcikgewomIzQzOwkJCS8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovCiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJZGlyLS07CiYjNDM7CQkJZ290byBuZXh0X2RpcjsKJiM0MzsJCX0KJiM0MzsJCS8qIEp1c3QgZmluaXNoIGRpciAwICovCiYjNDM7CX0KJiM0MzsKIAkvKiBMb2NrIHNlcWNvdW50IG9ubHkgZm9yIHRoZSBvbGQgYnVja2V0LCBldmVuIGlmIHdlIGFyZSBvbiBuZXcgdGFibGUKIAkgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLgogCSAqLwpAQCAtNzUyLDYgJiM0Mzs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpCiAJCWdvdG8gbmV4dF9kaXI7CiB9CiAKJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovCiYjNDM7c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC0mZ3Q7aXB2czsKJiM0MzsJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjsKJiM0MzsJdTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyOwomIzQzOwlzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7CiYjNDM7CiYjNDM7CS8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi8KJiM0MzsJaWYgKChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fAomIzQzOwkgICAgLyogTm8gY2hhbmdlIGluIGRvdWJsZSBoYXNoaW5nID8gKi8KJiM0MzsJICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT0KJiM0MzsJICAgICgobmV3X2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBuZXdfZmxhZ3M7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJdCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLSZndDtjb25uX3RhYik7CiYjNDM7CWlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHsKJiM0MzsJCS8qIFN0b3AgZG91YmxlIGhhc2hpbmcgKi8KJiM0MzsJCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwomIzQzOwkJaGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwomIzQzOwomIzQzOwkJY29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLAomIzQzOwkJCSAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sCiYjNDM7CQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsKJiM0MzsJCS8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqLwomIzQzOwkJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiYjNDM7CQlXUklURV9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXksIGhhc2hfa2V5KTsKJiM0MzsJCWhsaXN0X2JsX2RlbF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUpOwomIzQzOwkJY3AtJmd0O2ZsYWdzID0gbmV3X2ZsYWdzOwomIzQzOwomIzQzOwkJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovCiYjNDM7CiYjNDM7CQloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKJiM0MzsKJiM0MzsJCXQyID0gcmN1X2RlcmVmZXJlbmNlKHQtJmd0O25ld190YmwpOwomIzQzOwkJaGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpOwomIzQzOwkJaGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7CiYjNDM7CiYjNDM7CQkvKiBDaGFuZ2UgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2tlZCBobjAgKi8KJiM0MzsJCWNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sCiYjNDM7CQkJICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIHRydWUgLyogbmV3X2hhc2gyICovLAomIzQzOwkJCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBuZXdfZmxhZ3M7CiYjNDM7CQlobGlzdF9ibF9hZGRfaGVhZF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUsIGhlYWQyKTsKJiM0MzsKJiM0MzsJCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBHZXQgZGVmYXVsdCBsb2FkIGZhY3RvciB0byBtYXAgY29ubl9jb3VudC91X3RocmVzaCB0byB0LSZndDtzaXplICovCiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykKIHsKQEAgLTEwMTQsNiAmIzQzOzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAlmbGFncyA9IGNwLSZndDtmbGFnczsKIAkvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqLwogCWlmIChmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfU1lOQykgewomIzQzOwkJLyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovCiYjNDM7CQljb25uX2ZsYWdzICZhbXA7PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7CiYjNDM7CiAJCS8qIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB0ZW1wbGF0ZSBhbmQgaXMgY3JlYXRlZAogCQkgKiBieSBzeW5jLCBwcmVzZXJ2ZSB0aGUgYWN0aXZpdHkgZmxhZy4KIAkJICovCkBAIC0xMDIxLDkgJiM0MzsxMTIwLDE4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogCQkJY29ubl9mbGFncyAmYW1wOz0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTsKIAkJLyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi8KIAkJZmxhZ3MgJmFtcDs9IH4oSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgSVBfVlNfQ09OTl9GX05PT1VUUFVUKTsKJiM0MzsJCWZsYWdzIHw9IGNvbm5fZmxhZ3M7CiYjNDM7CQkvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuCiYjNDM7CQkgKiBoYXBwZW4gb25seSB1bmRlciBsb2NrcwomIzQzOwkJICovCiYjNDM7CQlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9IQVNIRUQpCiYjNDM7CQkJaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljcC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZsYWdzIHw9IGNvbm5fZmxhZ3M7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAl9Ci0JZmxhZ3MgfD0gY29ubl9mbGFnczsKLQljcC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAljcC0mZ3Q7ZGVzdCA9IGRlc3Q7CiAKIAlJUF9WU19EQkdfQlVGKDcsICYjMzQ7QmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCAmIzM0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggYmFmYWI5MzQ1MWQwMzcuLjZiNzllMGM0ZDllMjg0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTg2Nyw3ICYjNDM7ODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfQogCiAjZW5kaWYKIAotX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQomIzQzO3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0mZ3Q7bGVuIC0gb2Zmc2V0LCAwKSk7CiB9CkBAIC05MjQsMTMgJiM0Mzs5MjQsMTMgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwKICAqIC0gaW5vdXQ6IDE9aW4tJmd0O291dCwgMD1vdXQtJmd0O2luCiAgKi8KIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KQomIzQzOwkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICBib29sIGhhc19wb3J0cykKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaAkgPSBpcF9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtJmd0O2lobCo0OwotCXN0cnVjdCBpY21waGRyICppY21waAkgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsKLQkJCQkJCSAgICAgIGljbXBfb2Zmc2V0KTsKJiM0MzsJc3RydWN0IGljbXBoZHIgKmljbXBoCSA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgdG9mZik7CiAJc3RydWN0IGlwaGRyICpjaXBoCSA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggJiM0MzsgMSk7CiYjNDM7CXVuc2lnbmVkIGludCBjb2ZmIF9fbWF5YmVfdW51c2VkID0gdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXBoZHIpOwogCiAJaWYgKGlub3V0KSB7CiAJCWlwaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7dmFkZHIuaXA7CkBAIC05NDUsOCAmIzQzOzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAl9CiAKIAkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0mZ3Q7cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0mZ3Q7cHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IGNpcGgtJmd0O3Byb3RvY29sKSB7CiYjNDM7CWlmIChoYXNfcG9ydHMpIHsKIAkJX19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCAmIzQzOyBjaXBoLSZndDtpaGwqNDsKIAogCQlpZiAoaW5vdXQpCkBAIC05NTcsNDggJiM0Mzs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiAJLyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi8KIAlpY21waC0mZ3Q7Y2hlY2tzdW0gPSAwOwotCWljbXBoLSZndDtjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpOwomIzQzOwlpY21waC0mZ3Q7Y2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpOwogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAlpZiAoaW5vdXQpCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUCYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAotCQkJJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsCiYjNDM7CQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUCYjMzQ7KTsKIH0KIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCkKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoCSA9IGlwdjZfaGRyKHNrYik7Ci0JdW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDsKLQl1bnNpZ25lZCBpbnQgb2ZmcwkgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki8KLQlpbnQgcHJvdG9jb2w7CiAJc3RydWN0IGljbXA2aGRyICppY21waDsKLQlzdHJ1Y3QgaXB2NmhkciAqY2lwaDsKLQl1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmczsKJiM0MzsJc3RydWN0IGlwdjZoZHIgKmNpaDsKIAotCWlwdjZfZmluZF9oZHIoc2tiLCAmYW1wO2ljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgJmFtcDtmcmFnb2ZmcywgTlVMTCk7Ci0JaWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGljbXBfb2Zmc2V0KTsKLQlvZmZzID0gaWNtcF9vZmZzZXQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7Ci0JY2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTsKLQotCXByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsICZhbXA7b2ZmcywgLTEsICZhbXA7ZnJhZ29mZnMsIE5VTEwpOwomIzQzOwlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHRvZmYpOwomIzQzOwljaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O29mZik7CiAKIAlpZiAoaW5vdXQpIHsKIAkJaXBoLSZndDtzYWRkciA9IGNwLSZndDt2YWRkci5pbjY7Ci0JCWNpcGgtJmd0O2RhZGRyID0gY3AtJmd0O3ZhZGRyLmluNjsKJiM0MzsJCWNpaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7dmFkZHIuaW42OwogCX0gZWxzZSB7CiAJCWlwaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7ZGFkZHIuaW42OwotCQljaXBoLSZndDtzYWRkciA9IGNwLSZndDtkYWRkci5pbjY7CiYjNDM7CQljaWgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmluNjsKIAl9CiAKIAkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KLQlpZiAoIWZyYWdvZmZzICZhbXA7JmFtcDsgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8Ci0JCQkgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHsKLQkJX19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnMpOwomIzQzOwlpZiAoaGFzX3BvcnRzKSB7CiYjNDM7CQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLSZndDtkYXRhICYjNDM7IGNpcGgtJmd0O2xlbik7CiAKIAkJSVBfVlNfREJHKDExLCAmIzM0OyVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXG4mIzM0OywgX19mdW5jX18sCiAJCQkgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLApAQCAtMTAxMSwxOSAmIzQzOzEwMDIsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiAJLyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi8KIAlpY21waC0mZ3Q7aWNtcDZfY2tzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZhbXA7aXBoLSZndDtzYWRkciwgJmFtcDtpcGgtJmd0O2RhZGRyLAotCQkJCQkgICAgICBza2ItJmd0O2xlbiAtIGljbXBfb2Zmc2V0LAomIzQzOwkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB0b2ZmLAogCQkJCQkgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7Ci0Jc2tiLSZndDtjc3VtX3N0YXJ0ID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItJmd0O2hlYWQgJiM0MzsgaWNtcF9vZmZzZXQ7CiYjNDM7CXNrYi0mZ3Q7Y3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICYjNDM7IHRvZmY7CiAJc2tiLSZndDtjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwogCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAogCWlmIChpbm91dCkKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsCi0JCQkgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCwKJiM0MzsJCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLSZndDtvZmYsCiAJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QdjYmIzM0Oyk7CiAJZWxzZQotCQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwKLQkJCSAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NiYjMzQ7KTsKIH0KICNlbmRpZgpAQCAtMTAzMywzNiAmIzQzOzEwMjIsNDEgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogICovCiBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQl1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsCi0JCQkJX191OCBwcm90b2NvbCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAomIzQzOwkJCQlzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLAotCQkJCXVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkJCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsCiYjNDM7CQkJCXVuc2lnbmVkIGludCB0b2ZmLCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKJiM0MzsJaW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7CiAJdW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QOwomIzQzOwl1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLSZndDtsZW47CiYjNDM7CWJvb2wgaGFzX3BvcnRzID0gZmFsc2U7CiAKIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpCiAJCWdvdG8gYWZ0ZXJfbmF0OwogCiAJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCi0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICZhbXA7JmFtcDsgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHsKIAkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwogCQlJUF9WU19EQkdfQlVGKDEsICYjMzQ7Rm9yd2FyZCBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcyFcbiYjMzQ7LAogCQkJICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8Ci0JICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkKLQkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsKLQlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpCiYjNDM7CWlmIChjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAomIzQzOwkgICAgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7CiYjNDM7CQljdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7CiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKQogCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAJaWYgKGFmID09IEFGX0lORVQ2KQotCQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSk7CiYjNDM7CQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTsKIAllbHNlCiAjZW5kaWYKLQkJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpOwomIzQzOwkJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cyk7CiAKIAlpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLSZndDtpcHZzLCBhZiwgc2tiLCBob29rbnVtKSkKIAkJZ290byBvdXQ7CkBAIC0xMDkwLDkgJiM0MzsxMDg0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsCiAgKglDdXJyZW50bHkgaGFuZGxlcyBlcnJvciB0eXBlcyAtIHVucmVhY2hhYmxlLCBxdWVuY2gsIHR0bCBleGNlZWRlZC4KICAqLwogc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSkKJiM0MzsJCQkgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sCiYjNDM7CQkJICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKQogewotCXN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpY21waGRyCV9pY21waCwgKmljOwogCXN0cnVjdCBpcGhkcglfY2lwaCwgKmNpaDsJLyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovCiAJc3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7CkBAIC0xMTA3LDE3ICYjNDM7MTEwMSwxOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHsKIAkJaWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSkKIAkJCXJldHVybiBORl9TVE9MRU47CiYjNDM7CQlpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpCiYjNDM7CQkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CiAKLQlpcGggPSBpcF9oZHIoc2tiKTsKLQlvZmZzZXQgPSBpaGwgPSBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CWlobCA9IGlwdnNoLSZndDtsZW47CiYjNDM7CW9mZnNldCA9IGlwdnNoLSZndDtsZW47CiAJaWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCAmYW1wO19pY21waCk7CiAJaWYgKGljID09IE5VTEwpCiAJCXJldHVybiBORl9EUk9QOwogCiAJSVBfVlNfREJHKDEyLCAmIzM0O091dGdvaW5nIElDTVAgKCVkLCVkKSAlcEk0LSZndDslcEk0XG4mIzM0OywKIAkJICBpYy0mZ3Q7dHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLAotCQkgICZhbXA7aXBoLSZndDtzYWRkciwgJmFtcDtpcGgtJmd0O2RhZGRyKTsKJiM0MzsJCSAgJmFtcDtpcHZzaC0mZ3Q7c2FkZHIuaXAsICZhbXA7aXB2c2gtJmd0O2RhZGRyLmlwKTsKIAogCS8qCiAJICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy4KQEAgLTExMzYsNyAmIzQzOzExMzIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCS8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovCiAJb2Zmc2V0ICYjNDM7PSBzaXplb2YoX2ljbXBoKTsKIAljaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksICZhbXA7X2NpcGgpOwotCWlmIChjaWggPT0gTlVMTCkKJiM0MzsJaWYgKCEoY2loICZhbXA7JmFtcDsgY2loLSZndDt2ZXJzaW9uID09IDQgJmFtcDsmYW1wOyBjaWgtJmd0O2lobCAmZ3Q7PSA1KSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAKIAlwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtJmd0O3Byb3RvY29sKTsKQEAgLTExNDQsOCAmIzQzOzExNDAsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwotCWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOwotCQkgICAgIHBwLSZndDtkb250X2RlZnJhZykpCiYjNDM7CWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCwKQEAgLTExNTksOSAmIzQzOzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghY3ApCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQlzbmV0LmlwID0gaXBoLSZndDtzYWRkcjsKLQlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCAmYW1wO3NuZXQsIGNpaC0mZ3Q7cHJvdG9jb2wsIGNwLAotCQkJCSAgICBwcCwgY2lwaC5sZW4sIGlobCwgaG9va251bSk7CiYjNDM7CXNuZXQuaXAgPSBpcHZzaC0mZ3Q7c2FkZHIuaXA7CiYjNDM7CXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsICZhbXA7c25ldCwgY3AsIHBwLCAmYW1wO2NpcGgsIGlobCwKJiM0MzsJCQkJICAgIGhvb2tudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTExNzQsNyAmIzQzOzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBpcF92c19jb25uICpjcDsKIAlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwOwogCXVuaW9uIG5mX2luZXRfYWRkciBzbmV0OwotCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAKIAkqcmVsYXRlZCA9IDE7CiAJaWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtJmd0O2xlbiwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKQEAgLTEyMTAsNiAmIzQzOzEyMDQsMTAgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIXBwKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiYjNDM7CS8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi8KJiM0MzsJaWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiAJLyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlciAqLwogCWNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLSZndDtjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90bywKIAkJCSAgICAgaXB2cywgQUZfSU5FVDYsIHNrYiwgJmFtcDtjaXBoKTsKQEAgLTEyMTcsOSAmIzQzOzEyMTUsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJc25ldC5pbjYgPSBjaXBoLnNhZGRyLmluNjsKLQlvZmZzZXQgPSBjaXBoLmxlbjsKLQlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgJmFtcDtzbmV0LCBjaXBoLnByb3RvY29sLCBjcCwKLQkJCQkgICAgcHAsIG9mZnNldCwgaXB2c2gtJmd0O2xlbiwgaG9va251bSk7CiYjNDM7CXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCAmYW1wO3NuZXQsIGNwLCBwcCwgJmFtcDtjaXBoLAomIzQzOwkJCQkgICAgaXB2c2gtJmd0O2xlbiwgaG9va251bSk7CiB9CiAjZW5kaWYKIApAQCAtMTU0NSw3ICYjNDM7MTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0CiAjZW5kaWYKIAkJaWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7CiAJCQlpbnQgcmVsYXRlZDsKLQkJCWludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCAmYW1wO3JlbGF0ZWQsIGhvb2tudW0pOwomIzQzOwkJCWludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCAmYW1wO3JlbGF0ZWQsCiYjNDM7CQkJCQkJICAgICBob29rbnVtLCAmYW1wO2lwaCk7CiAKIAkJCWlmIChyZWxhdGVkKQogCQkJCXJldHVybiB2ZXJkaWN0OwpAQCAtMTc1Myw5ICYjNDM7MTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAgKi8KIHN0YXRpYyBpbnQKIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKLQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKJiM0MzsJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewotCXN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpY21waGRyCV9pY21waCwgKmljOwogCXN0cnVjdCBpcGhkcglfY2lwaCwgKmNpaDsJLyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovCiAJc3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7CkBAIC0xNzY1LDcgJiM0MzsxNzYyLDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXVuc2lnbmVkIGludCBvZmZzZXQsIG9mZnNldDIsIGlobCwgdmVyZGljdDsKIAlib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7CiAJdW5pb24gbmZfaW5ldF9hZGRyICpyYWRkcjsKLQljaGFyICpvdXRlcl9wcm90byA9ICYjMzQ7SVBJUCYjMzQ7OwomIzQzOwljaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9ICYjMzQ7SVBJUCYjMzQ7OwogCXVuc2lnbmVkIGludCBobGVuX2lwaXA7CiAJaW50IHVsZW4gPSAwOwogCkBAIC0xNzc1LDE3ICYjNDM7MTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJaWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkgewogCQlpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKQogCQkJcmV0dXJuIE5GX1NUT0xFTjsKJiM0MzsJCWlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwaCkpCiYjNDM7CQkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CiAKLQlpcGggPSBpcF9oZHIoc2tiKTsKLQlvZmZzZXQgPSBpaGwgPSBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CWlobCA9IGlwaC0mZ3Q7bGVuOwomIzQzOwlvZmZzZXQgPSBpcGgtJmd0O2xlbjsKIAlpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKIAlpZiAoaWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlJUF9WU19EQkcoMTIsICYjMzQ7SW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtJmd0OyVwSTRcbiYjMzQ7LAogCQkgIGljLSZndDt0eXBlLCBudG9ocyhpY21wX2lkKGljKSksCi0JCSAgJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwomIzQzOwkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIuaXAsICZhbXA7aXBoLSZndDtkYWRkci5pcCk7CiAKIAkvKgogCSAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuCkBAIC0xODY3LDggJiM0MzsxODY2LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXBwID0gcGQtJmd0O3BwOwogCiAJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwotCWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOwotCQkgICAgIHBwLSZndDtkb250X2RlZnJhZykpCiYjNDM7CWlmICh1bmxpa2VseShjaWgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCwKQEAgLTE4NzYsNyAmIzQzOzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAKIAlvZmZzZXQyID0gb2Zmc2V0OwogCWlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCAmYW1wO2NpcGgpOwotCW9mZnNldCA9IGNpcGgubGVuOwogCiAJLyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci4KIAkgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LgpAQCAtMTg5OCwxMCAmIzQzOzE4OTUsMTEgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCXZlcmRpY3QgPSBORl9EUk9QOwogCiAJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCi0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICZhbXA7JmFtcDsgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7CiYjNDM7CWlmICgoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgfHwgdHVubmVsKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaWhsLCBJUFBST1RPX0lDTVAsIEFGX0lORVQpKSB7CiAJCS8qIEZhaWxlZCBjaGVja3N1bSEgKi8KIAkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcbiYjMzQ7LAotCQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwomIzQzOwkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyLmlwKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xOTY5LDEwICYjNDM7MTk2Nyw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAogCS8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqLwogCWlwX3ZzX2luX3N0YXRzKGNwLCBza2IpOwotCWlmIChJUFBST1RPX1RDUCA9PSBjaWgtJmd0O3Byb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpaC0mZ3Q7cHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IGNpaC0mZ3Q7cHJvdG9jb2wpCi0JCW9mZnNldCAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7Ci0JdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCAmYW1wO2NpcGgpOwomIzQzOwl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBpcGgtJmd0O2xlbiwgaG9va251bSwgJmFtcDtjaXBoKTsKIAogb3V0OgogCWlmIChsaWtlbHkoIW5ld19jcCkpCkBAIC0yMDMyLDggJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCXBwID0gcGQtJmd0O3BwOwogCi0JLyogQ2Fubm90IGhhbmRsZSBmcmFnbWVudGVkIGVtYmVkZGVkIHByb3RvY29sICovCi0JaWYgKGNpcGguZnJhZ29mZnMpCiYjNDM7CS8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi8KJiM0MzsJaWYgKGNpcGguZnJhZ29mZnMgJmFtcDsmYW1wOyAhcHAtJmd0O2RvbnRfZGVmcmFnKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCwKQEAgLTIwNTcsMjMgJiM0MzsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJbmV3X2NwID0gdHJ1ZTsKIAl9CiAKLQkvKiBWUy9UVU4sIFZTL0RSIGFuZCBMT0NBTE5PREUganVzdCBsZXQgaXQgZ28gKi8KLQlpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpICZhbXA7JmFtcDsKLQkgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSkgewotCQl2ZXJkaWN0ID0gTkZfQUNDRVBUOwomIzQzOwl2ZXJkaWN0ID0gTkZfRFJPUDsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovCiYjNDM7CWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fSUNNUFY2LAomIzQzOwkJCQkJIEFGX0lORVQ2KSkgewomIzQzOwkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwomIzQzOwkJSVBfVlNfREJHKDEsICYjMzQ7SW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcbiYjMzQ7LAomIzQzOwkJCSAgJmFtcDtpcGgtJmd0O3NhZGRyKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovCiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7CiAKLQkvKiBOZWVkIHRvIG1hbmdsZSBjb250YWluZWQgSVB2NiBoZWFkZXIgaW4gSUNNUHY2IHBhY2tldCAqLwotCW9mZnNldCA9IGNpcGgubGVuOwotCWlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpCi0JCW9mZnNldCAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCi0KLQl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sICZhbXA7Y2lwaCk7CiYjNDM7CXZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIGlwaC0mZ3Q7bGVuLCBob29rbnVtLCAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIxNTIsNyAmIzQzOzIxNDYsNyBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZQogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwogCQkJaW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyZWxhdGVkLAotCQkJCQkJICAgIGhvb2tudW0pOwomIzQzOwkJCQkJCSAgICBob29rbnVtLCAmYW1wO2lwaCk7CiAKIAkJCWlmIChyZWxhdGVkKQogCQkJCXJldHVybiB2ZXJkaWN0OwpAQCAtMjIwMCw4ICYjNDM7MjE5NCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZQogCQl9CiAKIAkJaWYgKHJlc2NoZWQpIHsKLQkJCWlmICghb2xkX2N0KQomIzQzOwkJCWlmICghb2xkX2N0KSB7CiYjNDM7CQkJCXNwaW5fbG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKIAkJCQljcC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfTkZDVDsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCQkJaWYgKCFhdG9taWNfcmVhZCgmYW1wO2NwLSZndDtuX2NvbnRyb2wpKQogCQkJCWlwX3ZzX2Nvbm5fZXhwaXJlX25vdyhjcCk7CiAJCQlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKQEAgLTIyMTcsOCAmIzQzOzIyMTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUKIAkJaWYgKHN5c2N0bF9leHBpcmVfbm9kZXN0X2Nvbm4oaXB2cykpIHsKIAkJCWJvb2wgb2xkX2N0ID0gaXBfdnNfY29ubl91c2VzX29sZF9jb25udHJhY2soY3AsIHNrYik7CiAKLQkJCWlmICghb2xkX2N0KQomIzQzOwkJCWlmICghb2xkX2N0KSB7CiYjNDM7CQkJCXNwaW5fbG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKIAkJCQljcC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfTkZDVDsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCiAJCQlpcF92c19jb25uX2V4cGlyZV9ub3coY3ApOwogCQkJX19pcF92c19jb25uX3B1dChjcCk7CkBAIC0yMjg4LDYgJiM0MzsyMjg4LDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLSZndDtuZXQpOwomIzQzOwlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7CiAJaW50IHI7CiAKIAkvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovCkBAIC0yMjk3LDEwICYjNDM7MjI5OCw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChzdGF0ZS0mZ3Q7cGYgPT0gTkZQUk9UT19JUFY0KSB7CiAJCWlmIChpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QKQogCQkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsJCWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCAmYW1wO2lwaGRyKTsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCX0gZWxzZSB7Ci0JCXN0cnVjdCBpcF92c19pcGhkciBpcGhkcjsKLQogCQlpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsICZhbXA7aXBoZHIpOwogCiAJCWlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNikKQEAgLTIzMTAsNyAmIzQzOzIzMTAsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICNlbmRpZgogCX0KIAotCXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vayk7CiYjNDM7CXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vaywgJmFtcDtpcGhkcik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNFtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTExLDcgJiM0MzsxMSw3IEBACiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZik7CiYjNDM7CQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiAKIHN0YXRpYyBpbnQKIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTA5LDcgJiM0MzsxMDksNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIHNjdHBob2ZmKSkKJiM0MzsJCWlmICghc2N0cF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLwpAQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQlzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmOwomIzQzOwlzY3RwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmOwogCiAJLyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqLwogCWlmIChzY3RwaC0mZ3Q7c291cmNlICE9IGNwLSZndDt2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHwKQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBzY3RwaG9mZikpCiYjNDM7CQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0Jc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjsKJiM0MzsJc2N0cGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZjsKIAogCS8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi8KIAlpZiAoc2N0cGgtJmd0O2Rlc3QgIT0gY3AtJmd0O2Rwb3J0IHx8IHBheWxvYWRfY3N1bSB8fApAQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZikKJiM0MzsJCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtJmd0O2xlbjsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7CiAJX19sZTMyIGNtcCwgdmFsOwogCiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKQomIzQzOwkJcmV0dXJuIDE7CiAJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmKTsKIAljbXAgPSBzaC0mZ3Q7Y2hlY2tzdW07CiAJdmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpOwogCiAJaWYgKHZhbCAhPSBjbXApIHsKIAkJLyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovCi0JCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKQEAgLTI5LDcgJiM0MzsyOSw3IEBACiAKIHN0YXRpYyBpbnQKIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTY2LDcgJiM0MzsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB0Y3Bob2ZmKSkKJiM0MzsJCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7c291cmNlID0gY3AtJmd0O3Zwb3J0OwogCiAJLyogQWRqdXN0IFRDUCBjaGVja3N1bXMgKi8KQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdGNwaG9mZikpCiYjNDM7CQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7ZGVzdCA9IGNwLSZndDtkcG9ydDsKIAogCS8qCkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKQomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLSZndDtjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdGNwaG9mZiwgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLCAwKTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKLQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICBza2ItJmd0O2xlbiAtIHRjcGhvZmYsCi0JCQkJCSAgICBJUFBST1RPX1RDUCwKLQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfSBlbHNlCi0jZW5kaWYKLQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi8KLQkJYnJlYWs7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fVENQLCBhZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwppbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKQEAgLTI1LDcgJiM0MzsyNSw3IEBACiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB1ZHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtzb3VyY2UgPSBjcC0mZ3Q7dnBvcnQ7CiAKIAkvKgpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtkZXN0ID0gY3AtJmd0O2Rwb3J0OwogCiAJLyoKQEAgLTI5OCw0OCAmIzQzOzI5OCwyMCBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpCiYjNDM7CSAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCkKIHsKIAlzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7CiAKLQl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksICZhbXA7X3VkcGgpOwomIzQzOwl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC0mZ3Q7bGVuLCBzaXplb2YoX3VkcGgpLCAmYW1wO191ZHBoKTsKIAlpZiAodWggPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodWgtJmd0O2NoZWNrICE9IDApIHsKLQkJc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCQlza2ItJmd0O2NzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLAotCQkJCQkJIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwgMCk7Ci0JCQlmYWxsdGhyb3VnaDsKLQkJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQkJaWYgKGNzdW1faXB2Nl9tYWdpYygmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLAotCQkJCQkJICAgIElQUFJPVE9fVURQLAotCQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHVkcGhvZmYsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqLwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJaWYgKCF1aC0mZ3Q7Y2hlY2spCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtJmd0O2xlbiwgSVBQUk9UT19VRFAsIGFmKSkgewomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwppbmRleCA5ZmVmNDMzNWRhMTNmZC4uMGIwYzUzMDQ5OTNhOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtMTUwMiwyMCAmIzQzOzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAgKi8KIGludAogaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sCi0JCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBydGFibGUJKnJ0OwkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGUsIHdhc19pbnB1dDsKJiM0MzsJYm9vbCBoYXNfcG9ydHMgPSBmYWxzZTsKJiM0MzsJdW5zaWduZWQgaW50IHdsZW47CiAKIAkvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlCiAJICAgZm9yd2FyZGVkIGRpcmVjdGx5IGhlcmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0bwogCSAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqLwogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkgewogCQlpZiAoY3AtJmd0O3BhY2tldF94bWl0KQotCQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNTMzLDcgJiM0MzsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwgY3AtJmd0O2RhZGRyLmlwLCBydF9tb2RlLAotCQkJCSAgIE5VTEwsIGlwaCk7CiYjNDM7CQkJCSAgIE5VTEwsIGNpcGgpOwogCWlmIChsb2NhbCAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAJcnQgPSBza2JfcnRhYmxlKHNrYik7CkBAIC0xNTY0LDE0ICYjNDM7MTU2NiwyMSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CkBAIC0xNTg3LDEwICYjNDM7MTU5NiwxMiBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiBpbnQKIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLAotCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewomIzQzOwlib29sIGhhc19wb3J0cyA9IGZhbHNlOwogCXN0cnVjdCBydDZfaW5mbwkqcnQ7CS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiYjNDM7CXVuc2lnbmVkIGludCB3bGVuOwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGU7CkBAIC0xNjAwLDcgJiM0MzsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi8KIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHsKIAkJaWYgKGNwLSZndDtwYWNrZXRfeG1pdCkKLQkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNjE3LDcgJiM0MzsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwKLQkJCQkgICAgICAmYW1wO2NwLSZndDtkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTsKJiM0MzsJCQkJICAgICAgJmFtcDtjcC0mZ3Q7ZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTsKIAlpZiAobG9jYWwgJmx0OyAwKQogCQlnb3RvIHR4X2Vycm9yOwogCXJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7CkBAIC0xNjQ4LDE0ICYjNDM7MTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IDdhZTY4ZDYwNTg2YTIzLi44YTNiOWUzM2U5NGY3NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTQyNyw3ICYjNDM7NDI3LDYgQEAgc3RhdGljIHZvaWQgbmZfY3RfZXhwZWN0X2luc2VydChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAogCQlleHAtJmd0O3RpbWVvdXQgJiM0Mzs9IGhlbHBlci0mZ3Q7ZXhwZWN0X3BvbGljeVtleHAtJmd0O2NsYXNzXS50aW1lb3V0ICogSFo7CiAKIAlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtleHAtJmd0O2xub2RlLCAmYW1wO21hc3Rlcl9oZWxwLSZndDtleHBlY3RhdGlvbnMpOwotCW1hc3Rlcl9oZWxwLSZndDtleHBlY3RpbmdbZXhwLSZndDtjbGFzc10mIzQzOyYjNDM7OwogCiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZXhwLSZndDtobm9kZSwgJmFtcDtuZl9jdF9leHBlY3RfaGFzaFtoXSk7CiAJY25ldCA9IG5mX2N0X3Blcm5ldChuZXQpOwpAQCAtNTM0LDYgJiM0Mzs1MzMsNyBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCiYjNDM7CW1hc3Rlcl9oZWxwLSZndDtleHBlY3RpbmdbZXhwZWN0LSZndDtjbGFzc10mIzQzOyYjNDM7OwogCW5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0LCBtYXN0ZXJfaGVscCk7CiAKIAluZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0LCBwb3J0aWQsIHJlcG9ydCk7CkBAIC01NDYsNiAmIzQzOzU0NiwzOSBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQpOwogCiYjNDM7aW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spOwomIzQzOwltYXN0ZXJfaGVscCA9IG5mY3RfaGVscChleHBlY3RbMF0tJmd0O21hc3Rlcik7CiYjNDM7CWlmICghbWFzdGVyX2hlbHAgfHwgbWFzdGVyX2hlbHAgIT0gbmZjdF9oZWxwKGV4cGVjdFsxXS0mZ3Q7bWFzdGVyKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAyOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gX19uZl9jdF9leHBlY3RfY2hlY2soZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCwgZmxhZ3MpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoaSA9PSAxKQomIzQzOwkJCQltYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdFswXS0mZ3Q7Y2xhc3NdLS07CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQltYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdFtpXS0mZ3Q7Y2xhc3NdJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCk7CiYjNDM7CQluZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0W2ldLCAwLCAwKTsKJiM0MzsJfQomIzQzO291dDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKTsKJiM0MzsKIHZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfZGVzdHJveShib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLAogCQkJCSAgdm9pZCAqZGF0YSkKIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggZjNmOTBhODY2MzM4OTQuLmU0YTcwZDFkNzdiMGI5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMTY2Myw3ICYjNDM7MTY2Myw3IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW47CiAJdW5zaWduZWQgaW50IG1zZ2xlbiwgb3JpZ2xlbjsKIAljb25zdCBjaGFyICpkcHRyLCAqZW5kOwotCXMxNiBkaWZmLCB0ZGlmZiA9IDA7CiYjNDM7CXMzMiBkaWZmLCB0ZGlmZiA9IDA7CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKIAl1bnNpZ25lZCBsb25nIGNsZW47CiAJYm9vbCB0ZXJtOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYwppbmRleCBhZWEwMmY2YWZmMDkyYS4uMTMzYmQ3MTNmZTBjMjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCkBAIC0zMjEsNyAmIzQzOzMyMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NpcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIH0KIAogc3RhdGljIHZvaWQgbmZfbmF0X3NpcF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAotCQkJCSAgczE2IG9mZikKJiM0MzsJCQkJICBzMzIgb2ZmKQogewogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZhbXA7Y3RpbmZvKTsKQEAgLTU5Miw2ICYjNDM7NTkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkJCSAgICAgdW5zaWduZWQgaW50IG1lZGlhbGVuLAogCQkJCSAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpydHBfYWRkcikKIHsKJiM0MzsJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9wYWlyWzJdID0geyBydHBfZXhwLCBydGNwX2V4cCB9OwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZhbXA7Y3RpbmZvKTsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwpAQCAtNjIyLDI0ICYjNDM7NjIzLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIAkJaW50IHJldDsKIAogCQlydHBfZXhwLSZndDt0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHBvcnQpOwotCQlyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydHBfZXhwLAotCQkJCQkgICBORl9DVF9FWFBfRl9TS0lQX01BU1RFUik7Ci0JCWlmIChyZXQgPT0gLUVCVVNZKQotCQkJY29udGludWU7Ci0JCWVsc2UgaWYgKHJldCAmbHQ7IDApIHsKLQkJCXBvcnQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KIAkJcnRjcF9leHAtJmd0O3R1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCAmIzQzOyAxKTsKLQkJcmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsCi0JCQkJCSAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTsKJiM0MzsKJiM0MzsJCXJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsCiYjNDM7CQkJCQkJTkZfQ1RfRVhQX0ZfU0tJUF9NQVNURVIpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKLQkJZWxzZSBpZiAocmV0ID09IC1FQlVTWSkgewotCQkJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTsKJiM0MzsJCWVsc2UgaWYgKHJldCA9PSAtRUJVU1kpCiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChyZXQgJmx0OyAwKSB7Ci0JCQluZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApOwomIzQzOwkJZWxzZSBpZiAocmV0ICZsdDsgMCkgewogCQkJcG9ydCA9IDA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCBhOWVhZjk0NTVjNzc4My4uYWYzNTdmNmM1MDcwYjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC00NSw4ICYjNDM7NDUsNiBAQCBlbnVtIHsKIAlORlRfVkFMSURBVEVfRE8sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJobHRhYmxlIG5mdF9vYmpuYW1lX2h0OwotCiBzdGF0aWMgdTMyIG5mdF9jaGFpbl9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTsKIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2hfb2JqKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTsKIHN0YXRpYyBpbnQgbmZ0X2NoYWluX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICosIGNvbnN0IHZvaWQgKik7CkBAIC0xNjM1LDYgJiM0MzsxNjMzLDEwIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJaWYgKGVycikKIAkJZ290byBlcnJfY2hhaW5faHQ7CiAKJiM0MzsJZXJyID0gcmhsdGFibGVfaW5pdCgmYW1wO3RhYmxlLSZndDtvYmpuYW1lX2h0LCAmYW1wO25mdF9vYmpuYW1lX2h0X3BhcmFtcyk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfb2JqX2h0OwomIzQzOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dGFibGUtJmd0O2NoYWlucyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7c2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7b2JqZWN0cyk7CkBAIC0xNjUzLDYgJiM0MzsxNjU1LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3dGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbywKIAlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3RhYmxlLSZndDtsaXN0LCAmYW1wO25mdF9uZXQtJmd0O3RhYmxlcyk7CiAJcmV0dXJuIDA7CiBlcnJfdHJhbnM6CiYjNDM7CXJobHRhYmxlX2Rlc3Ryb3koJmFtcDt0YWJsZS0mZ3Q7b2JqbmFtZV9odCk7CiYjNDM7ZXJyX29ial9odDoKIAlyaGx0YWJsZV9kZXN0cm95KCZhbXA7dGFibGUtJmd0O2NoYWluc19odCk7CiBlcnJfY2hhaW5faHQ6CiAJa2ZyZWUodGFibGUtJmd0O3VkYXRhKTsKQEAgLTE4MTksNiAmIzQzOzE4MjMsNyBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfdGFibGVfZGVzdHJveShzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSkKIAkJcmV0dXJuOwogCiAJcmhsdGFibGVfZGVzdHJveSgmYW1wO3RhYmxlLSZndDtjaGFpbnNfaHQpOwomIzQzOwlyaGx0YWJsZV9kZXN0cm95KCZhbXA7dGFibGUtJmd0O29iam5hbWVfaHQpOwogCWtmcmVlKHRhYmxlLSZndDtuYW1lKTsKIAlrZnJlZSh0YWJsZS0mZ3Q7dWRhdGEpOwogCWtmcmVlKHRhYmxlKTsKQEAgLTgwODYsNyAmIzQzOzgwOTEsNyBAQCB2b2lkIG5mdF91bnJlZ2lzdGVyX29iaihzdHJ1Y3QgbmZ0X29iamVjdF90eXBlICpvYmpfdHlwZSkKIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7CiAKIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIG9ianR5cGUsCiAJCQkJICB1OCBnZW5tYXNrKQogewpAQCAtODEwMiw3ICYjNDM7ODEwNyw3IEBAIHN0cnVjdCBuZnRfb2JqZWN0ICpuZnRfb2JqX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCSAgICAgIWxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChuZXQpKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0ID0gcmhsdGFibGVfbG9va3VwKCZhbXA7bmZ0X29iam5hbWVfaHQsICZhbXA7aywgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTsKJiM0MzsJbGlzdCA9IHJobHRhYmxlX2xvb2t1cCgmYW1wO3RhYmxlLSZndDtvYmpuYW1lX2h0LCAmYW1wO2ssIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7CiAJaWYgKCFsaXN0KQogCQlnb3RvIG91dDsKIApAQCAtODM4Miw3ICYjNDM7ODM4Nyw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld29iaihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl90cmFuczsKIAotCWVyciA9IHJobHRhYmxlX2luc2VydCgmYW1wO25mdF9vYmpuYW1lX2h0LCAmYW1wO29iai0mZ3Q7cmhsaGVhZCwKJiM0MzsJZXJyID0gcmhsdGFibGVfaW5zZXJ0KCZhbXA7dGFibGUtJmd0O29iam5hbWVfaHQsICZhbXA7b2JqLSZndDtyaGxoZWFkLAogCQkJICAgICAgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBlcnJfb2JqX2h0OwpAQCAtODU2Nyw4ICYjNDM7ODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gaW5mby0mZ3Q7ZXh0YWNrOwogCXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIoaW5mby0mZ3Q7bmV0KTsKIAl1OCBmYW1pbHkgPSBpbmZvLSZndDtuZm1zZy0mZ3Q7bmZnZW5fZmFtaWx5OwotCWNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25ldDsKJiM0MzsJc3RydWN0IG5mdF90YWJsZSAqdGFibGU7CiAJc3RydWN0IG5mdF9vYmplY3QgKm9iajsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKIAl1MzIgb2JqdHlwZTsKQEAgLTEwNDM3LDkgJiM0MzsxMDQ0Miw5IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbikKIAkJbmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7CiB9CiAKLXN0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopCiYjNDM7c3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF90YWJsZSAqdGFibGUsIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopCiB7Ci0JcmhsdGFibGVfcmVtb3ZlKCZhbXA7bmZ0X29iam5hbWVfaHQsICZhbXA7b2JqLSZndDtyaGxoZWFkLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpOwomIzQzOwlyaGx0YWJsZV9yZW1vdmUoJmFtcDt0YWJsZS0mZ3Q7b2JqbmFtZV9odCwgJmFtcDtvYmotJmd0O3JobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7CiAJbGlzdF9kZWxfcmN1KCZhbXA7b2JqLSZndDtsaXN0KTsKIH0KIApAQCAtMTExMjQsNyAmIzQzOzExMTI5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCWJyZWFrOwogCQljYXNlIE5GVF9NU0dfREVMT0JKOgogCQljYXNlIE5GVF9NU0dfREVTVFJPWU9CSjoKLQkJCW5mdF9vYmpfZGVsKG5mdF90cmFuc19vYmoodHJhbnMpKTsKJiM0MzsJCQluZnRfb2JqX2RlbCh0YWJsZSwgbmZ0X3RyYW5zX29iaih0cmFucykpOwogCQkJbmZfdGFibGVzX29ial9ub3RpZnkoJmFtcDtjdHgsIG5mdF90cmFuc19vYmoodHJhbnMpLAogCQkJCQkgICAgIHRyYW5zLSZndDttc2dfdHlwZSk7CiAJCQlicmVhazsKQEAgLTExNDE2LDcgJiM0MzsxMTQyMSw3IEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbikKIAkJCQluZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7CiAJCQl9IGVsc2UgewogCQkJCW5mdF91c2VfZGVjX3Jlc3RvcmUoJmFtcDt0YWJsZS0mZ3Q7dXNlKTsKLQkJCQluZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7CiYjNDM7CQkJCW5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX0RFTE9CSjoKQEAgLTEyMDQzLDcgJiM0MzsxMjA0OCw3IEBAIHN0YXRpYyB2b2lkIF9fbmZ0X3JlbGVhc2VfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSkKIAkJbmZ0X3NldF9kZXN0cm95KCZhbXA7Y3R4LCBzZXQpOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBuZSwgJmFtcDt0YWJsZS0mZ3Q7b2JqZWN0cywgbGlzdCkgewotCQluZnRfb2JqX2RlbChvYmopOwomIzQzOwkJbmZ0X29ial9kZWwodGFibGUsIG9iaik7CiAJCW5mdF91c2VfZGVjKCZhbXA7dGFibGUtJmd0O3VzZSk7CiAJCW5mdF9vYmpfZGVzdHJveSgmYW1wO2N0eCwgb2JqKTsKIAl9CkBAIC0xMjIyNSwxMCAmIzQzOzEyMjMwLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpCiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX25ldGRldl9ub3RpZmllcjsKIAotCWVyciA9IHJobHRhYmxlX2luaXQoJmFtcDtuZnRfb2JqbmFtZV9odCwgJmFtcDtuZnRfb2JqbmFtZV9odF9wYXJhbXMpOwotCWlmIChlcnIgJmx0OyAwKQotCQlnb3RvIGVycl9yaHRfb2JqbmFtZTsKLQogCWVyciA9IG5mdF9vZmZsb2FkX2luaXQoKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBlcnJfb2ZmbG9hZDsKQEAgLTEyMjUxLDggJiM0MzsxMjI1Miw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX3RhYmxlc19tb2R1bGVfaW5pdCh2b2lkKQogZXJyX25ldGxpbmtfbm90aWZpZXI6CiAJbmZ0X29mZmxvYWRfZXhpdCgpOwogZXJyX29mZmxvYWQ6Ci0JcmhsdGFibGVfZGVzdHJveSgmYW1wO25mdF9vYmpuYW1lX2h0KTsKLWVycl9yaHRfb2JqbmFtZToKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYW1wO25mX3RhYmxlc19mbG93dGFibGVfbm90aWZpZXIpOwogZXJyX25ldGRldl9ub3RpZmllcjoKIAluZl90YWJsZXNfY29yZV9tb2R1bGVfZXhpdCgpOwpAQCAtMTIyNzQsNyAmIzQzOzEyMjczLDYgQEAgc3RhdGljIHZvaWQgX19leGl0IG5mX3RhYmxlc19tb2R1bGVfZXhpdCh2b2lkKQogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYW1wO25mX3RhYmxlc19uZXRfb3BzKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7dHJhbnNfZ2Nfd29yayk7CiAJcmN1X2JhcnJpZXIoKTsKLQlyaGx0YWJsZV9kZXN0cm95KCZhbXA7bmZ0X29iam5hbWVfaHQpOwogCW5mX3RhYmxlc19jb3JlX21vZHVsZV9leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwppbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTI1OSw5ICYjNDM7MjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsCiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLAogCQkJCSAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKQogewotCXVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrOwogCXN0cnVjdCBuZnRfZGF0YSBtYXNrID0ge307Ci0JX19iZTMyIHJlbWFpbmRlcl9tYXNrOwogCiAJaWYgKHByaXZfbGVuID09IGZpZWxkX2xlbikgewogCQltZW1zZXQoJmFtcDtyZWctJmd0O21hc2ssIDB4ZmYsIHByaXZfbGVuKTsKQEAgLTI3MCwxNSAmIzQzOzI2OCw3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQltZW1zZXQoJmFtcDttYXNrLCAweGZmLCBmaWVsZF9sZW4pOwotCXJlbWFpbmRlciA9IHByaXZfbGVuICUgc2l6ZW9mKHUzMik7Ci0JaWYgKHJlbWFpbmRlcikgewotCQlrID0gcHJpdl9sZW4gLyBzaXplb2YodTMyKTsKLQkJZGVsdGEgPSBmaWVsZF9sZW4gLSBwcml2X2xlbjsKLQkJcmVtYWluZGVyX21hc2sgPSBodG9ubCh+KCgxICZsdDsmbHQ7IChkZWx0YSAqIEJJVFNfUEVSX0JZVEUpKSAtIDEpKTsKLQkJbWFzay5kYXRhW2tdID0gKF9fZm9yY2UgdTMyKXJlbWFpbmRlcl9tYXNrOwotCX0KLQomIzQzOwltZW1zZXQoJmFtcDttYXNrLCAweGZmLCBwcml2X2xlbik7CiAJbWVtY3B5KCZhbXA7cmVnLSZndDttYXNrLCAmYW1wO21hc2ssIGZpZWxkX2xlbik7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCmluZGV4IDI3MDRiNGI2MGQxZTA0Li45YWYwZmE4OTVmNzMwMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlIHsKIAlyZWZjb3VudF90IHVzZTsKIAl1X2ludDhfdCBmYW1pbHk7CiAJYm9vbCBybmRfaW5pdGlhbGl6ZWQ7CiYjNDM7CWJvb2wgcmF0ZW1hdGNoOwogCiAJc3RydWN0IGhhc2hsaW1pdF9jZmczIGNmZzsJLyogY29uZmlnICovCiAKQEAgLTMyMyw2ICYjNDM7MzI0LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsCiAJCWt2ZnJlZShoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KJiM0MzsJaGluZm8tJmd0O3JhdGVtYXRjaCA9ICEhKGNmZy0mZ3Q7bW9kZSAmYW1wOyBYVF9IQVNITElNSVRfUkFURV9NQVRDSCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtoaW5mby0mZ3Q7bG9jayk7CiAKIAlzd2l0Y2ggKHJldmlzaW9uKSB7CkBAIC04NzIsNyAmIzQzOzg3NCwxMCBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsCiAJfQogCiAJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwotCWlmIChyZXZpc2lvbiAmZ3Q7PSAzICZhbXA7JmFtcDsgY2ZnLSZndDttb2RlICZhbXA7IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIKSB7CiYjNDM7CWlmIChjZmctJmd0O21vZGUgJmFtcDsgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHsKJiM0MzsJCWlmIChyZXZpc2lvbiAmbHQ7IDMpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCWlmIChjZmctJmd0O2F2ZyA9PSAwIHx8IGNmZy0mZ3Q7YXZnICZndDsgVTMyX01BWCkgewogCQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2ludmFsaWQgcmF0ZVxuJiMzNDspOwogCQkJcmV0dXJuIC1FUkFOR0U7CkBAIC05MDUsNiAmIzQzOzkxMCwxNSBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsCiAJCQltdXRleF91bmxvY2soJmFtcDtoYXNobGltaXRfbXV0ZXgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKChjZmctJmd0O21vZGUgJmFtcDsgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0ggJmFtcDsmYW1wOwomIzQzOwkJICAgICAhKCpoaW5mbyktJmd0O3JhdGVtYXRjaCkgfHwKJiM0MzsJCSAgICAoIShjZmctJmd0O21vZGUgJmFtcDsgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICgqaGluZm8pLSZndDtyYXRlbWF0Y2gpKSB7CiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7aGFzaGxpbWl0X211dGV4KTsKJiM0MzsJCQlodGFibGVfcHV0KCpoaW5mbyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCW11dGV4X3VubG9jaygmYW1wO2hhc2hsaW1pdF9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCBmYjFjNTlkNDU1NjdhZi4uNDQ5YzUxOGJkOTQ3ZGMgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKQEAgLTYxNyw3ICYjNDM7NjE3LDExIEBAIGlwIC02IC1uZXQgJiMzNDskbnNyMiYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZWUxOjM6OjEKIGlwIC1uZXQgJiMzNDskbnMyJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIDEwLjAuMi4xCiBpcCAtNiAtbmV0ICYjMzQ7JG5zMiYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjEKIAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFwKJiM0MzsJJiMzOTttZXRhIG9pZiB0dW4wIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMCBhY2NlcHQmIzM5OwomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFwKJiM0MzsJJiMzOTttZXRhIG9pZiB0dW42IHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuNiBhY2NlcHQmIzM5OwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXAogCSYjMzk7bWV0YSBvaWYgJiMzNDt2ZXRoMCYjMzQ7IHRjcCBzcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX3JlcGwgYWNjZXB0JiMzOTsKQEAgLTYyOSw3ICYjNDM7NjMzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxICYjMzQ7SVBJUCB0dW5uZWwmIzM0OzsgdGhlbgogZmkKIAogaWYgdGVzdF90Y3BfZm9yd2FyZGluZyAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgotCWVjaG8gJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCYjMzQ7CiYjNDM7CWNoZWNrX2NvdW50ZXJzICYjMzQ7ZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIElQNklQNiB0dW5uZWwmIzM0OwogZWxzZQogCWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsJiMzNDsgMSZndDsmYW1wOzIKIAlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CkBAIC02NDIsNiAmIzQzOzY0Niw4IEBAIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHZldGgxLjEwIHVwCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCAxOTIuMTY4LjIwLjEvMjQgZGV2IHZldGgxLjEwCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBhZGRyIGFkZCBmZWUxOjQ6OjEvNjQgZGV2IHZldGgxLjEwIG5vZGFkCiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS8xMC5mb3J3YXJkaW5nPTEgJmd0OyAvZGV2L251bGwKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcCiYjNDM7CSYjMzk7bWV0YSBvaWYgdmV0aDEuMTAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQmIzM5OwogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJiMzOTttZXRhIG9pZiB2ZXRoMS4xMCBhY2NlcHQmIzM5OwogCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjAuMTAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yCkBAIC02NDksNiAmIzQzOzY1NSw4IEBAIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHR1bjAuMTAgdXAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIDE5Mi4xNjguMjAwLjEvMjQgZGV2IHR1bjAuMTAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIwMC4yCiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAomIzQzO2lwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFwKJiM0MzsJJiMzOTttZXRhIG9pZiB0dW4wLjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0JiMzOTsKIGlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICYjMzk7bWV0YSBvaWYgdHVuMC4xMCBhY2NlcHQmIzM5OwogCiBpcCAtbmV0ICYjMzQ7JG5zcjEmIzM0OyBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lCkBAIC02NTYsNiAmIzQzOzY2NCw4IEBAIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGxpbmsgc2V0IHR1bjYuMTAgdXAKIGlwIC1uZXQgJiMzNDskbnNyMSYjMzQ7IGFkZHIgYWRkIGZlZTE6NTo6MS82NCBkZXYgdHVuNi4xMCBub2RhZAogaXAgLTYgLW5ldCAmIzM0OyRuc3IxJiMzNDsgcm91dGUgZGVsZXRlIGRlZmF1bHQKIGlwIC02IC1uZXQgJiMzNDskbnNyMSYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZWUxOjU6OjIKJiM0MztpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcCiYjNDM7CSYjMzk7bWV0YSBvaWYgdHVuNi4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCYjMzk7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAmIzM5O21ldGEgb2lmIHR1bjYuMTAgYWNjZXB0JiMzOTsKIAogaXAgLW5ldCAmIzM0OyRuc3IyJiMzNDsgbGluayBhZGQgbGluayB2ZXRoMCBuYW1lIHZldGgwLjEwIHR5cGUgdmxhbiBpZCAxMApAQCAtNjgzLDcgJiM0Mzs2OTMsNyBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0ICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgJiMzNDtJUElQIHR1bm5lbCBvdmVyIHZsYW4mIzM0OzsgdGhlbgogZmkKIAogaWYgdGVzdF90Y3BfZm9yd2FyZGluZyAmIzM0OyRuczEmIzM0OyAmIzM0OyRuczImIzM0OyAxIDYgJiMzNDtbZGVhZDoyOjo5OV0mIzM0OyAxMjM0NTsgdGhlbgotCWVjaG8gJiMzNDtQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW4mIzM0OwomIzQzOwljaGVja19jb3VudGVycyAmIzM0O2Zsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsIG92ZXIgdmxhbiYjMzQ7CiBlbHNlCiAJZWNobyAmIzM0O0ZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNklQNiB0dW5uZWwgb3ZlciB2bGFuJiMzNDsgMSZndDsmYW1wOzIKIAlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGtleSBuZXR3b3JrIHN1YnN5c3RlbXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCByZWFjaCBpbnRvIHNvbWUgdmVyeSBjcnVjaWFsIG5ldHdvcmsgZmlsdGVyaW5nIGFuZCBsb2FkIGJhbGFuY2luZyBsb2dpYywgc28sIGFzIGFuIGV4cGVydCwgSSBjYW4gdGVsbCBpbW1lZGlhdGVseSwgeWVzLCAqKldvcnRoRnV6emluZz10cnVlKiouCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYXJlYXMgYW5kIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBhc3BlY3RzLCB0aGUgcG90ZW50aWFsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgYW5kIHRoZSByZWxldmFudCAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyB3ZSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBmb3IgdGVzdGluZy4KCkZpcnN0LCB3ZSYjMzk7cmUgbG9va2luZyBhdCAqKmBuZXQvbmV0ZmlsdGVyL2lwdnMvYCoqLiBUaGlzIGlzIElQVlMsIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBzdHVmZiwgcmlnaHQgaW4gdGhlIGNvcmU6IGNvbm5lY3Rpb24gaGFuZGxpbmcsIE5BVCwgdGhlIHdvcmtzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIE1ha2Ugc3VyZSBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYCBhcmUgYWxsIGVuYWJsZWQgYW5kIGZ1bmN0aW9uYWwgZm9yIHRoZXNlLgoKTmV4dCwgd2UmIzM5O3ZlIGdvdCBDb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgYW5kIHRoZSBTSVAvSC4zMjMgTkFUIGhlbHBlcnMgaW4gKipgbmV0L25ldGZpbHRlci9gKiouIFNwZWNpZmljYWxseSwgYG5mX2Nvbm50cmFja19leHBlY3QuY2AsIGBuZl9jb25udHJhY2tfc2lwLmNgLCBgbmZfbmF0X3NpcC5jYCwgYW5kIGBuZl9uYXRfaDMyMy5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb246IGBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyYCwgYG5hdF9ydHBfcnRjcGAsIGBuZl9uYXRfc2RwX21lZGlhYC4gQ29uZmlncyBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfTkFUX1NJUGAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGFuZCBgTkZfTkFUX0gzMjNgIGFyZSB0aGUga2V5IGVuYWJsaW5nIGZsYWdzIGhlcmUuCgpNb3Zpbmcgb24sIHdlJiMzOTtyZSBsb29raW5nIGF0ICoqYG5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhgKiogYW5kICoqYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCoqLiBMb29rcyBsaWtlIGBuZl90YWJsZXNgIGlzIHVzaW5nIGByaGx0YWJsZWAgZm9yIG9iamVjdCBsb29rdXAgYnkgbmFtZS4gRm9yIGBuZl90YWJsZXNgLCB0aGUgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFyZTogYG5mdF9vYmpfbG9va3VwYCwgYG5mX3RhYmxlc19uZXd0YWJsZWAsIGBuZl90YWJsZXNfdGFibGVfZGVzdHJveWAsIGBuZl90YWJsZXNfbmV3b2JqYCwgYG5mX3RhYmxlc19jb21taXRgLCBhbmQgYF9fbmZfdGFibGVzX2Fib3J0YC4gSSYjMzk7bGwgbmVlZCBgTkZfVEFCTEVTYCB0byB0ZXN0IHRoaXMgcHJvcGVybHkuCgpBbHNvLCB0aGVyZSBhcmUgc29tZSBmaXhlcyByZWxhdGVkIHRvICoqYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AqKiBhbmQgKipgbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuY2AqKi4KCkxhc3RseSwgdGhlICoqYHh0X2hhc2hsaW1pdC5jYCoqIGZpeCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGFjdGluZyBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAgYW5kIGBodGFibGVfY3JlYXRlYC4gVGhpcyBsb29rcyBpbXBvcnRhbnQsIHNvIG1ha2Ugc3VyZSBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAgaXMgc2V0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGNvbmZpZ3MgdXNpbmcgY29kZSBzZWFyY2g7IG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgZ2l2ZXMgdXMgYSBzb2xpZCBiYXNpcyBmb3IgdGFyZ2V0ZWQgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTEyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYElQX1ZTX0lQVjZgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBJUF9WU19JUFY2YC4gVW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBjcml0aWNhbCwgb2YgY291cnNlLCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBiZWRyb2NrIG9mIGhvdyB0cmFmZmljIGlzIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBteSBtaW5kIGlzIGN1cnJlbnRseSBmb2N1c2VkIG9uOgoKKiAgICoqSXRzIHN0YXR1czoqKiBJcyBpdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgcGFydGlhbGx5IGNvbmZpZ3VyZWQ/IFdoYXQga2VybmVsIG1vZHVsZSB2ZXJzaW9ucyBhcmUgd2Ugd29ya2luZyB3aXRoPwoqICAgKipDb25mbGljdCByZXNvbHV0aW9uOioqIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgcnVsZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtYXkgY29uZmxpY3Qgd2l0aCBvdXIgZGVzaXJlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBhIG1ldGhvZGljYWwgZXhhbWluYXRpb24gb2YgdGhlIGN1cnJlbnQgc2V0dXAgdG8gc2VlIGlmIGl0IHBsYXlzIHdlbGwgd2l0aCB0aGUgcmVzdCBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUuCiogICAqKlNlY3VyaXR5IGltcGxpY2F0aW9uczoqKiBXaGF0IGFyZSB0aGUgc2VjdXJpdHkgcG9saWN5IGNvbnNpZGVyYXRpb25zIHdpdGggdGhlIHVzZSBvZiB0aGUgSVBWNiBtb2R1bGU/CiogICAqKk9wdGltaXphdGlvbjoqKiBXaGF0IG9wdGltaXphdGlvbnMsIGlmIGFueSwgaGF2ZSBiZWVuIGFwcGxpZWQgcHJldmlvdXNseT8gSXMgdGhlcmUgYW55IGRvY3VtZW50YXRpb24gb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbj8KCkVzc2VudGlhbGx5LCBJJiMzOTttIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggbXkgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFscyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDMyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUy9JUHY2IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgcG9wcGVkIHVwLCBzcGVjaWZpY2FsbHkgYElQX1ZTX0lQVjZgLCBhbmQgdGhlIGhpbnQgcG9pbnRzIHRvIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFRoYXQgc291bmRzIGFib3V0IHJpZ2h0LCB0aG91Z2ggSSBhbHdheXMgZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGVpdGhlciBqdW1wIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQsIG9yLCB0byBrZWVwIHRoaW5ncyBxdWljaywgSSYjMzk7bGwganVzdCBydW4gYSBgZ3JlcGAgZm9yIHRoZSBzeW1ib2wuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJyb2FkZXIgY29udGV4dCByZWFsbHkgZmFzdCAtIHdoZXJlIGVsc2UgaXQmIzM5O3MgcmVmZXJlbmNlZCwgZGVwZW5kZW5jaWVzLCBhbmQgc28gb24uIEVmZmljaWVuY3kgaXMga2V5IHdoZW4gbmF2aWdhdGluZyB0aGVzZSBjb25maWcgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBMb2FkIEJhbGFuY2luZyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBgQ09ORklHX0lQX1ZTX0lQVjZgIHNwcmlua2xlZCB0aHJvdWdob3V0IHRoaXMgY29kZS4gT2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGVyZSB0aGlzIHByZXByb2Nlc3NvciBtYWNybyBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLCBiZWNhdXNlIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgYmVoYXZpb3IgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGxvYWQgYmFsYW5jaW5nIGZlYXR1cmVzIEkmIzM5O20gbG9va2luZyBhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgS2NvbmZpZyBvcHRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIEkgZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhpcyBtYWNybyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCByZWFzb25pbmcgYmVoaW5kIHRoZXNlIGltcGxlbWVudGF0aW9uIGNob2ljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yNz1pZiBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyOTpjb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5NzEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZyoqCgpSaWdodCwgc28gSSYjMzk7dmUgYmVlbiB3cmVzdGxpbmcgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQmIzM5O3Mgc3RhcmluZyBtZSBpbiB0aGUgZmFjZS4gSXQmIzM5O3MgYWN0dWFsbHkgYGNvbmZpZyBJUF9WU19JUFY2YCwgYnV0IEkgY29tcGxldGVseSBtaXNzZWQgdGhlIHRhYiBjaGFyYWN0ZXIgd2hlbiBJIHdhcyBidWlsZGluZyBteSByZWd1bGFyIGV4cHJlc3Npb24uIEkgd2FzIHJ1bm5pbmcgYGNvbmZpZyBJUF9WU19JUFY2YCBpbnN0ZWFkISBSb29raWUgbWlzdGFrZSwgSSByZWFsbHkgc2hvdWxkIGhhdmUga25vd24gYmV0dGVyLCBJIHJlYWxseSBzaG91bGQgaGF2ZSB0ZXN0ZWQgaXQgYWdhaW5zdCB0aGUgc291cmNlIGEgYml0IG1vcmUgdmlnb3JvdXNseS4KCk5vdyB0aGF0IEkmIzM5O3ZlIGhvcGVmdWxseSBjbGVhcmVkIHVwIHRoYXQgb25lIHBvdGVudGlhbCByZWQgaGVycmluZywgSSBuZWVkIHRvIGNoZWNrIG91dCBhIGNvdXBsZSBvdGhlciwgcmVsYXRlZCBzZXR0aW5ncyBmb3IgdGhlIE5BVCBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYE5GX05BVF9TSVBgIGFuZCBgTkZfTkFUX0gzMjNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgY2F1c2luZyBhIGNvbmZsaWN0IG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRob3NlIHZvaWNlLW92ZXItSVAgb3Igc2Vzc2lvbiBlc3RhYmxpc2htZW50IHNjZW5hcmlvcy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgbm93IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUX1NJUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDI2PWNvbmZpZyBORl9OQVRfSVJDXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MzE6Y29uZmlnIE5GX05BVF9TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzItXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM0NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipORl9OQVRfSDMyMyAtIEEgTGluZ2VyaW5nIFF1ZXN0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHNvbWV0aGluZyBsaWtlIGEgZmlyZXdhbGwgb3IgYSByb3V0ZXIsIHJpZ2h0PyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIE5BVCwgdGhhdCYjMzk7cyBjbGVhci4gQnV0IHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyAqc3BlY2lmaWNhbGx5KiBgTkZfTkFUX0gzMjNgLiBXaGF0IGFib3V0IGl0PyBJdOKAmXMgYSB2ZXJ5IHBvaW50ZWQgcXVlcnksIHNvIHNvbWV0aGluZ+KAmXMgcGlxdWVkIG15IGludGVyZXN0IHJlZ2FyZGluZyBILjMyMy4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBkaWFnbm9zZS4gTWF5YmUgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcgYW4gSC4zMjMtYmFzZWQgVm9JUCBzZXR1cCBhbmQgSSYjMzk7bSB3b25kZXJpbmcgaWYgYSBzcGVjaWZpYyBtb2R1bGUgcmVsYXRlZCB0byB0aGF0IHByb3RvY29sIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiBPciBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgZXZlbiB0aGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdHMgTkFUIGltcGxlbWVudGF0aW9uLiBJcyBpdCBwcm9wZXJseSBtYW5hZ2luZyB0aGUgc2lnbmFsaW5nIGFuZCBtZWRpYSBzdHJlYW1zPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IElzIGl0IHNvbWV0aGluZyBJIG5lZWQgdG8gY29uZmlndXJlLCBkZWJ1Zywgb3IgbWF5YmUgZXZlbiByZXBsYWNlPyBUaGUgbGFjayBvZiBjb250ZXh0IGltcGxpZXMgdGhhdCBJJiMzOTt2ZSBhbHJlYWR5IHNldCBhIGxvdCBvZiBzdGFnZSwgYW5kIHRoYXQganVzdCB0aGUgbmFtZSBvZiBhIHNwZWNpZmljIG1vZHVsZSByZWxhdGVkIHRvIEguMzIzIGlzIGVub3VnaCB0byBzcHVyIHRob3VnaHQuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdldCB0byB0aGUgcm9vdCBvZiBhIHZlcnkgc3BlY2lmaWMsIGFuZCBwcm9iYWJseSBub24tdHJpdmlhbCwgZGV0YWlsIHdpdGhpbiB0aGlzIHdob2xlIG5ldHdvcmsgdHJhbnNsYXRpb24gcHJvY2Vzcy4gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gY29udGludWUgbXkgbGluZSBvZiByZWFzb25pbmcsIGJ1dCB0aGF0IHNpbmdsZSBtb2R1bGUgbmFtZSBpcyBjbGVhcmx5IHRoZSBrZXkgdG8gdW5sb2NraW5nIHRoZSBuZXh0IHBpZWNlIG9mIHRoaXMgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUX0gzMjMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MTE4PWNvbmZpZyBORl9OQVRfUFBUUFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfTkFUX0gzMjNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKlRoaW5raW5nIEFib3V0IEhhc2hsaW1pdHMgYW5kIE5ldGZpbHRlcioqCgpIbW0sIGBORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUYC4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgYWx3YXlzIG1ha2VzIG1lIHRoaW5rLi4uIGhvdyByb2J1c3QgaXMgdGhlIGltcGxlbWVudGF0aW9uIHJlYWxseT8gV2hhdCBhcmUgdGhlIGtleSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhdCBzY2FsZT8gSXMgaXQgdGhyZWFkLXNhZmUgaW4gYWxsIHRoZSB3YXlzIGl0ICpuZWVkcyogdG8gYmU/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHRoYXQgbWlnaHQgcmVhciB0aGVpciB1Z2x5IGhlYWRzIHVuZGVyIGhlYXZ5IGxvYWQsIGNhdXNpbmcgdW5leHBlY3RlZCBkcm9wcyBvciBldmVuIHdvcnNlLCBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyDigJMgaG93IGFyZSBjb2xsaXNpb25zIGhhbmRsZWQgd2l0aGluIHRoZSBoYXNoIHRhYmxlPyBBbmQgd2hhdCBhYm91dCBtZW1vcnkgY29uc3VtcHRpb24gd2l0aCBhIGxhcmdlIG51bWJlciBvZiBydWxlcz8gQXJlIHRoZXJlIGFueSBnb3RjaGFzIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaGFzaCBsaW1pdHMgdGhlbXNlbHZlcz8gSSBzaG91bGQgcmV2aWV3IHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWNlbnQgcGF0Y2hlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTMxND1jb25maWcgTkVURklMVEVSX1hUX01BVENIX0VTUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzMjM6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzI0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoYXNobGltaXRcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTQ2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEVzc2VudGlhbCBOZXR3b3JrIFByb3RvY29sIENvbnN0YW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5kYW1lbnRhbCBjb25zdGFudHMgc3RyYWlnaHQgaW4gbXkgaGVhZCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFZpcnR1YWwgU2VydmVyIChWUykgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGNvcnJlY3QgZGVmaW5pdGlvbnMgZm9yIHRoZSBwcm90b2NvbCBpZGVudGlmaWVycy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdmFsdWVzIGFuZCBhbnkgcG90ZW50aWFsIG51YW5jZXMgb2YgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYSBiZWF0LiBBZnRlciBhbGwsIGluY29ycmVjdCB2YWx1ZXMgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgc2lnbmlmaWNhbnQgYW5kIGVhc2lseSBvdmVybG9va2VkIGVycm9ycyBkb3duc3RyZWFtIGluIHRyYWZmaWMgcm91dGluZyBvciBoZWFsdGggY2hlY2tzLiBMZXQgbWUgbWFrZSBzdXJlIEkga25vdyB0aGUgdmFsdWVzLiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1BST1RPXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIHRoZSBJUFZTIENvbmZpZyBmb3IgUFJPVE9fVENQKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBUQ1Agd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciBjb2RlLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSB3b3VsZCBiZSB0aGUgYEtjb25maWdgIGZpbGUsIGxvY2F0ZWQgdW5kZXIgdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSBrZXJuZWwgbW9kdWxlcyBkZWZpbmUgdGhlaXIgYnVpbGQgb3B0aW9ucy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgUFJPVE9fVENQYC4gVGhpcyBzaG91bGQgcG9pbnQgbWUgdG93YXJkcyBob3cgVENQIGxvYWQgYmFsYW5jaW5nIGFuZCBvdGhlciByZWxhdGVkIFRDUC1zcGVjaWZpYyBmZWF0dXJlcyB3aXRoaW4gSVBWUyBhcmUgY29uZmlndXJlZC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFwmIzM0O0lQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXHRJUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODIyCgkJCQkJCQlvdXRwdXQ6IDQwNwoJCQkJCQkJdGhvdWdodHM6IDk3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgU3ltYm9sIFNldCBmb3IgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgSSBuZWVkIHRvIGV4YW1pbmUgcmVsYXRlZCB0byBJUFZTLCBjb25udHJhY2ssIE5ldGZpbHRlciB0YWJsZXMsIGFuZCBoYXNobGltaXQuIEZpcnN0LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAgYXJlIGFsbCB2YWxpZCBwcm90b2NvbCBkZWZpbml0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQuIEkmIzM5O3ZlIG5vdGVkIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYElQX1ZTX1BST1RPX1NDVFBgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9OQVRfU0lQYCwgYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX05BVF9IMzIzYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAuCgpOZXh0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBtb3JlIGdyYW51bGFyIHN5bWJvbHMsIGZvY3VzaW5nIG9uIHRob3NlIHRoYXQgYXJlIGxpa2VseSByZWxldmFudC4KCkZvciBJUFZTLCBJJiMzOTt2ZSBpZGVudGlmaWVkOiBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGFuZCBgc2N0cF9jc3VtX2NoZWNrYC4KCkluIHRoZSBjb25udHJhY2sgcmVhbG0sIEkmIzM5O20gbG9va2luZyBhdDogYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgLCBgbmF0X3J0cF9ydGNwYCwgYW5kIGBuZl9uYXRfc2RwX21lZGlhYC4KCk5ldGZpbHRlciB0YWJsZXMgYXJlIHJlcHJlc2VudGVkIGJ5OiBgbmZ0X29ial9sb29rdXBgLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc190YWJsZV9kZXN0cm95YCwgYG5mX3RhYmxlc19uZXdvYmpgLCBhbmQgYG5mdF9vYmpfZGVsYC4KCkZpbmFsbHksIGZvciB4dF9oYXNobGltaXQsIHRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlOiBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAgYW5kIGBodGFibGVfY3JlYXRlYC4KCk5vdywgYSBxdWljayBjaGVjayBvbiB0aGUgdmlzaWJpbGl0eSBvZiBmdW5jdGlvbnMgaXMgbmVjZXNzYXJ5LiBJdCBzZWVtcyBgbmZ0X29ial9kZWxgIGlzIHN0YXRpYyB3aXRoaW4gYG5mX3RhYmxlc19hcGkuY2AuIEZ1cnRoZXIsIGBuZl90YWJsZXNfbmV3dGFibGVgLCBgbmZfdGFibGVzX3RhYmxlX2Rlc3Ryb3lgLCBhbmQgYG5mX3RhYmxlc19uZXdvYmpgIGFyZSBhbHNvIHN0YXRpYy4gQWx0aG91Z2ggdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsuIEhvd2V2ZXIsIGBuZl90YWJsZXNfdGFibGVfZGVzdHJveWAgaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBhdm9pZCBpbmNsdWRpbmcgaXQuIEkmIzM5O2xsIHN0aWNrIHdpdGggYG5mdF9vYmpfbG9va3VwYCBhbmQgYG5mX3RhYmxlc19uZXd0YWJsZWAsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlLgoKYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgIGlzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBnb29kLiBgbmF0X3J0cF9ydGNwYCBhbmQgYG5mX25hdF9zZHBfbWVkaWFgIGFyZSBzdGF0aWMsIHJlc2lkaW5nIGluIGBuZl9uYXRfaDMyMy5jYCBhbmQgYG5mX25hdF9zaXAuY2AgcmVzcGVjdGl2ZWx5LgoKQ2hlY2tpbmcgdGhlIElQVlMgZnVuY3Rpb25zIGFnYWluLCBJIGZpbmQgdGhhdCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIHN0YXRpYyBpbiBgaXBfdnNfY29ubi5jYC4gYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YCBhcmUgZXhwb3J0ZWQuIGBpcF92c19vdXRfaWNtcGAgYW5kIGBpcF92c19pbl9pY21wYCBhcmUgc3RhdGljIGluIGBpcF92c19jb3JlLmNgLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7dmUgZmluYWxpemVkIG15IHNldCBvZiBzeW1ib2xzIHRvIGluY2x1ZGU6CgpgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBzY3RwX2NzdW1fY2hlY2tgLCBgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcmAsIGBuYXRfcnRwX3J0Y3BgLCBgbmZfbmF0X3NkcF9tZWRpYWAsIGBuZnRfb2JqX2xvb2t1cGAsIGBuZl90YWJsZXNfbmV3dGFibGVgLCBgbmZfdGFibGVzX25ld29iamAsIGBuZnRfb2JqX2RlbGAsIGFuZCBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAuCgpJIGJlbGlldmUgdGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCBhbmQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fU0NUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX05BVF9TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfTkFUX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXQmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0X3Y2JiMzNDssCiAgICAmIzM0O3RjcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3VkcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3NjdHBfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDtuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyJiMzNDssCiAgICAmIzM0O25hdF9ydHBfcnRjcCYjMzQ7LAogICAgJiMzNDtuZl9uYXRfc2RwX21lZGlhJiMzNDssCiAgICAmIzM0O25mdF9vYmpfbG9va3VwJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXd0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3b2JqJiMzNDssCiAgICAmIzM0O25mdF9vYmpfZGVsJiMzNDssCiAgICAmIzM0O2hhc2hsaW1pdF9tdF9jaGVja19jb21tb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtdWx0aXBsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zLCBpbmNsdWRpbmcgSVBWUyBjb25uZWN0aW9uIGhhbmRsaW5nIGFuZCBJQ01QL2NoZWNrc3VtIHByb2Nlc3NpbmcsIGNvbm50cmFjayBleHBlY3RhdGlvbiBoYW5kbGluZyBmb3IgU0lQIGFuZCBILjMyMywgbmZfdGFibGVzIG9iamVjdCBsb29rdXAgbWVjaGFuaXNtcywgYW5kIHh0X2hhc2hsaW1pdCBtYXRjaGluZy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfSVBWNiYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1NDVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NJUCYjMzQ7LAogICAgJiMzNDtORl9OQVRfU0lQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX05BVF9IMzIzJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9maWxsX2Nwb3J0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7LAogICAgJiMzNDt0Y3BfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDt1ZHBfY3N1bV9jaGVjayYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7bmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpciYjMzQ7LAogICAgJiMzNDtuYXRfcnRwX3J0Y3AmIzM0OywKICAgICYjMzQ7bmZfbmF0X3NkcF9tZWRpYSYjMzQ7LAogICAgJiMzNDtuZnRfb2JqX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3dGFibGUmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld29iaiYjMzQ7LAogICAgJiMzNDtuZnRfb2JqX2RlbCYjMzQ7LAogICAgJiMzNDtoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozNzo1NC4yMzg0MDY3NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDYxNDMyMzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX05BVF9TSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9OQVRfSDMyM1wiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCIsXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiLFxuICAgIFwic2N0cF9jc3VtX2NoZWNrXCIsXG4gICAgXCJuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyXCIsXG4gICAgXCJuYXRfcnRwX3J0Y3BcIixcbiAgICBcIm5mX25hdF9zZHBfbWVkaWFcIixcbiAgICBcIm5mdF9vYmpfbG9va3VwXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19uZXdvYmpcIixcbiAgICBcIm5mdF9vYmpfZGVsXCIsXG4gICAgXCJoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtdWx0aXBsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zLCBpbmNsdWRpbmcgSVBWUyBjb25uZWN0aW9uIGhhbmRsaW5nIGFuZCBJQ01QL2NoZWNrc3VtIHByb2Nlc3NpbmcsIGNvbm50cmFjayBleHBlY3RhdGlvbiBoYW5kbGluZyBmb3IgU0lQIGFuZCBILjMyMywgbmZfdGFibGVzIG9iamVjdCBsb29rdXAgbWVjaGFuaXNtcywgYW5kIHh0X2hhc2hsaW1pdCBtYXRjaGluZy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzc6NTQuMjM4NDE2OTExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODM0Mjk4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MWQ0OTQyYjg0YjViMmJmMWFjNzI4MGNmOWUxMDJlMjBkYTQ0NWYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDIzOjM3OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaFxcbmluZGV4IGRiYzYxNGRmZTBkNTY1Li5hYWZhMGMwNGY5MTdlYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcXG5AQCAtMTE1LDcgKzExNSw3IEBAIHN0cnVjdCBuZl9uYXRfc2lwX2hvb2tzIHtcXG4gXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbik7XFxuIFxcbiBcXHR2b2lkICgqc2VxX2FkanVzdCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMxNiBvZmYpO1xcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgczMyIG9mZik7XFxuIFxcbiBcXHR1bnNpZ25lZCBpbnQgKCpleHBlY3QpKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uOWFlOWFhZDY1NTQxZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5AQCAtMjUsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFx0XFx0LyogZm9yIHVuaW9uIG5mX2luZXRfYWRkciAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXHRcXHRcXHQvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfZmliLmhcXHUwMDNlXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXFx1MDAzZVxcbiAjZW5kaWZcXG5AQCAtMTk3Miw4ICsxOTc0LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxcbi1cXHRcXHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4rXFx0XFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbkBAIC0xOTg2LDggKzE5ODgsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbkBAIC0yMDU5LDE1ICsyMDYxLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VzZV9oYXNoMihzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIH1cXG4gXFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XFxuK1xcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuICNlbmRpZlxcbiBcXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIHtcXG4gXFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xcbkBAIC0yMDkzLDYgKzIwOTUsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcXG4gXFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKVxcbit7XFxuK1xcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xcbitcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHQvKiBMT0NBTF9PVVQgPyAqL1xcbitcXHRpZiAoIXNrYi1cXHUwMDNlZGV2IHx8IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cXG4rXFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuK1xcdFxcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVxcdTAwM2VydDZpX2ZsYWdzIFxcdTAwMjYgUlRGX0xPQ0FMKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIShza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKVxcbit7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcXG4rfVxcbitcXG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcXG5pbmRleCBjMDI0MzQ1YzliZDg2Mi4uMjZkNmJhYmQ5MmZjZDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcXG5AQCAtMTYxLDYgKzE2MSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIFxcdHJldHVybiBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoZXhwZWN0LCAwLCAwLCBmbGFncyk7XFxuIH1cXG4gXFxuK2ludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3RbXSxcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWcpO1xcbitcXG4gc3RydWN0IG5mX2Nvbm5faGVscDtcXG4gdm9pZCBuZl9jdF9leHBlY3RhdGlvbl9nYyhzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXG5pbmRleCA5ZDg0NDM1NGM0ZDk1Ni4uM2JlNjEyMTQ1YzEzMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuQEAgLTEyOTQsNiArMTI5NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdXNlX2luY19yZXN0b3JlKHUzMiAqdXNlKVxcbiAgKlxcdEBzZXRzOiBzZXRzIGluIHRoZSB0YWJsZVxcbiAgKlxcdEBvYmplY3RzOiBzdGF0ZWZ1bCBvYmplY3RzIGluIHRoZSB0YWJsZVxcbiAgKlxcdEBmbG93dGFibGVzOiBmbG93IHRhYmxlcyBpbiB0aGUgdGFibGVcXG4rICpcXHRAb2JqbmFtZV9odDogaGFzaHRhYmxlIGZvciBvYmplY3RzIGxvb2t1cCBieSBuYW1lXFxuICAqXFx0QGhnZW5lcmF0b3I6IGhhbmRsZSBnZW5lcmF0b3Igc3RhdGVcXG4gICpcXHRAaGFuZGxlOiB0YWJsZSBoYW5kbGVcXG4gICpcXHRAdXNlOiBudW1iZXIgb2YgY2hhaW4gcmVmZXJlbmNlcyB0byB0aGlzIHRhYmxlXFxuQEAgLTEzMTMsNiArMTMxNCw3IEBAIHN0cnVjdCBuZnRfdGFibGUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0c2V0cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdG9iamVjdHM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRmbG93dGFibGVzO1xcbitcXHRzdHJ1Y3QgcmhsdGFibGVcXHRcXHRcXHRvYmpuYW1lX2h0O1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRoZ2VuZXJhdG9yO1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRoYW5kbGU7XFxuIFxcdHUzMlxcdFxcdFxcdFxcdHVzZTtcXG5AQCAtMTQwMCw3ICsxNDAyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpuZnRfb2JqX2RhdGEoY29uc3Qgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gI2RlZmluZSBuZnRfZXhwcl9vYmooZXhwcilcXHQqKChzdHJ1Y3QgbmZ0X29iamVjdCAqKiluZnRfZXhwcl9wcml2KGV4cHIpKVxcbiBcXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBvYmp0eXBlLFxcbiBcXHRcXHRcXHRcXHQgIHU4IGdlbm1hc2spO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xcbmluZGV4IDE4M2U4YTNmZjJiYWJkLi42YmNkNjczNDc2OWI1OSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jXFxuQEAgLTE4Miw2ICsxODIsNyBAQCBzdGF0aWMgaW50IG5hdF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRjcF9leHApXFxuIHtcXG4rXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9wYWlyWzJdID0geyBydHBfZXhwLCBydGNwX2V4cCB9O1xcbiBcXHRzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSBuZmN0X2hlbHBfZGF0YShjdCk7XFxuIFxcdGludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxuIFxcdGludCBpO1xcbkBAIC0yMjcsMjIgKzIyOCwxMyBAQCBzdGF0aWMgaW50IG5hdF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHRydHBfZXhwLVxcdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQpO1xcbi1cXHRcXHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydHBfZXhwLCAwKTtcXG4rXFx0XFx0cnRjcF9leHAtXFx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCArIDEpO1xcbitcXHRcXHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHJ0cF9wYWlyLCAwKTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuLVxcdFxcdFxcdHJ0Y3BfZXhwLVxcdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9XFxuLVxcdFxcdFxcdCAgICBodG9ucyhuYXRlZF9wb3J0ICsgMSk7XFxuLVxcdFxcdFxcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwLCAwKTtcXG4tXFx0XFx0XFx0aWYgKHJldCA9PSAwKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xcbi1cXHRcXHRcXHRcXHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fSBlbHNlIGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdFxcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XFxuLVxcdFxcdFxcdFxcdG5hdGVkX3BvcnQgPSAwO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2UgaWYgKHJldCAhPSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH0gZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fSBlbHNlIGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdG5hdGVkX3BvcnQgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5iMmQ3Nzk3MzI3MmQyNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaFxcbkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcXG4gI2VuZGlmXFxuIFxcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoZGF0YSwgc2V0KSwgZXh0KTtcXG4tXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSlcXG4rXFx0aWYgKFNFVF9XSVRIX0NPTU1FTlQoc2V0KSBcXHUwMDI2XFx1MDAyNiAhZXh0LVxcdTAwM2V0YXJnZXQpXFxuIFxcdFxcdGlwX3NldF9pbml0X2NvbW1lbnQoc2V0LCBleHRfY29tbWVudChkYXRhLCBzZXQpLCBleHQpO1xcbiBcXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxcbiBcXHRcXHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKGRhdGEsIHNldCksIGV4dCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG5AQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKlxcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcXG5AQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4rXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqXFx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbmluZGV4IDZlZDI2MjIzNjNmMGQ2Li4zNmM1Y2JhMDNmNWJjYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbkBAIC03MCwyNSArNzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxcbiAgKiAtIGhhc2ggdGFibGUgcmVzaXplIHdvcmtzIGxpa2UgcmVoYXNoIGJ1dCBhbHdheXMgcmVoYXNoZXMgaW50byBuZXcgdGFibGVcXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cXG4rICogLSBvbiByZXNpemUsIGJ1Y2tldCBmcm9tIHRoZSBvbGQgdGFibGUgaXMgbG9ja2VkIGJlZm9yZSBidWNrZXQgZnJvbSB0aGVcXG4rICogbmV3IHRhYmxlXFxuICAqIC0gY3AtXFx1MDAzZWxvY2sgcHJvdGVjdHMgY29ubiBmaWVsZHMgbGlrZSBjcC1cXHUwMDNlZmxhZ3MsIGNwLVxcdTAwM2VkZXN0XFxuICAqL1xcbiBcXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXFxuKy8qKlxcbisgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaFxcbisgKiBAdDpcXHRcXHRoYXNoIHRhYmxlIGZvciBobjAsIG5ld190Ymwgd2hlbiBuZXdfaGFzaD10cnVlXFxuKyAqIEB0MjpcXHRcXHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxcbisgKiBAY3A6XFx0XFx0Y29ubmVjdGlvblxcbisgKiBAaGFzaF9rZXk6XFx0aGFzaCBrZXkgZm9yIGhuMFxcbisgKiBAaGFzaF9rZXkyOlxcdGhhc2gga2V5IGZvciBobjFcXG4rICogQHVzZTI6XFx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXFxuKyAqIEBuZXdfaGFzaDpcXHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICogQG5ld19oYXNoMjpcXHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICogQGhlYWRfcmV0OlxcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxcbisgKiBAaGVhZDJfcmV0OlxcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxcbisgKlxcbisgKiBXZSBzdXBwb3J0IDMgbW9kZXM6XFxuKyAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcXG4rICogLSBoYXNoIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIGhhc2hpbmdcXG4rICogLSBzZWVrIGhuMCBhbmQgaGFzaCBobjEsIHVzZWQgd2hlbiBmb3J3YXJkaW5nIG1ldGhvZCBpcyBjaGFuZ2VkXFxuKyAqL1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWRcXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4tXFx0ICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxcbi1cXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcXG4rY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbitcXHQgICAgICB1MzIgaGFzaF9rZXksIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcXG4rXFx0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXFxuK1xcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XFxuIFxcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XFxuLVxcdHN0cnVjdCBpcF92c19yaHQgKnQyID0gdDtcXG4tXFx0dTMyIGlkeCwgaWR4MjtcXG4rXFx0aW50IGlkeCA9IDAsIGlkeDIgPSAwO1xcbitcXG4rXFx0LyogQWR2YW5jZSBpZHgyIHdoZW4gbmV3X2hhc2ggaXMgbm90IHNldCBidXQgaGFzaF9rZXkyXFxuK1xcdCAqIGlzIGZvciBuZXcgdGFibGVcXG4rXFx0ICovXFxuK1xcdGlmIChuZXdfaGFzaDIgXFx1MDAyNlxcdTAwMjYgdXNlMiBcXHUwMDI2XFx1MDAyNiB0ICE9IHQyKVxcbitcXHRcXHRpZHgyKys7XFxuIFxcbi1cXHRpZHggPSBoYXNoX2tleSBcXHUwMDI2IHQtXFx1MDAzZW1hc2s7XFxuLVxcdGlmICh1c2UyKVxcbi1cXHRcXHRpZHgyID0gaGFzaF9rZXkyIFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0ZWxzZVxcbi1cXHRcXHRpZHgyID0gaWR4O1xcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuIFxcdFxcdC8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqL1xcbiBcXG5AQCAtMTAwLDQ2ICsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4gXFx0XFx0XFx0ICogYm90aCBub2RlcyBpbiBkaWZmZXJlbnQgdGFibGVzLCB1c2UgaWR4L2lkeDJcXG4gXFx0XFx0XFx0ICogZm9yIHByb3BlciBsb2NrIG9yZGVyaW5nIGZvciBoZWFkcy5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlkeCA9IGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0XFx0XFx0aWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmICh1c2UyKSB7XFxuLVxcdFxcdFxcdGlmICghaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcXG4tXFx0XFx0XFx0XFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cXG4tXFx0XFx0XFx0XFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXFx1MDAzZW5ld190YmwpO1xcbi1cXHRcXHRcXHRcXHRpZHgyID0gaGFzaF9rZXkyIFxcdTAwMjYgdDItXFx1MDAzZW1hc2s7XFxuLVxcdFxcdFxcdFxcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0aWR4MiA9IGlkeDtcXG4rXFx0XFx0XFx0aWR4Kys7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAodXNlMiBcXHUwMDI2XFx1MDAyNiAhbmV3X2hhc2gyIFxcdTAwMjZcXHUwMDI2ICFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xcbitcXHRcXHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xcbitcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cXHUwMDNlbmV3X3RibCk7XFxuK1xcdFxcdGlkeDIrKztcXG4rXFx0fVxcbiBcXG4rXFx0aWYgKCF1c2UyKVxcbitcXHRcXHRpZHgyID0gaWR4O1xcbiBcXHRoZWFkID0gdC1cXHUwMDNlYnVja2V0cyArIChoYXNoX2tleSBcXHUwMDI2IHQtXFx1MDAzZW1hc2spO1xcbiBcXHRoZWFkMiA9IHVzZTIgPyB0Mi1cXHUwMDNlYnVja2V0cyArIChoYXNoX2tleTIgXFx1MDAyNiB0Mi1cXHUwMDNlbWFzaykgOiBoZWFkO1xcbiBcXG4tXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbi1cXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xcbi1cXG4tXFx0aWYgKGlkeCBcXHUwMDNjPSBpZHgyKSB7XFxuK1xcdGlmIChpZHggXFx1MDAzZSBpZHgyIHx8IChoZWFkIFxcdTAwM2UgaGVhZDIgXFx1MDAyNlxcdTAwMjYgaWR4ID09IGlkeDIpKSB7XFxuK1xcdFxcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xcbiBcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQpO1xcbi1cXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4tXFx0XFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xcbiBcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQpO1xcbitcXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4rXFx0XFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdH1cXG4gXFx0aWYgKCFuZXdfaGFzaCkge1xcbitcXHRcXHRib29sIGNoYW5nZWQ7XFxuK1xcbiBcXHRcXHQvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovXFxuIFxcdFxcdGhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4tXFx0XFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5KTtcXG4rXFx0XFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcXG4rXFx0XFx0aWYgKHVzZTIgXFx1MDAyNlxcdTAwMjYgIW5ld19oYXNoMikge1xcbitcXHRcXHRcXHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXHRcXHRcXHRjaGFuZ2VkIHw9IGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRoYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyO1xcbitcXHRcXHR9XFxuIFxcdFxcdC8qIEhhc2ggY2hhbmdlZCA/ICovXFxuLVxcdFxcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcXG4tXFx0XFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcXHUwMDI2XFx1MDAyNiB1c2UyKSkge1xcbitcXHRcXHRpZiAoY2hhbmdlZCkge1xcbiBcXHRcXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4gXFx0XFx0XFx0XFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcXG4gXFx0XFx0XFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xcbi1cXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0XFx0XFx0aGFzaF9rZXkgPSBoYXNoX2tleV9uZXc7XFxuIFxcdFxcdFxcdGhhc2hfa2V5MiA9IGhhc2hfa2V5X25ldzI7XFxuIFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuQEAgLTE1NSw3ICsxNzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLFxcbiBcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG4gXFx0XFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcXG4gXFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xcbi1cXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbkBAIC0yNjgsOCArMjg2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gXFx0XFx0dXNlMiA9IGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxcbi1cXHRcXHQgICAgICBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxcbitcXHRcXHQgICAgICB0cnVlIC8qIG5ld19oYXNoMiAqLywgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuIFxcbiBcXHRjcC1cXHUwMDNlZmxhZ3MgfD0gSVBfVlNfQ09OTl9GX0hBU0hFRDtcXG4gXFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5LCBoYXNoX2tleSk7XFxuQEAgLTI4MCw2ICsyOTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSwgaGVhZDIpO1xcbiBcXG4gXFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcXG4rXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcdHJldCA9IDE7XFxuIFxcbiBcXHQvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqL1xcbkBAIC0zMDYsMTggKzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCk7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gXFxuIFxcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cXHUwMDNlY29ubl90YWIpO1xcbiBcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4gXFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbiBcXHR1c2UyID0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApO1xcbiBcXG4tXFx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXFxuLVxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcXG4rXFx0XFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4gXFxuIFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XFxuIFxcdFxcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXFxuLVxcdFxcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KSkge1xcbitcXHRcXHRpZiAodXNlMiA9PSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHJlZmNvdW50X2RlY19pZl9vbmUoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpKSB7XFxuIFxcdFxcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjAubm9kZSk7XFxuIFxcdFxcdFxcdGlmICh1c2UyKVxcbiBcXHRcXHRcXHRcXHRobGlzdF9ibF9kZWxfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUpO1xcbkBAIC0zMjgsNiArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gXFxuIFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuIFxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC02MzIsNiArNjU1LDcgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdGludCBudGJsO1xcbiBcXHRpbnQgZGlyO1xcbiBcXG4rcmVzdGFydDpcXG4gXFx0LyogTm8gcGFja2V0cyBmcm9tIGluc2lkZSwgc28gd2UgY2FuIGRvIGl0IGluIDIgc3RlcHMuICovXFxuIFxcdGRpciA9IHVzZTIgPyAxIDogMDtcXG4gXFxuQEAgLTY4Niw2ICs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdC8qIFByb3RlY3QgdGhlIGNwLVxcdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuIFxcbitcXHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXFxuK1xcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xcbitcXHRcXHR1c2UyID0gIXVzZTI7XFxuK1xcdFxcdGlmICh1c2UyKSB7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdC8qIFJlc3RhcnQgd2l0aCBuZXcgdXNlMiB2YWx1ZSAqL1xcbitcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGRpcikge1xcbitcXHRcXHRcXHQvKiBOb3Qgc3RhcnRlZCB5ZXQsIHNvIGp1c3Qgc2tpcCBkaXIgMSAqL1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRkaXItLTtcXG4rXFx0XFx0XFx0Z290byBuZXh0X2RpcjtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBKdXN0IGZpbmlzaCBkaXIgMCAqL1xcbitcXHR9XFxuK1xcbiBcXHQvKiBMb2NrIHNlcWNvdW50IG9ubHkgZm9yIHRoZSBvbGQgYnVja2V0LCBldmVuIGlmIHdlIGFyZSBvbiBuZXcgdGFibGVcXG4gXFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cXG4gXFx0ICovXFxuQEAgLTc1Miw2ICs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdFxcdGdvdG8gbmV4dF9kaXI7XFxuIH1cXG4gXFxuKy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cXG4rc3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gY3AtXFx1MDAzZWlwdnM7XFxuK1xcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XFxuK1xcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcXG4rXFx0c3RydWN0IGlwX3ZzX3JodCAqdCwgKnQyO1xcbitcXG4rXFx0LyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqL1xcbitcXHRpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkgfHxcXG4rXFx0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXFxuK1xcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EpID09XFxuK1xcdCAgICAoKG5ld19mbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykgPT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cXHUwMDNlY29ubl90YWIpO1xcbitcXHRpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XFxuK1xcdFxcdC8qIFN0b3AgZG91YmxlIGhhc2hpbmcgKi9cXG4rXFx0XFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSk7XFxuK1xcdFxcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5KTtcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcbitcXHRcXHQvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi9cXG4rXFx0XFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSk7XFxuK1xcdFxcdFdSSVRFX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSwgaGFzaF9rZXkpO1xcbitcXHRcXHRobGlzdF9ibF9kZWxfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUpO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XFxuK1xcbitcXHRcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBTdGFydCBkb3VibGUgaGFzaGluZyAqL1xcbitcXG4rXFx0XFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMC5oYXNoX2tleSk7XFxuK1xcbitcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LVxcdTAwM2VuZXdfdGJsKTtcXG4rXFx0XFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xcbitcXHRcXHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcXG4rXFxuK1xcdFxcdC8qIENoYW5nZSB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9ja2VkIGhuMCAqL1xcbitcXHRcXHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxcbitcXHRcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sXFxuK1xcdFxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XFxuK1xcdFxcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XFxuK1xcbitcXHRcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qIEdldCBkZWZhdWx0IGxvYWQgZmFjdG9yIHRvIG1hcCBjb25uX2NvdW50L3VfdGhyZXNoIHRvIHQtXFx1MDAzZXNpemUgKi9cXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXFxuIHtcXG5AQCAtMTAxNCw2ICsxMTEwLDkgQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuIFxcdGZsYWdzID0gY3AtXFx1MDAzZWZsYWdzO1xcbiBcXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xcbitcXHRcXHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cXG4rXFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX09ORV9QQUNLRVQ7XFxuK1xcbiBcXHRcXHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcXG4gXFx0XFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXFxuIFxcdFxcdCAqL1xcbkBAIC0xMDIxLDkgKzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXFxuIFxcdFxcdFxcdGNvbm5fZmxhZ3MgXFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcXG4gXFx0XFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cXG4gXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xcbitcXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbitcXHRcXHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXFxuK1xcdFxcdCAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcXG4rXFx0XFx0XFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcXG4rXFx0XFx0Y3AtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdH1cXG4tXFx0ZmxhZ3MgfD0gY29ubl9mbGFncztcXG4tXFx0Y3AtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdGNwLVxcdTAwM2VkZXN0ID0gZGVzdDtcXG4gXFxuIFxcdElQX1ZTX0RCR19CVUYoNywgXFxcIkJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXFxcIlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbmluZGV4IGJhZmFiOTM0NTFkMDM3Li42Yjc5ZTBjNGQ5ZTI4NCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbkBAIC04NjcsNyArODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxcbiBcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XFxuIH1cXG5AQCAtOTI0LDEzICs5MjQsMTMgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcXG4gICogLSBpbm91dDogMT1pbi1cXHUwMDNlb3V0LCAwPW91dC1cXHUwMDNlaW5cXG4gICovXFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxcbitcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpXFxuIHtcXG4gXFx0c3RydWN0IGlwaGRyICppcGhcXHQgPSBpcF9oZHIoc2tiKTtcXG4tXFx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gaXBoLVxcdTAwM2VpaGwqNDtcXG4tXFx0c3RydWN0IGljbXBoZHIgKmljbXBoXFx0ID0gKHN0cnVjdCBpY21waGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaWNtcF9vZmZzZXQpO1xcbitcXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdG9mZik7XFxuIFxcdHN0cnVjdCBpcGhkciAqY2lwaFxcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcXG4rXFx0dW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbkBAIC05NDUsOCArOTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cXG4tXFx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rXFx0aWYgKGhhc19wb3J0cykge1xcbiBcXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICsgY2lwaC1cXHUwMDNlaWhsKjQ7XFxuIFxcbiBcXHRcXHRpZiAoaW5vdXQpXFxuQEAgLTk1Nyw0OCArOTU2LDQwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIFxcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXFxuIFxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuLVxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpO1xcbitcXHRpY21waC1cXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcXG4tXFx0XFx0XFx0XFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXFxcIik7XFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFxcXCIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbi1cXHRcXHRcXHRcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXFxcIik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwaFxcdCA9IGlwdjZfaGRyKHNrYik7XFxuLVxcdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XFxuLVxcdHVuc2lnbmVkIGludCBvZmZzXFx0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXFxuLVxcdGludCBwcm90b2NvbDtcXG4gXFx0c3RydWN0IGljbXA2aGRyICppY21waDtcXG4tXFx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XFxuLVxcdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xcbiBcXG4tXFx0aXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZpY21wX29mZnNldCwgSVBQUk9UT19JQ01QVjYsIFxcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XFxuLVxcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGljbXBfb2Zmc2V0KTtcXG4tXFx0b2ZmcyA9IGljbXBfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XFxuLVxcdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcXG4tXFxuLVxcdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZvZmZzLCAtMSwgXFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcXG4rXFx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHRvZmYpO1xcbitcXHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgY2lwaC1cXHUwMDNlb2ZmKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbitcXHRcXHRjaWgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aXBoLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuLVxcdFxcdGNpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4rXFx0XFx0Y2loLVxcdTAwM2VzYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xcbi1cXHRpZiAoIWZyYWdvZmZzIFxcdTAwMjZcXHUwMDI2IChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHRcXHRcXHQgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHtcXG4tXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XFxuK1xcdGlmIChoYXNfcG9ydHMpIHtcXG4rXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cXHUwMDNlZGF0YSArIGNpcGgtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRJUF9WU19EQkcoMTEsIFxcXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXFxuQEAgLTEwMTEsMTkgKzEwMDIsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXG4gXFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cXG4gXFx0aWNtcGgtXFx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gdG9mZixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xcbi1cXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XFxuIFxcdHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcXG4tXFx0XFx0XFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XFxcIik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXFxuLVxcdFxcdFxcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlxcXCIpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xMDMzLDM2ICsxMDIyLDQxIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gICovXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXFxuLVxcdFxcdFxcdFxcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuIHtcXG4rXFx0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XFxuIFxcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcXG4rXFx0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkdfQlVGKDEsIFxcXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFxuK1xcdCAgICBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcXG4rXFx0XFx0Y3RvZmYgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIFxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFx0ZWxzZVxcbiAjZW5kaWZcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcXG4gXFxuIFxcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXFx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5MCw5ICsxMDg0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAqXFx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXFxuICAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuK1xcdFxcdFxcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTExMDcsMTcgKzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xcbiBcXHRcXHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbitcXHRcXHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXFxuK1xcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbi1cXHRvZmZzZXQgPSBpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlobCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuIFxcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuIFxcdGlmIChpYyA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4gXFxuIFxcdElQX1ZTX0RCRygxMiwgXFxcIk91dGdvaW5nIElDTVAgKCVkLCVkKSAlcEk0LVxcdTAwM2UlcEk0XFxcXG5cXFwiLFxcbiBcXHRcXHQgIGljLVxcdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXFxuLVxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4rXFx0XFx0ICBcXHUwMDI2aXB2c2gtXFx1MDAzZXNhZGRyLmlwLCBcXHUwMDI2aXB2c2gtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTExMzYsNyArMTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuIFxcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcXG4gXFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcXHUwMDI2X2NpcGgpO1xcbi1cXHRpZiAoY2loID09IE5VTEwpXFxuK1xcdGlmICghKGNpaCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZWlobCBcXHUwMDNlPSA1KSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuIFxcbiBcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXFx1MDAzZXByb3RvY29sKTtcXG5AQCAtMTE0NCw4ICsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4tXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4rXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2ICFwcC1cXHUwMDNlZG9udF9kZWZyYWcpKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxcbkBAIC0xMTU5LDkgKzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoIWNwKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4tXFx0c25ldC5pcCA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuLVxcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFxcdTAwMjZzbmV0LCBjaWgtXFx1MDAzZXByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTtcXG4rXFx0c25ldC5pcCA9IGlwdnNoLVxcdTAwM2VzYWRkci5pcDtcXG4rXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsIGlobCxcXG4rXFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5AQCAtMTE3NCw3ICsxMTY5LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xcbiBcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbiBcXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4gXFxuIFxcdCpyZWxhdGVkID0gMTtcXG4gXFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbkBAIC0xMjEwLDYgKzEyMDQsMTAgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCFwcClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuK1xcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4rXFx0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXFx1MDAyNlxcdTAwMjYgIXBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXFxuIFxcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVxcdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG4gXFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcXHUwMDI2Y2lwaCk7XFxuQEAgLTEyMTcsOSArMTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xcbi1cXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFxcdTAwMjZzbmV0LCBjaXBoLnByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVxcdTAwM2VsZW4sIGhvb2tudW0pO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTE1NDUsNyArMTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XFxuICNlbmRpZlxcbiBcXHRcXHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcXG4gXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxuLVxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCwgaG9va251bSk7XFxuK1xcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChyZWxhdGVkKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdmVyZGljdDtcXG5AQCAtMTc1Myw5ICsxNzUxLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTE3NjUsNyArMTc2Miw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0O1xcbiBcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XFxuLVxcdGNoYXIgKm91dGVyX3Byb3RvID0gXFxcIklQSVBcXFwiO1xcbitcXHRjaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9IFxcXCJJUElQXFxcIjtcXG4gXFx0dW5zaWduZWQgaW50IGhsZW5faXBpcDtcXG4gXFx0aW50IHVsZW4gPSAwO1xcbiBcXG5AQCAtMTc3NSwxNyArMTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4gXFx0XFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX1NUT0xFTjtcXG4rXFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0fVxcbiBcXG4tXFx0aXBoID0gaXBfaGRyKHNrYik7XFxuLVxcdG9mZnNldCA9IGlobCA9IGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0aWhsID0gaXBoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwaC1cXHUwMDNlbGVuO1xcbiBcXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbiBcXHRpZiAoaWMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRJUF9WU19EQkcoMTIsIFxcXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0ICBpYy1cXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxcbi1cXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTE4NjcsOCArMTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0cHAgPSBwZC1cXHUwMDNlcHA7XFxuIFxcbiBcXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXFxuLVxcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMTg3Niw3ICsxODc0LDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0b2Zmc2V0MiA9IG9mZnNldDtcXG4gXFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFxcdTAwMjZjaXBoKTtcXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuIFxcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxcbiBcXHQgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LlxcbkBAIC0xODk4LDEwICsxODk1LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dmVyZGljdCA9IE5GX0RST1A7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG4tXFx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xcbitcXHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkci5pcCk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0xOTY5LDEwICsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbi1cXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2loLVxcdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2loLVxcdTAwM2Vwcm90b2NvbClcXG4tXFx0XFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjAzMiw4ICsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRwcCA9IHBkLVxcdTAwM2VwcDtcXG4gXFxuLVxcdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xcbi1cXHRpZiAoY2lwaC5mcmFnb2ZmcylcXG4rXFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xcbitcXHRpZiAoY2lwaC5mcmFnb2ZmcyBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMjA1NywyMyArMjA1MiwyMiBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ld19jcCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xcbi1cXHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuLVxcdFxcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0IEFGX0lORVQ2KSkge1xcbitcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuK1xcdFxcdElQX1ZTX0RCRygxLCBcXFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbiBcXG4tXFx0LyogTmVlZCB0byBtYW5nbGUgY29udGFpbmVkIElQdjYgaGVhZGVyIGluIElDTVB2NiBwYWNrZXQgKi9cXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcXG4tXFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuLVxcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjE1Miw3ICsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XFxuIFxcdFxcdFxcdGludCByZWxhdGVkO1xcbiBcXHRcXHRcXHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocmVsYXRlZClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuQEAgLTIyMDAsOCArMjE5NCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAocmVzY2hlZCkge1xcbi1cXHRcXHRcXHRpZiAoIW9sZF9jdClcXG4rXFx0XFx0XFx0aWYgKCFvbGRfY3QpIHtcXG4rXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX05GQ1Q7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKCFhdG9taWNfcmVhZChcXHUwMDI2Y3AtXFx1MDAzZW5fY29udHJvbCkpXFxuIFxcdFxcdFxcdFxcdGlwX3ZzX2Nvbm5fZXhwaXJlX25vdyhjcCk7XFxuIFxcdFxcdFxcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xcbkBAIC0yMjE3LDggKzIyMTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHN5c2N0bF9leHBpcmVfbm9kZXN0X2Nvbm4oaXB2cykpIHtcXG4gXFx0XFx0XFx0Ym9vbCBvbGRfY3QgPSBpcF92c19jb25uX3VzZXNfb2xkX2Nvbm50cmFjayhjcCwgc2tiKTtcXG4gXFxuLVxcdFxcdFxcdGlmICghb2xkX2N0KVxcbitcXHRcXHRcXHRpZiAoIW9sZF9jdCkge1xcbitcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0XFx0Y3AtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfTkZDVDtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aXBfdnNfY29ubl9leHBpcmVfbm93KGNwKTtcXG4gXFx0XFx0XFx0X19pcF92c19jb25uX3B1dChjcCk7XFxuQEAgLTIyODgsNiArMjI4OCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cXHUwMDNlbmV0KTtcXG4rXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cXG5AQCAtMjI5NywxMCArMjI5OCw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc3RhdGUtXFx1MDAzZXBmID09IE5GUFJPVE9fSVBWNCkge1xcbiBcXHRcXHRpZiAoaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFx0XFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XFxuLVxcbiBcXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuIFxcbiBcXHRcXHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXFxuQEAgLTIzMTAsNyArMjMxMCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2spO1xcbitcXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBcXG4gc3RhdGljIGludFxcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXFxuK1xcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcXG4rXFx0c2N0cGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xcbiBcXG4gXFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xcbiBcXHRpZiAoc2N0cGgtXFx1MDAzZXNvdXJjZSAhPSBjcC1cXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxuLVxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxcbitcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XFxuK1xcdHNjdHBoID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcXG4gXFxuIFxcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cXG4gXFx0aWYgKHNjdHBoLVxcdTAwM2VkZXN0ICE9IGNwLVxcdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcXG5AQCAtMTg3LDE5ICsxODcsMjIgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNjdHBoZHIgKnNoO1xcbiBcXHRfX2xlMzIgY21wLCB2YWw7XFxuIFxcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbiBcXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XFxuIFxcbiBcXHRpZiAodmFsICE9IGNtcCkge1xcbiBcXHRcXHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cXG4tXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCBjaGVja3N1bSBmb3JcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbkBAIC0yOSw3ICsyOSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxuK1xcdFxcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xcbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZXNvdXJjZSA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gXFxuIFxcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbitcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0yNjAsNyArMjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZWRlc3QgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcbitcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXFx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXFx1MDAzZW9mZixcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0yNSw3ICsyNSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlc291cmNlID0gY3AtXFx1MDAzZXZwb3J0O1xcbiBcXG4gXFx0LypcXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5OCw0OCArMjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXFxuK1xcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XFxuIFxcbi1cXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuK1xcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVxcdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDlmZWY0MzM1ZGExM2ZkLi4wYjBjNTMwNDk5M2E5MSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbkBAIC0xNTAyLDIwICsxNTAyLDIyIEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiAgKi9cXG4gaW50XFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IHJ0YWJsZVxcdCpydDtcXHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHdsZW47XFxuIFxcbiBcXHQvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlXFxuIFxcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTUzMyw3ICsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsIGNwLVxcdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgTlVMTCwgaXBoKTtcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgY2lwaCk7XFxuIFxcdGlmIChsb2NhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdHdsZW4gPSBjaXBoLVxcdTAwM2VsZW47XFxuK1xcdGlmIChjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxcbitcXHQgICAgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XFxuK1xcdFxcdHdsZW4gKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cyk7XFxuIFxcbiBcXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xcbiBcXHRza2ItXFx1MDAzZWlnbm9yZV9kZiA9IDE7XFxuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIGludFxcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuK1xcdHVuc2lnbmVkIGludCB3bGVuO1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGU7XFxuQEAgLTE2MDAsNyArMTYxMSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xcbiBcXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcXG4gXFx0XFx0aWYgKGNwLVxcdTAwM2VwYWNrZXRfeG1pdClcXG4tXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwdnNoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcXG4gXFx0aWYgKGxvY2FsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcXG5AQCAtMTY0OCwxNCArMTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuIFxcbitcXHR3bGVuID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRpZiAoY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcXG4rXFx0ICAgIGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xcbitcXHRcXHR3bGVuICs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xcbitcXHRcXHRoYXNfcG9ydHMgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuIFxcdGlmIChza2JfY293KHNrYiwgcnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcbi1cXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7XFxuK1xcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXFxuaW5kZXggN2FlNjhkNjA1ODZhMjMuLjhhM2I5ZTMzZTk0Zjc3IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG5AQCAtNDI3LDcgKzQyNyw2IEBAIHN0YXRpYyB2b2lkIG5mX2N0X2V4cGVjdF9pbnNlcnQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCxcXG4gXFx0XFx0ZXhwLVxcdTAwM2V0aW1lb3V0ICs9IGhlbHBlci1cXHUwMDNlZXhwZWN0X3BvbGljeVtleHAtXFx1MDAzZWNsYXNzXS50aW1lb3V0ICogSFo7XFxuIFxcbiBcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmV4cC1cXHUwMDNlbG5vZGUsIFxcdTAwMjZtYXN0ZXJfaGVscC1cXHUwMDNlZXhwZWN0YXRpb25zKTtcXG4tXFx0bWFzdGVyX2hlbHAtXFx1MDAzZWV4cGVjdGluZ1tleHAtXFx1MDAzZWNsYXNzXSsrO1xcbiBcXG4gXFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZleHAtXFx1MDAzZWhub2RlLCBcXHUwMDI2bmZfY3RfZXhwZWN0X2hhc2hbaF0pO1xcbiBcXHRjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XFxuQEAgLTUzNCw2ICs1MzMsNyBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdG1hc3Rlcl9oZWxwLVxcdTAwM2VleHBlY3RpbmdbZXhwZWN0LVxcdTAwM2VjbGFzc10rKztcXG4gXFx0bmZfY3RfZXhwZWN0X2luc2VydChleHBlY3QsIG1hc3Rlcl9oZWxwKTtcXG4gXFxuIFxcdG5mX2N0X2V4cGVjdF9ldmVudF9yZXBvcnQoSVBFWFBfTkVXLCBleHBlY3QsIHBvcnRpZCwgcmVwb3J0KTtcXG5AQCAtNTQ2LDYgKzU0NiwzOSBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KTtcXG4gXFxuK2ludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3RbXSxcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbitcXHRtYXN0ZXJfaGVscCA9IG5mY3RfaGVscChleHBlY3RbMF0tXFx1MDAzZW1hc3Rlcik7XFxuK1xcdGlmICghbWFzdGVyX2hlbHAgfHwgbWFzdGVyX2hlbHAgIT0gbmZjdF9oZWxwKGV4cGVjdFsxXS1cXHUwMDNlbWFzdGVyKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDI7IGkrKykge1xcbitcXHRcXHRyZXQgPSBfX25mX2N0X2V4cGVjdF9jaGVjayhleHBlY3RbaV0sIG1hc3Rlcl9oZWxwLCBmbGFncyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChpID09IDEpXFxuK1xcdFxcdFxcdFxcdG1hc3Rlcl9oZWxwLVxcdTAwM2VleHBlY3RpbmdbZXhwZWN0WzBdLVxcdTAwM2VjbGFzc10tLTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bWFzdGVyX2hlbHAtXFx1MDAzZWV4cGVjdGluZ1tleHBlY3RbaV0tXFx1MDAzZWNsYXNzXSsrO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMjsgaSsrKSB7XFxuK1xcdFxcdG5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCk7XFxuK1xcdFxcdG5mX2N0X2V4cGVjdF9ldmVudF9yZXBvcnQoSVBFWFBfTkVXLCBleHBlY3RbaV0sIDAsIDApO1xcbitcXHR9XFxuK291dDpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcik7XFxuK1xcbiB2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3koYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcXG4gXFx0XFx0XFx0XFx0ICB2b2lkICpkYXRhKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcXG5pbmRleCBmM2Y5MGE4NjYzMzg5NC4uZTRhNzBkMWQ3N2IwYjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbkBAIC0xNjYzLDcgKzE2NjMsNyBAQCBzdGF0aWMgaW50IHNpcF9oZWxwX3RjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0dW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjtcXG4gXFx0dW5zaWduZWQgaW50IG1zZ2xlbiwgb3JpZ2xlbjtcXG4gXFx0Y29uc3QgY2hhciAqZHB0ciwgKmVuZDtcXG4tXFx0czE2IGRpZmYsIHRkaWZmID0gMDtcXG4rXFx0czMyIGRpZmYsIHRkaWZmID0gMDtcXG4gXFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjbGVuO1xcbiBcXHRib29sIHRlcm07XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcXG5pbmRleCBhZWEwMmY2YWZmMDkyYS4uMTMzYmQ3MTNmZTBjMjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuY1xcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2lwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZl9uYXRfc2lwX3NlcV9hZGp1c3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLVxcdFxcdFxcdFxcdCAgczE2IG9mZilcXG4rXFx0XFx0XFx0XFx0ICBzMzIgb2ZmKVxcbiB7XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG5AQCAtNTkyLDYgKzU5Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbWVkaWFsZW4sXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpydHBfYWRkcilcXG4ge1xcbitcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG4gXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcXG5AQCAtNjIyLDI0ICs2MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0cnRwX2V4cC1cXHUwMDNldHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0KTtcXG4tXFx0XFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgTkZfQ1RfRVhQX0ZfU0tJUF9NQVNURVIpO1xcbi1cXHRcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGVsc2UgaWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cG9ydCA9IDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuIFxcdFxcdHJ0Y3BfZXhwLVxcdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHBvcnQgKyAxKTtcXG4tXFx0XFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcXG4rXFxuK1xcdFxcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIocnRwX3BhaXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xcbi1cXHRcXHRcXHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xcbitcXHRcXHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XFxuK1xcdFxcdGVsc2UgaWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0cG9ydCA9IDA7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCBhOWVhZjk0NTVjNzc4My4uYWYzNTdmNmM1MDcwYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbkBAIC00NSw4ICs0NSw2IEBAIGVudW0ge1xcbiBcXHRORlRfVkFMSURBVEVfRE8sXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IHJobHRhYmxlIG5mdF9vYmpuYW1lX2h0O1xcbi1cXG4gc3RhdGljIHUzMiBuZnRfY2hhaW5faGFzaChjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCk7XFxuIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2hfb2JqKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTtcXG4gc3RhdGljIGludCBuZnRfY2hhaW5faGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKiwgY29uc3Qgdm9pZCAqKTtcXG5AQCAtMTYzNSw2ICsxNjMzLDEwIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2NoYWluX2h0O1xcbiBcXG4rXFx0ZXJyID0gcmhsdGFibGVfaW5pdChcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfb2JqX2h0O1xcbitcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRhYmxlLVxcdTAwM2VjaGFpbnMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGFibGUtXFx1MDAzZXNldHMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGFibGUtXFx1MDAzZW9iamVjdHMpO1xcbkBAIC0xNjUzLDYgKzE2NTUsOCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXd0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2dGFibGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZnRfbmV0LVxcdTAwM2V0YWJsZXMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gZXJyX3RyYW5zOlxcbitcXHRyaGx0YWJsZV9kZXN0cm95KFxcdTAwMjZ0YWJsZS1cXHUwMDNlb2JqbmFtZV9odCk7XFxuK2Vycl9vYmpfaHQ6XFxuIFxcdHJobHRhYmxlX2Rlc3Ryb3koXFx1MDAyNnRhYmxlLVxcdTAwM2VjaGFpbnNfaHQpO1xcbiBlcnJfY2hhaW5faHQ6XFxuIFxcdGtmcmVlKHRhYmxlLVxcdTAwM2V1ZGF0YSk7XFxuQEAgLTE4MTksNiArMTgyMyw3IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc190YWJsZV9kZXN0cm95KHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyaGx0YWJsZV9kZXN0cm95KFxcdTAwMjZ0YWJsZS1cXHUwMDNlY2hhaW5zX2h0KTtcXG4rXFx0cmhsdGFibGVfZGVzdHJveShcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQpO1xcbiBcXHRrZnJlZSh0YWJsZS1cXHUwMDNlbmFtZSk7XFxuIFxcdGtmcmVlKHRhYmxlLVxcdTAwM2V1ZGF0YSk7XFxuIFxcdGtmcmVlKHRhYmxlKTtcXG5AQCAtODA4Niw3ICs4MDkxLDcgQEAgdm9pZCBuZnRfdW5yZWdpc3Rlcl9vYmooc3RydWN0IG5mdF9vYmplY3RfdHlwZSAqb2JqX3R5cGUpXFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7XFxuIFxcbiBzdHJ1Y3QgbmZ0X29iamVjdCAqbmZ0X29ial9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyIG9ianR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgdTggZ2VubWFzaylcXG4ge1xcbkBAIC04MTAyLDcgKzgxMDcsNyBAQCBzdHJ1Y3QgbmZ0X29iamVjdCAqbmZ0X29ial9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHQgICAgICFsb2NrZGVwX2NvbW1pdF9sb2NrX2lzX2hlbGQobmV0KSk7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGxpc3QgPSByaGx0YWJsZV9sb29rdXAoXFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcXHUwMDI2aywgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcXG4rXFx0bGlzdCA9IHJobHRhYmxlX2xvb2t1cChcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xcbiBcXHRpZiAoIWxpc3QpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtODM4Miw3ICs4Mzg3LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfbmV3b2JqKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl90cmFucztcXG4gXFxuLVxcdGVyciA9IHJobHRhYmxlX2luc2VydChcXHUwMDI2bmZ0X29iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsXFxuK1xcdGVyciA9IHJobHRhYmxlX2luc2VydChcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsXFxuIFxcdFxcdFxcdCAgICAgIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9vYmpfaHQ7XFxuQEAgLTg1NjcsOCArODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGluZm8tXFx1MDAzZWV4dGFjaztcXG4gXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX2N1cihpbmZvLVxcdTAwM2VuZXQpO1xcbiBcXHR1OCBmYW1pbHkgPSBpbmZvLVxcdTAwM2VuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbi1cXHRjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cXHUwMDNlbmV0O1xcbitcXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcXG4gXFx0c3RydWN0IG5mdF9vYmplY3QgKm9iajtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XFxuIFxcdHUzMiBvYmp0eXBlO1xcbkBAIC0xMDQzNyw5ICsxMDQ0Miw5IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4gXFx0XFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuK3N0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxcbiB7XFxuLVxcdHJobHRhYmxlX3JlbW92ZShcXHUwMDI2bmZ0X29iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XFxuK1xcdHJobHRhYmxlX3JlbW92ZShcXHUwMDI2dGFibGUtXFx1MDAzZW9iam5hbWVfaHQsIFxcdTAwMjZvYmotXFx1MDAzZXJobGhlYWQsIG5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XFxuIFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2b2JqLVxcdTAwM2VsaXN0KTtcXG4gfVxcbiBcXG5AQCAtMTExMjQsNyArMTExMjksNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFTE9CSjpcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFU1RST1lPQko6XFxuLVxcdFxcdFxcdG5mdF9vYmpfZGVsKG5mdF90cmFuc19vYmoodHJhbnMpKTtcXG4rXFx0XFx0XFx0bmZ0X29ial9kZWwodGFibGUsIG5mdF90cmFuc19vYmoodHJhbnMpKTtcXG4gXFx0XFx0XFx0bmZfdGFibGVzX29ial9ub3RpZnkoXFx1MDAyNmN0eCwgbmZ0X3RyYW5zX29iaih0cmFucyksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgdHJhbnMtXFx1MDAzZW1zZ190eXBlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTExNDE2LDcgKzExNDIxLDcgQEAgc3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxcbiBcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdG5mdF91c2VfZGVjX3Jlc3RvcmUoXFx1MDAyNnRhYmxlLVxcdTAwM2V1c2UpO1xcbi1cXHRcXHRcXHRcXHRuZnRfb2JqX2RlbChuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XFxuK1xcdFxcdFxcdFxcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ERUxPQko6XFxuQEAgLTEyMDQzLDcgKzEyMDQ4LDcgQEAgc3RhdGljIHZvaWQgX19uZnRfcmVsZWFzZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxcbiBcXHRcXHRuZnRfc2V0X2Rlc3Ryb3koXFx1MDAyNmN0eCwgc2V0KTtcXG4gXFx0fVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBuZSwgXFx1MDAyNnRhYmxlLVxcdTAwM2VvYmplY3RzLCBsaXN0KSB7XFxuLVxcdFxcdG5mdF9vYmpfZGVsKG9iaik7XFxuK1xcdFxcdG5mdF9vYmpfZGVsKHRhYmxlLCBvYmopO1xcbiBcXHRcXHRuZnRfdXNlX2RlYyhcXHUwMDI2dGFibGUtXFx1MDAzZXVzZSk7XFxuIFxcdFxcdG5mdF9vYmpfZGVzdHJveShcXHUwMDI2Y3R4LCBvYmopO1xcbiBcXHR9XFxuQEAgLTEyMjI1LDEwICsxMjIzMCw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX3RhYmxlc19tb2R1bGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfbmV0ZGV2X25vdGlmaWVyO1xcbiBcXG4tXFx0ZXJyID0gcmhsdGFibGVfaW5pdChcXHUwMDI2bmZ0X29iam5hbWVfaHQsIFxcdTAwMjZuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xcbi1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnJfcmh0X29iam5hbWU7XFxuLVxcbiBcXHRlcnIgPSBuZnRfb2ZmbG9hZF9pbml0KCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9vZmZsb2FkO1xcbkBAIC0xMjI1MSw4ICsxMjI1Miw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX3RhYmxlc19tb2R1bGVfaW5pdCh2b2lkKVxcbiBlcnJfbmV0bGlua19ub3RpZmllcjpcXG4gXFx0bmZ0X29mZmxvYWRfZXhpdCgpO1xcbiBlcnJfb2ZmbG9hZDpcXG4tXFx0cmhsdGFibGVfZGVzdHJveShcXHUwMDI2bmZ0X29iam5hbWVfaHQpO1xcbi1lcnJfcmh0X29iam5hbWU6XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZl90YWJsZXNfZmxvd3RhYmxlX25vdGlmaWVyKTtcXG4gZXJyX25ldGRldl9ub3RpZmllcjpcXG4gXFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcXG5AQCAtMTIyNzQsNyArMTIyNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfdGFibGVzX21vZHVsZV9leGl0KHZvaWQpXFxuIFxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2bmZfdGFibGVzX25ldF9vcHMpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ0cmFuc19nY193b3JrKTtcXG4gXFx0cmN1X2JhcnJpZXIoKTtcXG4tXFx0cmhsdGFibGVfZGVzdHJveShcXHUwMDI2bmZ0X29iam5hbWVfaHQpO1xcbiBcXHRuZl90YWJsZXNfY29yZV9tb2R1bGVfZXhpdCgpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG5pbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTI1OSw5ICsyNTksNyBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG4gXFx0XFx0XFx0XFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IHJlbWFpbmRlciwgZGVsdGEsIGs7XFxuIFxcdHN0cnVjdCBuZnRfZGF0YSBtYXNrID0ge307XFxuLVxcdF9fYmUzMiByZW1haW5kZXJfbWFzaztcXG4gXFxuIFxcdGlmIChwcml2X2xlbiA9PSBmaWVsZF9sZW4pIHtcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZyZWctXFx1MDAzZW1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcXG5AQCAtMjcwLDE1ICsyNjgsNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdG1lbXNldChcXHUwMDI2bWFzaywgMHhmZiwgZmllbGRfbGVuKTtcXG4tXFx0cmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTtcXG4tXFx0aWYgKHJlbWFpbmRlcikge1xcbi1cXHRcXHRrID0gcHJpdl9sZW4gLyBzaXplb2YodTMyKTtcXG4tXFx0XFx0ZGVsdGEgPSBmaWVsZF9sZW4gLSBwcml2X2xlbjtcXG4tXFx0XFx0cmVtYWluZGVyX21hc2sgPSBodG9ubCh+KCgxIFxcdTAwM2NcXHUwMDNjIChkZWx0YSAqIEJJVFNfUEVSX0JZVEUpKSAtIDEpKTtcXG4tXFx0XFx0bWFzay5kYXRhW2tdID0gKF9fZm9yY2UgdTMyKXJlbWFpbmRlcl9tYXNrO1xcbi1cXHR9XFxuLVxcbitcXHRtZW1zZXQoXFx1MDAyNm1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcXG4gXFx0bWVtY3B5KFxcdTAwMjZyZWctXFx1MDAzZW1hc2ssIFxcdTAwMjZtYXNrLCBmaWVsZF9sZW4pO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuaW5kZXggMjcwNGI0YjYwZDFlMDQuLjlhZjBmYTg5NWY3MzAyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jXFxuQEAgLTExNyw2ICsxMTcsNyBAQCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSB7XFxuIFxcdHJlZmNvdW50X3QgdXNlO1xcbiBcXHR1X2ludDhfdCBmYW1pbHk7XFxuIFxcdGJvb2wgcm5kX2luaXRpYWxpemVkO1xcbitcXHRib29sIHJhdGVtYXRjaDtcXG4gXFxuIFxcdHN0cnVjdCBoYXNobGltaXRfY2ZnMyBjZmc7XFx0LyogY29uZmlnICovXFxuIFxcbkBAIC0zMjMsNiArMzI0LDcgQEAgc3RhdGljIGludCBodGFibGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGhhc2hsaW1pdF9jZmczICpjZmcsXFxuIFxcdFxcdGt2ZnJlZShoaW5mbyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuK1xcdGhpbmZvLVxcdTAwM2VyYXRlbWF0Y2ggPSAhIShjZmctXFx1MDAzZW1vZGUgXFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZoaW5mby1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRzd2l0Y2ggKHJldmlzaW9uKSB7XFxuQEAgLTg3Miw3ICs4NzQsMTAgQEAgc3RhdGljIGludCBoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovXFxuLVxcdGlmIChyZXZpc2lvbiBcXHUwMDNlPSAzIFxcdTAwMjZcXHUwMDI2IGNmZy1cXHUwMDNlbW9kZSBcXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIKSB7XFxuK1xcdGlmIChjZmctXFx1MDAzZW1vZGUgXFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCkge1xcbitcXHRcXHRpZiAocmV2aXNpb24gXFx1MDAzYyAzKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdGlmIChjZmctXFx1MDAzZWF2ZyA9PSAwIHx8IGNmZy1cXHUwMDNlYXZnIFxcdTAwM2UgVTMyX01BWCkge1xcbiBcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJpbnZhbGlkIHJhdGVcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG5AQCAtOTA1LDYgKzkxMCwxNSBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXFxuIFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aGFzaGxpbWl0X211dGV4KTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoKGNmZy1cXHUwMDNlbW9kZSBcXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgISgqaGluZm8pLVxcdTAwM2VyYXRlbWF0Y2gpIHx8XFxuK1xcdFxcdCAgICAoIShjZmctXFx1MDAzZW1vZGUgXFx1MDAyNiBYVF9IQVNITElNSVRfUkFURV9NQVRDSCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgKCpoaW5mbyktXFx1MDAzZXJhdGVtYXRjaCkpIHtcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xcbitcXHRcXHRcXHRodGFibGVfcHV0KCpoaW5mbyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXFxuaW5kZXggZmIxYzU5ZDQ1NTY3YWYuLjQ0OWM1MThiZDk0N2RjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxcbkBAIC02MTcsNyArNjE3LDExIEBAIGlwIC02IC1uZXQgXFxcIiRuc3IyXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTozOjoxXFxuIGlwIC1uZXQgXFxcIiRuczJcXFwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAxMC4wLjIuMVxcbiBpcCAtNiAtbmV0IFxcXCIkbnMyXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZGVhZDoyOjoxXFxuIFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcXFxcbitcXHQnbWV0YSBvaWYgdHVuMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wIGFjY2VwdCdcXG4raXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXFxcXG4rXFx0J21ldGEgb2lmIHR1bjYgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNiBhY2NlcHQnXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxcXFxuIFxcdCdtZXRhIG9pZiBcXFwidmV0aDBcXFwiIHRjcCBzcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX3JlcGwgYWNjZXB0J1xcbkBAIC02MjksNyArNjMzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgXFxcIklQSVAgdHVubmVsXFxcIjsgdGhlblxcbiBmaVxcbiBcXG4gaWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbi1cXHRlY2hvIFxcXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbFxcXCJcXG4rXFx0Y2hlY2tfY291bnRlcnMgXFxcImZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsXFxcIlxcbiBlbHNlXFxuIFxcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRoIElQNklQNiB0dW5uZWxcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4gXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBsaXN0IHJ1bGVzZXRcXG5AQCAtNjQyLDYgKzY0Niw4IEBAIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIHNldCB2ZXRoMS4xMCB1cFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgMTkyLjE2OC4yMC4xLzI0IGRldiB2ZXRoMS4xMFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZmVlMTo0OjoxLzY0IGRldiB2ZXRoMS4xMCBub2RhZFxcbiBpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDEvMTAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuK2lwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxcXFxuK1xcdCdtZXRhIG9pZiB2ZXRoMS4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB2ZXRoMS4xMCBhY2NlcHQnXFxuIFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBhZGQgbmFtZSB0dW4wLjEwIHR5cGUgaXBpcCBsb2NhbCAxOTIuMTY4LjIwLjEgcmVtb3RlIDE5Mi4xNjguMjAuMlxcbkBAIC02NDksNiArNjU1LDggQEAgaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGxpbmsgc2V0IHR1bjAuMTAgdXBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIGFkZHIgYWRkIDE5Mi4xNjguMjAwLjEvMjQgZGV2IHR1bjAuMTBcXG4gaXAgLW5ldCBcXFwiJG5zcjFcXFwiIHJvdXRlIGNoYW5nZSBkZWZhdWx0IHZpYSAxOTIuMTY4LjIwMC4yXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSBcXHUwMDNlIC9kZXYvbnVsbFxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcXFxcbitcXHQnbWV0YSBvaWYgdHVuMC4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wLjEwIGFjY2VwdCdcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IxXFxcIiBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lXFxuQEAgLTY1Niw2ICs2NjQsOCBAQCBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgbGluayBzZXQgdHVuNi4xMCB1cFxcbiBpcCAtbmV0IFxcXCIkbnNyMVxcXCIgYWRkciBhZGQgZmVlMTo1OjoxLzY0IGRldiB0dW42LjEwIG5vZGFkXFxuIGlwIC02IC1uZXQgXFxcIiRuc3IxXFxcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxcbiBpcCAtNiAtbmV0IFxcXCIkbnNyMVxcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGZlZTE6NTo6MlxcbitpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcXFxcbitcXHQnbWV0YSBvaWYgdHVuNi4xMCB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW42LjEwIGFjY2VwdCdcXG4gXFxuIGlwIC1uZXQgXFxcIiRuc3IyXFxcIiBsaW5rIGFkZCBsaW5rIHZldGgwIG5hbWUgdmV0aDAuMTAgdHlwZSB2bGFuIGlkIDEwXFxuQEAgLTY4Myw3ICs2OTMsNyBAQCBpZiAhIHRlc3RfdGNwX2ZvcndhcmRpbmdfbmF0IFxcXCIkbnMxXFxcIiBcXFwiJG5zMlxcXCIgMSBcXFwiSVBJUCB0dW5uZWwgb3ZlciB2bGFuXFxcIjsgdGhlblxcbiBmaVxcbiBcXG4gaWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbi1cXHRlY2hvIFxcXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiXFxuK1xcdGNoZWNrX2NvdW50ZXJzIFxcXCJmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiXFxuIGVsc2VcXG4gXFx0ZWNobyBcXFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4gXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBsaXN0IHJ1bGVzZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzc6NTUuMTIyODI5MjE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzM3Mjk4ODU4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9OQVRfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfTkFUX0gzMjNcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwibmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpclwiLFxuICAgIFwibmF0X3J0cF9ydGNwXCIsXG4gICAgXCJuZl9uYXRfc2RwX21lZGlhXCIsXG4gICAgXCJuZnRfb2JqX2xvb2t1cFwiLFxuICAgIFwibmZfdGFibGVzX25ld3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3b2JqXCIsXG4gICAgXCJuZnRfb2JqX2RlbFwiLFxuICAgIFwiaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzFkNDk0MmI4NGI1YjJiZjFhYzcyODBjZjllMTAyZTIwZGE0NDVmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIzOjM3OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oXG5pbmRleCBkYmM2MTRkZmUwZDU2NS4uYWFmYTBjMDRmOTE3ZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaFxuQEAgLTExNSw3ICsxMTUsNyBAQCBzdHJ1Y3QgbmZfbmF0X3NpcF9ob29rcyB7XG4gXHRcdFx0ICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbik7XG4gXG4gXHR2b2lkICgqc2VxX2FkanVzdCkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgczE2IG9mZik7XG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IHByb3RvZmYsIHMzMiBvZmYpO1xuIFxuIFx0dW5zaWduZWQgaW50ICgqZXhwZWN0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaFxuQEAgLTI1LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVx0XHQvKiBmb3IgdW5pb24gbmZfaW5ldF9hZGRyICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVx0XHRcdC8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqL1xuKyNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfZmliLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAjZW5kaWZcbkBAIC0xOTcyLDggKzE5NzQsOCBAQCBpbnQgaXBfdnNfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxuLVx0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbitcdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XG4gdm9pZCBpcF92c19kZXN0X2RzdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTE5ODYsOCArMTk4OCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuQEAgLTIwNTksMTUgKzIwNjEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKHN0cnVjdCBpcF92c19jb25uICpjcClcbiB9XG4gXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbitcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICBib29sIGhhc19wb3J0cyk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyKTtcbitcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiArMjA5NSwzNiBAQCBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmMihfX2JlMTYgb2xkLCBfX2JlMTYgbmV3LCBfX3dzdW0gb2xkc3VtKVxuIFx0cmV0dXJuIGNzdW1fcGFydGlhbChkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKVxuK3tcbitcdC8qIENoZWNrc3VtIHVubmVjZXNzYXJ5IG9yIGFscmVhZHkgdmFsaWRhdGVkPyAqL1xuK1x0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qIExPQ0FMX09VVCA/ICovXG4rXHRpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHQvKiAhTE9DQUxfSU4gKEZPUldBUkQpID8gKi9cbitcdGlmIChhZiA9PSBBRl9JTkVUNikge1xuK1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qKlxuKyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVBcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcbit7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpO1xuK31cbitcbiAvKiBGb3JnZXQgY3VycmVudCBjb25udHJhY2sgKHVuY29uZmlybWVkKSBhbmQgYXR0YWNoIG5vdHJhY2sgZW50cnkgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuaW5kZXggYzAyNDM0NWM5YmQ4NjIuLjI2ZDZiYWJkOTJmY2Q3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuQEAgLTE2MSw2ICsxNjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LFxuIFx0cmV0dXJuIG5mX2N0X2V4cGVjdF9yZWxhdGVkX3JlcG9ydChleHBlY3QsIDAsIDAsIGZsYWdzKTtcbiB9XG4gXG4raW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBmbGFnKTtcbitcbiBzdHJ1Y3QgbmZfY29ubl9oZWxwO1xuIHZvaWQgbmZfY3RfZXhwZWN0YXRpb25fZ2Moc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHApO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggOWQ4NDQzNTRjNGQ5NTYuLjNiZTYxMjE0NWMxMzBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbkBAIC0xMjk0LDYgKzEyOTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZ0X3VzZV9pbmNfcmVzdG9yZSh1MzIgKnVzZSlcbiAgKlx0QHNldHM6IHNldHMgaW4gdGhlIHRhYmxlXG4gICpcdEBvYmplY3RzOiBzdGF0ZWZ1bCBvYmplY3RzIGluIHRoZSB0YWJsZVxuICAqXHRAZmxvd3RhYmxlczogZmxvdyB0YWJsZXMgaW4gdGhlIHRhYmxlXG4rICpcdEBvYmpuYW1lX2h0OiBoYXNodGFibGUgZm9yIG9iamVjdHMgbG9va3VwIGJ5IG5hbWVcbiAgKlx0QGhnZW5lcmF0b3I6IGhhbmRsZSBnZW5lcmF0b3Igc3RhdGVcbiAgKlx0QGhhbmRsZTogdGFibGUgaGFuZGxlXG4gICpcdEB1c2U6IG51bWJlciBvZiBjaGFpbiByZWZlcmVuY2VzIHRvIHRoaXMgdGFibGVcbkBAIC0xMzEzLDYgKzEzMTQsNyBAQCBzdHJ1Y3QgbmZ0X3RhYmxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0c2V0cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0b2JqZWN0cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0Zmxvd3RhYmxlcztcbitcdHN0cnVjdCByaGx0YWJsZVx0XHRcdG9iam5hbWVfaHQ7XG4gXHR1NjRcdFx0XHRcdGhnZW5lcmF0b3I7XG4gXHR1NjRcdFx0XHRcdGhhbmRsZTtcbiBcdHUzMlx0XHRcdFx0dXNlO1xuQEAgLTE0MDAsNyArMTQwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbmZ0X29ial9kYXRhKGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4gI2RlZmluZSBuZnRfZXhwcl9vYmooZXhwcilcdCooKHN0cnVjdCBuZnRfb2JqZWN0ICoqKW5mdF9leHByX3ByaXYoZXhwcikpXG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBvYmp0eXBlLFxuIFx0XHRcdFx0ICB1OCBnZW5tYXNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jXG5pbmRleCAxODNlOGEzZmYyYmFiZC4uNmJjZDY3MzQ3NjliNTkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2gzMjMuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmNcbkBAIC0xODIsNiArMTgyLDcgQEAgc3RhdGljIGludCBuYXRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLFxuIFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cClcbiB7XG4rXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX3BhaXJbMl0gPSB7IHJ0cF9leHAsIHJ0Y3BfZXhwIH07XG4gXHRzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSBuZmN0X2hlbHBfZGF0YShjdCk7XG4gXHRpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIFx0aW50IGk7XG5AQCAtMjI3LDIyICsyMjgsMTMgQEAgc3RhdGljIGludCBuYXRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRydHBfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7XG4tXHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsIDApO1xuK1x0XHRydGNwX2V4cC1cdTAwM2V0dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQgKyAxKTtcbitcdFx0cmV0ID0gbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcihydHBfcGFpciwgMCk7XG4gXHRcdGlmIChyZXQgPT0gMCkge1xuLVx0XHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID1cbi1cdFx0XHQgICAgaHRvbnMobmF0ZWRfcG9ydCArIDEpO1xuLVx0XHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwLCAwKTtcbi1cdFx0XHRpZiAocmV0ID09IDApXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XG4tXHRcdFx0XHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fSBlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRcdG5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7XG4tXHRcdFx0XHRuYXRlZF9wb3J0ID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIGlmIChyZXQgIT0gLUVCVVNZKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH0gZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9IGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdG5hdGVkX3BvcnQgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaCBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbmluZGV4IDgyMzEzMTdiMGYxZjRiLi5iMmQ3Nzk3MzI3MmQyNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmhcbkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBtdHlwZV9hZGQoc3RydWN0IGlwX3NldCAqc2V0LCB2b2lkICp2YWx1ZSwgY29uc3Qgc3RydWN0IGlwX3NldF9leHQgKmV4dCxcbiAjZW5kaWZcbiBcdGlmIChTRVRfV0lUSF9DT1VOVEVSKHNldCkpXG4gXHRcdGlwX3NldF9pbml0X2NvdW50ZXIoZXh0X2NvdW50ZXIoZGF0YSwgc2V0KSwgZXh0KTtcbi1cdGlmIChTRVRfV0lUSF9DT01NRU5UKHNldCkpXG4rXHRpZiAoU0VUX1dJVEhfQ09NTUVOVChzZXQpIFx1MDAyNlx1MDAyNiAhZXh0LVx1MDAzZXRhcmdldClcbiBcdFx0aXBfc2V0X2luaXRfY29tbWVudChzZXQsIGV4dF9jb21tZW50KGRhdGEsIHNldCksIGV4dCk7XG4gXHRpZiAoU0VUX1dJVEhfU0tCSU5GTyhzZXQpKVxuIFx0XHRpcF9zZXRfaW5pdF9za2JpbmZvKGV4dF9za2JpbmZvKGRhdGEsIHNldCksIGV4dCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuQEAgLTM2Nyw3ICszNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cdTAwM2VsZW4gKyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGlwdnNoLVx1MDAzZWxlbik7XG4rXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuQEAgLTQ0Myw3ICs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXHUwMDNlbGVuKTtcbitcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IDZlZDI2MjIzNjNmMGQ2Li4zNmM1Y2JhMDNmNWJjYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSArNzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuICAqIGJ1Y2tldCBvciBoYXNoIHRhYmxlXG4gICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cbisgKiAtIG9uIHJlc2l6ZSwgYnVja2V0IGZyb20gdGhlIG9sZCB0YWJsZSBpcyBsb2NrZWQgYmVmb3JlIGJ1Y2tldCBmcm9tIHRoZVxuKyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4rLyoqXG4rICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcbisgKiBAdDpcdFx0aGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZVxuKyAqIEB0MjpcdFx0aGFzaCB0YWJsZSBmb3IgaG4xLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2gyPXRydWVcbisgKiBAY3A6XHRcdGNvbm5lY3Rpb25cbisgKiBAaGFzaF9rZXk6XHRoYXNoIGtleSBmb3IgaG4wXG4rICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbisgKiBAdXNlMjpcdHVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZFxuKyAqIEBuZXdfaGFzaDpcdG1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxuKyAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbisgKiBAaGVhZF9yZXQ6XHRyZXR1cm5lZCBoZWFkIGZvciBobjBcbisgKiBAaGVhZDJfcmV0Olx0cmV0dXJuZWQgaGVhZCBmb3IgaG4xXG4rICpcbisgKiBXZSBzdXBwb3J0IDMgbW9kZXM6XG4rICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZ1xuKyAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4rICogLSBzZWVrIGhuMCBhbmQgaGFzaCBobjEsIHVzZWQgd2hlbiBmb3J3YXJkaW5nIG1ldGhvZCBpcyBjaGFuZ2VkXG4rICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbi1cdCAgICAgIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcbi1cdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuK2Nvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX3JodCAqdDIsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbitcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuK1x0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXG4rXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuIFx0dTMyIGhhc2hfa2V5X25ldywgaGFzaF9rZXlfbmV3Mjtcbi1cdHN0cnVjdCBpcF92c19yaHQgKnQyID0gdDtcbi1cdHUzMiBpZHgsIGlkeDI7XG4rXHRpbnQgaWR4ID0gMCwgaWR4MiA9IDA7XG4rXG4rXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcbitcdCAqIGlzIGZvciBuZXcgdGFibGVcbitcdCAqL1xuK1x0aWYgKG5ld19oYXNoMiBcdTAwMjZcdTAwMjYgdXNlMiBcdTAwMjZcdTAwMjYgdCAhPSB0MilcbitcdFx0aWR4MisrO1xuIFxuLVx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGlmICh1c2UyKVxuLVx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRlbHNlXG4tXHRcdGlkeDIgPSBpZHg7XG4gXHRpZiAoIW5ld19oYXNoKSB7XG4gXHRcdC8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqL1xuIFxuQEAgLTEwMCw0NiArMTIwLDQ1IEBAIGNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4gXHRcdFx0ICogYm90aCBub2RlcyBpbiBkaWZmZXJlbnQgdGFibGVzLCB1c2UgaWR4L2lkeDJcbiBcdFx0XHQgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRcdFx0aWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHR9XG4tXHRcdGlmICh1c2UyKSB7XG4tXHRcdFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xuLVx0XHRcdFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cbi1cdFx0XHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVx1MDAzZW5ld190YmwpO1xuLVx0XHRcdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaztcbi1cdFx0XHRcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlkeDIgPSBpZHg7XG4rXHRcdFx0aWR4Kys7XG4gXHRcdH1cbiBcdH1cbitcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyIFx1MDAyNlx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbitcdFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cbitcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4rXHRcdGlkeDIrKztcbitcdH1cbiBcbitcdGlmICghdXNlMilcbitcdFx0aWR4MiA9IGlkeDtcbiBcdGhlYWQgPSB0LVx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzayk7XG4gXHRoZWFkMiA9IHVzZTIgPyB0Mi1cdTAwM2VidWNrZXRzICsgKGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaykgOiBoZWFkO1xuIFxuLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0LyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi9cbi1cbi1cdGlmIChpZHggXHUwMDNjPSBpZHgyKSB7XG4rXHRpZiAoaWR4IFx1MDAzZSBpZHgyIHx8IChoZWFkIFx1MDAzZSBoZWFkMiBcdTAwMjZcdTAwMjYgaWR4ID09IGlkeDIpKSB7XG4rXHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuLVx0XHRpZiAoaGVhZCAhPSBoZWFkMilcbi1cdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuK1x0XHRpZiAoaGVhZCAhPSBoZWFkMilcbitcdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH1cbiBcdGlmICghbmV3X2hhc2gpIHtcbitcdFx0Ym9vbCBjaGFuZ2VkO1xuK1xuIFx0XHQvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovXG4gXHRcdGhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuLVx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXHRcdGNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7XG4rXHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuK1x0XHRcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IGhhc2hfa2V5MjtcbitcdFx0fVxuIFx0XHQvKiBIYXNoIGNoYW5nZWQgPyAqL1xuLVx0XHRpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8XG4tXHRcdCAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgXHUwMDI2XHUwMDI2IHVzZTIpKSB7XG4rXHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgKzE3NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXG4gXHRpZiAoaGVhZCAhPSBoZWFkMilcbiBcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcbiBcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5AQCAtMjY4LDggKzI4Niw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHVzZTIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRjcC1cdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xuIFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbkBAIC0yODAsNiArMjk5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyZXQgPSAxO1xuIFxuIFx0LyogU2NoZWR1bGUgcmVzaXppbmcgaWYgbG9hZCBpbmNyZWFzZXMgKi9cbkBAIC0zMDYsMTggKzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XG4gXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tXHRcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpKSB7XG4gXHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjAubm9kZSk7XG4gXHRcdFx0aWYgKHVzZTIpXG4gXHRcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbkBAIC0zMjgsNiArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4gXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02MzIsNiArNjU1LDcgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRpbnQgbnRibDtcbiBcdGludCBkaXI7XG4gXG4rcmVzdGFydDpcbiBcdC8qIE5vIHBhY2tldHMgZnJvbSBpbnNpZGUsIHNvIHdlIGNhbiBkbyBpdCBpbiAyIHN0ZXBzLiAqL1xuIFx0ZGlyID0gdXNlMiA/IDEgOiAwO1xuIFxuQEAgLTY4Niw2ICs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHQvKiBQcm90ZWN0IHRoZSBjcC1cdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcbitcdC8qIFJlY2hlY2sgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2sgKi9cbitcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuK1x0XHR1c2UyID0gIXVzZTI7XG4rXHRcdGlmICh1c2UyKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdFx0LyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovXG4rXHRcdFx0Z290byByZXN0YXJ0O1xuK1x0XHR9XG4rXHRcdGlmIChkaXIpIHtcbitcdFx0XHQvKiBOb3Qgc3RhcnRlZCB5ZXQsIHNvIGp1c3Qgc2tpcCBkaXIgMSAqL1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuK1x0XHRcdGRpci0tO1xuK1x0XHRcdGdvdG8gbmV4dF9kaXI7XG4rXHRcdH1cbitcdFx0LyogSnVzdCBmaW5pc2ggZGlyIDAgKi9cbitcdH1cbitcbiBcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxuIFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cbiBcdCAqL1xuQEAgLTc1Miw2ICs3OTMsNjEgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuKy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cbitzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC1cdTAwM2VpcHZzO1xuK1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbitcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbitcdHN0cnVjdCBpcF92c19yaHQgKnQsICp0MjtcbitcbitcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbitcdGlmICgoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkgfHxcbitcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xuK1x0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cbitcdCAgICAoKG5ld19mbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcbitcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4rXHRpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4rXHRcdC8qIFN0b3AgZG91YmxlIGhhc2hpbmcgKi9cbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcdFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXG4rXHRcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcbitcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxuK1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcbitcdFx0LyogS2VlcCBib3RoIGhhc2gga2V5cyBpbiBzYW1lIHRhYmxlICovXG4rXHRcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4rXHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XG4rXHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcbitcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXG4rXG4rXHRcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4rXG4rXHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXHUwMDNlbmV3X3RibCk7XG4rXHRcdGhhc2gyID0gaXBfdnNfY29ubl9oYXNoa2V5X2Nvbm4odDIsIGNwLCB0cnVlKTtcbitcdFx0aGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7XG4rXG4rXHRcdC8qIENoYW5nZSB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9ja2VkIGhuMCAqL1xuK1x0XHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuK1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcbitcdFx0XHQgICAgICBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4rXG4rXHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpO1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4rXG4rXHRcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4rXHR9XG4rfVxuK1xuIC8qIEdldCBkZWZhdWx0IGxvYWQgZmFjdG9yIHRvIG1hcCBjb25uX2NvdW50L3VfdGhyZXNoIHRvIHQtXHUwMDNlc2l6ZSAqL1xuIHN0YXRpYyBpbnQgaXBfdnNfY29ubl9kZWZhdWx0X2xvYWRfZmFjdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxuIHtcbkBAIC0xMDE0LDYgKzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG4gXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xuK1x0XHQvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi9cbitcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcbitcbiBcdFx0LyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkXG4gXHRcdCAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLlxuIFx0XHQgKi9cbkBAIC0xMDIxLDkgKzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpXG4gXHRcdFx0Y29ubl9mbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7XG4gXHRcdC8qIGNvbm5lY3Rpb25zIGluaGVyaXQgZm9yd2FyZGluZyBtZXRob2QgZnJvbSBkZXN0ICovXG4gXHRcdGZsYWdzIFx1MDAyNj0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpO1xuK1x0XHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuK1x0XHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXG4rXHRcdCAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzXG4rXHRcdCAqL1xuK1x0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpXG4rXHRcdFx0aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soY3AsIGZsYWdzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4rXHR9IGVsc2Uge1xuK1x0XHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0fVxuLVx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbi1cdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRjcC1cdTAwM2VkZXN0ID0gZGVzdDtcbiBcbiBcdElQX1ZTX0RCR19CVUYoNywgXCJCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkIFwiXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbmluZGV4IGJhZmFiOTM0NTFkMDM3Li42Yjc5ZTBjNGQ5ZTI4NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcbkBAIC04NjcsNyArODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxuIFxuICNlbmRpZlxuIFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbitzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyArOTI0LDEzIEBAIHN0YXRpYyBpbnQgaXBfdnNfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsXG4gICogLSBpbm91dDogMT1pbi1cdTAwM2VvdXQsIDA9b3V0LVx1MDAzZWluXG4gICovXG4gdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4rXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICBib29sIGhhc19wb3J0cylcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArXG4tXHRcdFx0XHRcdFx0ICAgICAgaWNtcF9vZmZzZXQpO1xuK1x0c3RydWN0IGljbXBoZHIgKmljbXBoXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCArIDEpO1xuK1x0dW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NDUsOCArOTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0fVxuIFxuIFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXG4tXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wpIHtcbitcdGlmIChoYXNfcG9ydHMpIHtcbiBcdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCArIGNpcGgtXHUwMDNlaWhsKjQ7XG4gXG4gXHRcdGlmIChpbm91dClcbkBAIC05NTcsNDggKzk1Niw0MCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gXHQvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqL1xuIFx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSAwO1xuLVx0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGljbXBfb2Zmc2V0KTtcbitcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCB0b2ZmKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4tXHRcdFx0XCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwiKTtcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbitcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXCIpO1xuIFx0ZWxzZVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuK1x0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcIik7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgICAgYm9vbCBoYXNfcG9ydHMsIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXBoXHQgPSBpcHY2X2hkcihza2IpO1xuLVx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gMDtcbi1cdHVuc2lnbmVkIGludCBvZmZzXHQgPSAwOyAvKiBoZWFkZXIgb2Zmc2V0Ki9cbi1cdGludCBwcm90b2NvbDtcbiBcdHN0cnVjdCBpY21wNmhkciAqaWNtcGg7XG4tXHRzdHJ1Y3QgaXB2NmhkciAqY2lwaDtcbi1cdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xuK1x0c3RydWN0IGlwdjZoZHIgKmNpaDtcbiBcbi1cdGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZpY21wX29mZnNldCwgSVBQUk9UT19JQ01QVjYsIFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcbi1cdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGljbXBfb2Zmc2V0KTtcbi1cdG9mZnMgPSBpY21wX29mZnNldCArIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xuLVx0Y2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnMpO1xuLVxuLVx0cHJvdG9jb2wgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2b2ZmcywgLTEsIFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcbitcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItXHUwMDNlZGF0YSArIHRvZmYpO1xuK1x0Y2loID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICsgY2lwaC1cdTAwM2VvZmYpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbitcdFx0Y2loLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuIFx0fSBlbHNlIHtcbiBcdFx0aXBoLVx1MDAzZWRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuLVx0XHRjaXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuK1x0XHRjaWgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2VkYWRkci5pbjY7XG4gXHR9XG4gXG4gXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cbi1cdGlmICghZnJhZ29mZnMgXHUwMDI2XHUwMDI2IChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0XHRcdCAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkge1xuLVx0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcbitcdGlmIChoYXNfcG9ydHMpIHtcbitcdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cdTAwM2VkYXRhICsgY2lwaC1cdTAwM2VsZW4pO1xuIFxuIFx0XHRJUF9WU19EQkcoMTEsIFwiJXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcXG5cIiwgX19mdW5jX18sXG4gXHRcdFx0ICAgICAgbnRvaHMoaW5vdXQgPyBwb3J0c1sxXSA6IHBvcnRzWzBdKSxcbkBAIC0xMDExLDE5ICsxMDAyLDE3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXG4gXHRpY21waC1cdTAwM2VpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSBpY21wX29mZnNldCxcbitcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRvZmYsXG4gXHRcdFx0XHRcdCAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTtcbi1cdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xuK1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XG4gXHRza2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbiBcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcbi1cdFx0XHQgICAgICAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwiRm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NlwiKTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4rXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QdjZcIik7XG4gfVxuICNlbmRpZlxuQEAgLTEwMzMsMzYgKzEwMjIsNDEgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuICAqL1xuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0dW5pb24gbmZfaW5ldF9hZGRyICpzbmV0LFxuLVx0XHRcdFx0X191OCBwcm90b2NvbCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuK1x0XHRcdFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdFx0XHRcdHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCxcbitcdFx0XHRcdHVuc2lnbmVkIGludCB0b2ZmLCB1bnNpZ25lZCBpbnQgaG9va251bSlcbiB7XG4rXHRpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbitcdHVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtXHUwMDNlbGVuO1xuK1x0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcbiBcbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSlcbiBcdFx0Z290byBhZnRlcl9uYXQ7XG4gXG4gXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cbi1cdGlmICghc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSBcdTAwMjZcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcIkZvcndhcmQgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXMhXFxuXCIsXG4gXHRcdFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpXG4tXHRcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbitcdCAgICBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xuK1x0XHRjdG9mZiArPSAyICogc2l6ZW9mKF9fdTE2KTtcbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgY3RvZmYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdGlmIChhZiA9PSBBRl9JTkVUNilcbi1cdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xuK1x0XHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xuK1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTAsOSArMTA4NCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqXHRDdXJyZW50bHkgaGFuZGxlcyBlcnJvciB0eXBlcyAtIHVucmVhY2hhYmxlLCBxdWVuY2gsIHR0bCBleGNlZWRlZC5cbiAgKi9cbiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4rXHRcdFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTEwNywxNyArMTEwMSwxOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4rXHRcdGlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSlcbitcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbitcdGlobCA9IGlwdnNoLVx1MDAzZWxlbjtcbitcdG9mZnNldCA9IGlwdnNoLVx1MDAzZWxlbjtcbiBcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbiBcdGlmIChpYyA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcbiBcdElQX1ZTX0RCRygxMiwgXCJPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCIsXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbitcdFx0ICBcdTAwMjZpcHZzaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXB2c2gtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTEzNiw3ICsxMTMyLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XG4gXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFx1MDAyNl9jaXBoKTtcbi1cdGlmIChjaWggPT0gTlVMTClcbitcdGlmICghKGNpaCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZXZlcnNpb24gPT0gNCBcdTAwMjZcdTAwMjYgY2loLVx1MDAzZWlobCBcdTAwM2U9IDUpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbiBcbiBcdHBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTE0NCw4ICsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuK1x0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbkBAIC0xMTU5LDkgKzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFjcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbi1cdHNuZXQuaXAgPSBpcGgtXHUwMDNlc2FkZHI7XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjaWgtXHUwMDNlcHJvdG9jb2wsIGNwLFxuLVx0XHRcdFx0ICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTtcbitcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbitcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNwLCBwcCwgXHUwMDI2Y2lwaCwgaWhsLFxuK1x0XHRcdFx0ICAgIGhvb2tudW0pO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xMTc0LDcgKzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxMCw2ICsxMjA0LDEwIEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXBwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuK1x0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuK1x0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXG4gXHRjcCA9IElORElSRUNUX0NBTExfMShwcC1cdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcbiBcdFx0XHQgICAgIGlwdnMsIEFGX0lORVQ2LCBza2IsIFx1MDAyNmNpcGgpO1xuQEAgLTEyMTcsOSArMTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbitcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsXG4rXHRcdFx0XHQgICAgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMTU0NSw3ICsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuK1x0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLFxuK1x0XHRcdFx0XHRcdCAgICAgaG9va251bSwgXHUwMDI2aXBoKTtcbiBcbiBcdFx0XHRpZiAocmVsYXRlZClcbiBcdFx0XHRcdHJldHVybiB2ZXJkaWN0O1xuQEAgLTE3NTMsOSArMTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuK1x0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTc2NSw3ICsxNzYyLDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0dW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0O1xuIFx0Ym9vbCB0dW5uZWwsIG5ld19jcCA9IGZhbHNlO1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyICpyYWRkcjtcbi1cdGNoYXIgKm91dGVyX3Byb3RvID0gXCJJUElQXCI7XG4rXHRjaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9IFwiSVBJUFwiO1xuIFx0dW5zaWduZWQgaW50IGhsZW5faXBpcDtcbiBcdGludCB1bGVuID0gMDtcbiBcbkBAIC0xNzc1LDE3ICsxNzcyLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuK1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcGgpKVxuK1x0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHR9XG4gXG4tXHRpcGggPSBpcF9oZHIoc2tiKTtcbi1cdG9mZnNldCA9IGlobCA9IGlwaC1cdTAwM2VpaGwgKiA0O1xuK1x0aWhsID0gaXBoLVx1MDAzZWxlbjtcbitcdG9mZnNldCA9IGlwaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwiSW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwiLFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4rXHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTg2Nyw4ICsxODY2LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuK1x0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcbkBAIC0xODc2LDcgKzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4gXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxuIFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cbkBAIC0xODk4LDEwICsxODk1LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHZlcmRpY3QgPSBORl9EUk9QO1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSB8fCB0dW5uZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCJJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxcblwiLFxuLVx0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyKTtcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NjksMTAgKzE5NjcsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cbiBcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpaC1cdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2loLVx1MDAzZXByb3RvY29sKVxuLVx0XHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XG4tXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFx1MDAyNmNpcGgpO1xuK1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDMyLDggKzIwMjcsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRwcCA9IHBkLVx1MDAzZXBwO1xuIFxuLVx0LyogQ2Fubm90IGhhbmRsZSBmcmFnbWVudGVkIGVtYmVkZGVkIHByb3RvY29sICovXG4tXHRpZiAoY2lwaC5mcmFnb2ZmcylcbitcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbitcdGlmIChjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTIwNTcsMjMgKzIwNTIsMjIgQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRuZXdfY3AgPSB0cnVlO1xuIFx0fVxuIFxuLVx0LyogVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIGp1c3QgbGV0IGl0IGdvICovXG4tXHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcbi1cdFx0dmVyZGljdCA9IE5GX0FDQ0VQVDtcbitcdHZlcmRpY3QgPSBORl9EUk9QO1xuK1xuK1x0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4rXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuK1x0XHRcdFx0XHQgQUZfSU5FVDYpKSB7XG4rXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbitcdFx0SVBfVlNfREJHKDEsIFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXG5cIixcbitcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbi1cdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXG4tXHRvZmZzZXQgPSBjaXBoLmxlbjtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcbi1cdFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuLVxuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbitcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIGlwaC1cdTAwM2VsZW4sIGhvb2tudW0sIFx1MDAyNmNpcGgpO1xuIFxuIG91dDpcbiBcdGlmIChsaWtlbHkoIW5ld19jcCkpXG5AQCAtMjE1Miw3ICsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4rXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0yMjAwLDggKzIxOTQsMTEgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0fVxuIFxuIFx0XHRpZiAocmVzY2hlZCkge1xuLVx0XHRcdGlmICghb2xkX2N0KVxuK1x0XHRcdGlmICghb2xkX2N0KSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4gXHRcdFx0XHRjcC1cdTAwM2VmbGFncyBcdTAwMjY9IH5JUF9WU19DT05OX0ZfTkZDVDtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNwLVx1MDAzZW5fY29udHJvbCkpXG4gXHRcdFx0XHRpcF92c19jb25uX2V4cGlyZV9ub3coY3ApO1xuIFx0XHRcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xuQEAgLTIyMTcsOCArMjIxNCwxMSBAQCBpcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZVxuIFx0XHRpZiAoc3lzY3RsX2V4cGlyZV9ub2Rlc3RfY29ubihpcHZzKSkge1xuIFx0XHRcdGJvb2wgb2xkX2N0ID0gaXBfdnNfY29ubl91c2VzX29sZF9jb25udHJhY2soY3AsIHNrYik7XG4gXG4tXHRcdFx0aWYgKCFvbGRfY3QpXG4rXHRcdFx0aWYgKCFvbGRfY3QpIHtcbitcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRcdGNwLVx1MDAzZWZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9ORkNUO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdFx0fVxuIFxuIFx0XHRcdGlwX3ZzX2Nvbm5fZXhwaXJlX25vdyhjcCk7XG4gXHRcdFx0X19pcF92c19jb25uX3B1dChjcCk7XG5AQCAtMjI4OCw2ICsyMjg4LDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4rXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XG4gXHRpbnQgcjtcbiBcbiBcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cbkBAIC0yMjk3LDEwICsyMjk4LDkgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc3RhdGUtXHUwMDNlcGYgPT0gTkZQUk9UT19JUFY0KSB7XG4gXHRcdGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX0lDTVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgKzIzMTAsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAjZW5kaWZcbiBcdH1cbiBcbi1cdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vayk7XG4rXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbkBAIC0xMSw3ICsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gc2N0cF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxuK1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcbitcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZXNvdXJjZSAhPSBjcC1cdTAwM2V2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xNTcsNyArMTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4rXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyArMTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmO1xuK1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlZGVzdCAhPSBjcC1cdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xODcsMTkgKzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpXG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbitcdHVuc2lnbmVkIGludCBzY3RwaG9mZiA9IGlwaC1cdTAwM2VsZW47XG4gXHRzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRfX2xlMzIgY21wLCB2YWw7XG4gXG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuIFx0dmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpO1xuIFxuIFx0aWYgKHZhbCAhPSBjbXApIHtcbiBcdFx0LyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovXG4tXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbkBAIC0yOSw3ICsyOSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZik7XG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbitcdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTc5LDcgKzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB0Y3Bob2ZmO1xuK1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuK1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI2MCw3ICsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdGNwaG9mZjtcbitcdHRjcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZilcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xuK1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuK1x0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgKzI1LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHVkcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuK1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcbitcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKlxuQEAgLTIzOCw3ICsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbitcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0yNTQsNyArMjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHVkcGhvZmY7XG4rXHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHVkcGhvZmY7XG4gXHR1ZHBoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMjk4LDQ4ICsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4ge1xuIFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVoO1xuIFxuLVx0dWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCB1ZHBob2ZmLCBzaXplb2YoX3VkcGgpLCBcdTAwMjZfdWRwaCk7XG4rXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdGlmICghdWgtXHUwMDNlY2hlY2spXG4rXHRcdHJldHVybiAxO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuaW5kZXggOWZlZjQzMzVkYTEzZmQuLjBiMGM1MzA0OTkzYTkxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1MDIsMjAgKzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgcnRhYmxlXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcbitcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgd2xlbjtcbiBcbiBcdC8qIFRoZSBJQ01QIHBhY2tldCBmb3IgVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIHdpbGwgYmVcbiBcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcGgpO1xuK1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE1MzMsNyArMTUzNSw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuK1x0XHRcdFx0ICAgTlVMTCwgY2lwaCk7XG4gXHRpZiAobG9jYWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHRydCA9IHNrYl9ydGFibGUoc2tiKTtcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBpbnRcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbitcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuK1x0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcbiBcdHN0cnVjdCBydDZfaW5mb1x0KnJ0O1x0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbitcdHVuc2lnbmVkIGludCB3bGVuO1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGU7XG5AQCAtMTYwMCw3ICsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7XG4rXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydF92NihjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XG4rXHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcbkBAIC0xNjQ4LDE0ICsxNjU5LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbmluZGV4IDdhZTY4ZDYwNTg2YTIzLi44YTNiOWUzM2U5NGY3NyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuQEAgLTQyNyw3ICs0MjcsNiBAQCBzdGF0aWMgdm9pZCBuZl9jdF9leHBlY3RfaW5zZXJ0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsXG4gXHRcdGV4cC1cdTAwM2V0aW1lb3V0ICs9IGhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2V4cC1cdTAwM2VjbGFzc10udGltZW91dCAqIEhaO1xuIFxuIFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmV4cC1cdTAwM2Vsbm9kZSwgXHUwMDI2bWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0YXRpb25zKTtcbi1cdG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHAtXHUwMDNlY2xhc3NdKys7XG4gXG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZXhwLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtoXSk7XG4gXHRjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG5AQCAtNTM0LDYgKzUzMyw3IEBAIGludCBuZl9jdF9leHBlY3RfcmVsYXRlZF9yZXBvcnQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0bWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cdTAwM2VjbGFzc10rKztcbiBcdG5mX2N0X2V4cGVjdF9pbnNlcnQoZXhwZWN0LCBtYXN0ZXJfaGVscCk7XG4gXG4gXHRuZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0LCBwb3J0aWQsIHJlcG9ydCk7XG5AQCAtNTQ2LDYgKzU0NiwzOSBAQCBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9yZWxhdGVkX3JlcG9ydCk7XG4gXG4raW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdFtdLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscDtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbitcdG1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKGV4cGVjdFswXS1cdTAwM2VtYXN0ZXIpO1xuK1x0aWYgKCFtYXN0ZXJfaGVscCB8fCBtYXN0ZXJfaGVscCAhPSBuZmN0X2hlbHAoZXhwZWN0WzFdLVx1MDAzZW1hc3RlcikpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpKyspIHtcbitcdFx0cmV0ID0gX19uZl9jdF9leHBlY3RfY2hlY2soZXhwZWN0W2ldLCBtYXN0ZXJfaGVscCwgZmxhZ3MpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0aWYgKGkgPT0gMSlcbitcdFx0XHRcdG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHBlY3RbMF0tXHUwMDNlY2xhc3NdLS07XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0bWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdFtpXS1cdTAwM2VjbGFzc10rKztcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkrKykge1xuK1x0XHRuZl9jdF9leHBlY3RfaW5zZXJ0KGV4cGVjdFtpXSwgbWFzdGVyX2hlbHApO1xuK1x0XHRuZl9jdF9leHBlY3RfZXZlbnRfcmVwb3J0KElQRVhQX05FVywgZXhwZWN0W2ldLCAwLCAwKTtcbitcdH1cbitvdXQ6XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpcik7XG4rXG4gdm9pZCBuZl9jdF9leHBlY3RfaXRlcmF0ZV9kZXN0cm95KGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXG4gXHRcdFx0XHQgIHZvaWQgKmRhdGEpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbmluZGV4IGYzZjkwYTg2NjMzODk0Li5lNGE3MGQxZDc3YjBiOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuQEAgLTE2NjMsNyArMTY2Myw3IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0dW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjtcbiBcdHVuc2lnbmVkIGludCBtc2dsZW4sIG9yaWdsZW47XG4gXHRjb25zdCBjaGFyICpkcHRyLCAqZW5kO1xuLVx0czE2IGRpZmYsIHRkaWZmID0gMDtcbitcdHMzMiBkaWZmLCB0ZGlmZiA9IDA7XG4gXHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuIFx0dW5zaWduZWQgbG9uZyBjbGVuO1xuIFx0Ym9vbCB0ZXJtO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfc2lwLmNcbmluZGV4IGFlYTAyZjZhZmYwOTJhLi4xMzNiZDcxM2ZlMGMyOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9zaXAuY1xuQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX25hdF9zaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5mX25hdF9zaXBfc2VxX2FkanVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi1cdFx0XHRcdCAgczE2IG9mZilcbitcdFx0XHRcdCAgczMyIG9mZilcbiB7XG4gXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcbiBcdHN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsIFx1MDAyNmN0aW5mbyk7XG5AQCAtNTkyLDYgKzU5Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG1lZGlhbGVuLFxuIFx0XHRcdFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKnJ0cF9hZGRyKVxuIHtcbitcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfcGFpclsyXSA9IHsgcnRwX2V4cCwgcnRjcF9leHAgfTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgXHUwMDI2Y3RpbmZvKTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG5AQCAtNjIyLDI0ICs2MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRydHBfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCk7XG4tXHRcdHJldCA9IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHAsXG4tXHRcdFx0XHRcdCAgIE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGVsc2UgaWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHBvcnQgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHRcdHJ0Y3BfZXhwLVx1MDAzZXR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocG9ydCArIDEpO1xuLVx0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZChydGNwX2V4cCxcbi1cdFx0XHRcdFx0ICAgTkZfQ1RfRVhQX0ZfU0tJUF9NQVNURVIpO1xuK1xuK1x0XHRyZXQgPSBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyKHJ0cF9wYWlyLFxuK1x0XHRcdFx0XHRcdE5GX0NUX0VYUF9GX1NLSVBfTUFTVEVSKTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XG4tXHRcdFx0bmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTtcbitcdFx0ZWxzZSBpZiAocmV0ID09IC1FQlVTWSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fSBlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRuZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApO1xuK1x0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRwb3J0ID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGE5ZWFmOTQ1NWM3NzgzLi5hZjM1N2Y2YzUwNzBiMSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTQ1LDggKzQ1LDYgQEAgZW51bSB7XG4gXHRORlRfVkFMSURBVEVfRE8sXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IHJobHRhYmxlIG5mdF9vYmpuYW1lX2h0O1xuLVxuIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2goY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpO1xuIHN0YXRpYyB1MzIgbmZ0X2NoYWluX2hhc2hfb2JqKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKTtcbiBzdGF0aWMgaW50IG5mdF9jaGFpbl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqLCBjb25zdCB2b2lkICopO1xuQEAgLTE2MzUsNiArMTYzMywxMCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXd0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfY2hhaW5faHQ7XG4gXG4rXHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW9iam5hbWVfaHQsIFx1MDAyNm5mdF9vYmpuYW1lX2h0X3BhcmFtcyk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9vYmpfaHQ7XG4rXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlc2V0cyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VvYmplY3RzKTtcbkBAIC0xNjUzLDYgKzE2NTUsOCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXd0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2bmZ0X25ldC1cdTAwM2V0YWJsZXMpO1xuIFx0cmV0dXJuIDA7XG4gZXJyX3RyYW5zOlxuK1x0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0KTtcbitlcnJfb2JqX2h0OlxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnNfaHQpO1xuIGVycl9jaGFpbl9odDpcbiBcdGtmcmVlKHRhYmxlLVx1MDAzZXVkYXRhKTtcbkBAIC0xODE5LDYgKzE4MjMsNyBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfdGFibGVfZGVzdHJveShzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VjaGFpbnNfaHQpO1xuK1x0cmhsdGFibGVfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0KTtcbiBcdGtmcmVlKHRhYmxlLVx1MDAzZW5hbWUpO1xuIFx0a2ZyZWUodGFibGUtXHUwMDNldWRhdGEpO1xuIFx0a2ZyZWUodGFibGUpO1xuQEAgLTgwODYsNyArODA5MSw3IEBAIHZvaWQgbmZ0X3VucmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX29iaik7XG4gXG4gc3RydWN0IG5mdF9vYmplY3QgKm5mdF9vYmpfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIHUzMiBvYmp0eXBlLFxuIFx0XHRcdFx0ICB1OCBnZW5tYXNrKVxuIHtcbkBAIC04MTAyLDcgKzgxMDcsNyBAQCBzdHJ1Y3QgbmZ0X29iamVjdCAqbmZ0X29ial9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHQgICAgICFsb2NrZGVwX2NvbW1pdF9sb2NrX2lzX2hlbGQobmV0KSk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsaXN0ID0gcmhsdGFibGVfbG9va3VwKFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuK1x0bGlzdCA9IHJobHRhYmxlX2xvb2t1cChcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZrLCBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuIFx0aWYgKCFsaXN0KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC04MzgyLDcgKzgzODcsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdvYmooc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3RyYW5zO1xuIFxuLVx0ZXJyID0gcmhsdGFibGVfaW5zZXJ0KFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCxcbitcdGVyciA9IHJobHRhYmxlX2luc2VydChcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCxcbiBcdFx0XHQgICAgICBuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfb2JqX2h0O1xuQEAgLTg1NjcsOCArODU3Miw4IEBAIG5mX3RhYmxlc19nZXRvYmpfc2luZ2xlKHUzMiBwb3J0aWQsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBpbmZvLVx1MDAzZWV4dGFjaztcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIoaW5mby1cdTAwM2VuZXQpO1xuIFx0dTggZmFtaWx5ID0gaW5mby1cdTAwM2VuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4tXHRjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmV0O1xuK1x0c3RydWN0IG5mdF90YWJsZSAqdGFibGU7XG4gXHRzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4gXHR1MzIgb2JqdHlwZTtcbkBAIC0xMDQzNyw5ICsxMDQ0Miw5IEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbiBcdFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5mdF9vYmpfZGVsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4rc3RhdGljIHZvaWQgbmZ0X29ial9kZWwoc3RydWN0IG5mdF90YWJsZSAqdGFibGUsIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4ge1xuLVx0cmhsdGFibGVfcmVtb3ZlKFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCwgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcbitcdHJobHRhYmxlX3JlbW92ZShcdTAwMjZ0YWJsZS1cdTAwM2VvYmpuYW1lX2h0LCBcdTAwMjZvYmotXHUwMDNlcmhsaGVhZCwgbmZ0X29iam5hbWVfaHRfcGFyYW1zKTtcbiBcdGxpc3RfZGVsX3JjdShcdTAwMjZvYmotXHUwMDNlbGlzdCk7XG4gfVxuIFxuQEAgLTExMTI0LDcgKzExMTI5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX0RFTE9CSjpcbiBcdFx0Y2FzZSBORlRfTVNHX0RFU1RST1lPQko6XG4tXHRcdFx0bmZ0X29ial9kZWwobmZ0X3RyYW5zX29iaih0cmFucykpO1xuK1x0XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4gXHRcdFx0bmZfdGFibGVzX29ial9ub3RpZnkoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfb2JqKHRyYW5zKSxcbiBcdFx0XHRcdFx0ICAgICB0cmFucy1cdTAwM2Vtc2dfdHlwZSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTE0MTYsNyArMTE0MjEsNyBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4gXHRcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdG5mdF91c2VfZGVjX3Jlc3RvcmUoXHUwMDI2dGFibGUtXHUwMDNldXNlKTtcbi1cdFx0XHRcdG5mdF9vYmpfZGVsKG5mdF90cmFuc19vYmoodHJhbnMpKTtcbitcdFx0XHRcdG5mdF9vYmpfZGVsKHRhYmxlLCBuZnRfdHJhbnNfb2JqKHRyYW5zKSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMT0JKOlxuQEAgLTEyMDQzLDcgKzEyMDQ4LDcgQEAgc3RhdGljIHZvaWQgX19uZnRfcmVsZWFzZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuIFx0XHRuZnRfc2V0X2Rlc3Ryb3koXHUwMDI2Y3R4LCBzZXQpO1xuIFx0fVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmUsIFx1MDAyNnRhYmxlLVx1MDAzZW9iamVjdHMsIGxpc3QpIHtcbi1cdFx0bmZ0X29ial9kZWwob2JqKTtcbitcdFx0bmZ0X29ial9kZWwodGFibGUsIG9iaik7XG4gXHRcdG5mdF91c2VfZGVjKFx1MDAyNnRhYmxlLVx1MDAzZXVzZSk7XG4gXHRcdG5mdF9vYmpfZGVzdHJveShcdTAwMjZjdHgsIG9iaik7XG4gXHR9XG5AQCAtMTIyMjUsMTAgKzEyMjMwLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9uZXRkZXZfbm90aWZpZXI7XG4gXG4tXHRlcnIgPSByaGx0YWJsZV9pbml0KFx1MDAyNm5mdF9vYmpuYW1lX2h0LCBcdTAwMjZuZnRfb2JqbmFtZV9odF9wYXJhbXMpO1xuLVx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfcmh0X29iam5hbWU7XG4tXG4gXHRlcnIgPSBuZnRfb2ZmbG9hZF9pbml0KCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9vZmZsb2FkO1xuQEAgLTEyMjUxLDggKzEyMjUyLDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfdGFibGVzX21vZHVsZV9pbml0KHZvaWQpXG4gZXJyX25ldGxpbmtfbm90aWZpZXI6XG4gXHRuZnRfb2ZmbG9hZF9leGl0KCk7XG4gZXJyX29mZmxvYWQ6XG4tXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm5mdF9vYmpuYW1lX2h0KTtcbi1lcnJfcmh0X29iam5hbWU6XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZuZl90YWJsZXNfZmxvd3RhYmxlX25vdGlmaWVyKTtcbiBlcnJfbmV0ZGV2X25vdGlmaWVyOlxuIFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcbkBAIC0xMjI3NCw3ICsxMjI3Myw2IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl90YWJsZXNfbW9kdWxlX2V4aXQodm9pZClcbiBcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZuZl90YWJsZXNfbmV0X29wcyk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnRyYW5zX2djX3dvcmspO1xuIFx0cmN1X2JhcnJpZXIoKTtcbi1cdHJobHRhYmxlX2Rlc3Ryb3koXHUwMDI2bmZ0X29iam5hbWVfaHQpO1xuIFx0bmZfdGFibGVzX2NvcmVfbW9kdWxlX2V4aXQoKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTI1OSw5ICsyNTksNyBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxuIFx0XHRcdFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXG4ge1xuLVx0dW5zaWduZWQgaW50IHJlbWFpbmRlciwgZGVsdGEsIGs7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGEgbWFzayA9IHt9O1xuLVx0X19iZTMyIHJlbWFpbmRlcl9tYXNrO1xuIFxuIFx0aWYgKHByaXZfbGVuID09IGZpZWxkX2xlbikge1xuIFx0XHRtZW1zZXQoXHUwMDI2cmVnLVx1MDAzZW1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcbkBAIC0yNzAsMTUgKzI2OCw3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdG1lbXNldChcdTAwMjZtYXNrLCAweGZmLCBmaWVsZF9sZW4pO1xuLVx0cmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTtcbi1cdGlmIChyZW1haW5kZXIpIHtcbi1cdFx0ayA9IHByaXZfbGVuIC8gc2l6ZW9mKHUzMik7XG4tXHRcdGRlbHRhID0gZmllbGRfbGVuIC0gcHJpdl9sZW47XG4tXHRcdHJlbWFpbmRlcl9tYXNrID0gaHRvbmwofigoMSBcdTAwM2NcdTAwM2MgKGRlbHRhICogQklUU19QRVJfQllURSkpIC0gMSkpO1xuLVx0XHRtYXNrLmRhdGFba10gPSAoX19mb3JjZSB1MzIpcmVtYWluZGVyX21hc2s7XG4tXHR9XG4tXG4rXHRtZW1zZXQoXHUwMDI2bWFzaywgMHhmZiwgcHJpdl9sZW4pO1xuIFx0bWVtY3B5KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCBcdTAwMjZtYXNrLCBmaWVsZF9sZW4pO1xuIFxuIFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbmluZGV4IDI3MDRiNGI2MGQxZTA0Li45YWYwZmE4OTVmNzMwMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmNcbkBAIC0xMTcsNiArMTE3LDcgQEAgc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUge1xuIFx0cmVmY291bnRfdCB1c2U7XG4gXHR1X2ludDhfdCBmYW1pbHk7XG4gXHRib29sIHJuZF9pbml0aWFsaXplZDtcbitcdGJvb2wgcmF0ZW1hdGNoO1xuIFxuIFx0c3RydWN0IGhhc2hsaW1pdF9jZmczIGNmZztcdC8qIGNvbmZpZyAqL1xuIFxuQEAgLTMyMyw2ICszMjQsNyBAQCBzdGF0aWMgaW50IGh0YWJsZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaGFzaGxpbWl0X2NmZzMgKmNmZyxcbiBcdFx0a3ZmcmVlKGhpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4rXHRoaW5mby1cdTAwM2VyYXRlbWF0Y2ggPSAhIShjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aGluZm8tXHUwMDNlbG9jayk7XG4gXG4gXHRzd2l0Y2ggKHJldmlzaW9uKSB7XG5AQCAtODcyLDcgKzg3NCwxMCBAQCBzdGF0aWMgaW50IGhhc2hsaW1pdF9tdF9jaGVja19jb21tb24oY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovXG4tXHRpZiAocmV2aXNpb24gXHUwMDNlPSAzIFx1MDAyNlx1MDAyNiBjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHtcbitcdGlmIChjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIHtcbitcdFx0aWYgKHJldmlzaW9uIFx1MDAzYyAzKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0XHRpZiAoY2ZnLVx1MDAzZWF2ZyA9PSAwIHx8IGNmZy1cdTAwM2VhdmcgXHUwMDNlIFUzMl9NQVgpIHtcbiBcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiaW52YWxpZCByYXRlXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuQEAgLTkwNSw2ICs5MTAsMTUgQEAgc3RhdGljIGludCBoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLFxuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZoYXNobGltaXRfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGlmICgoY2ZnLVx1MDAzZW1vZGUgXHUwMDI2IFhUX0hBU0hMSU1JVF9SQVRFX01BVENIIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICEoKmhpbmZvKS1cdTAwM2VyYXRlbWF0Y2gpIHx8XG4rXHRcdCAgICAoIShjZmctXHUwMDNlbW9kZSBcdTAwMjYgWFRfSEFTSExJTUlUX1JBVEVfTUFUQ0gpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAoKmhpbmZvKS1cdTAwM2VyYXRlbWF0Y2gpKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhhc2hsaW1pdF9tdXRleCk7XG4rXHRcdFx0aHRhYmxlX3B1dCgqaGluZm8pO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aGFzaGxpbWl0X211dGV4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IGZiMWM1OWQ0NTU2N2FmLi40NDljNTE4YmQ5NDdkYyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5AQCAtNjE3LDcgKzYxNywxMSBAQCBpcCAtNiAtbmV0IFwiJG5zcjJcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmVlMTozOjoxXG4gaXAgLW5ldCBcIiRuczJcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4yLjFcbiBpcCAtNiAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjI6OjFcbiBcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuK1x0J21ldGEgb2lmIHR1bjAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjAgYWNjZXB0J1xuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4rXHQnbWV0YSBvaWYgdHVuNiB0Y3AgZHBvcnQgMTIzNDUgY3QgbWFyayBzZXQgMSBmbG93IGFkZCBAZjEgY291bnRlciBuYW1lIHJvdXRlZF9vcmlnIGFjY2VwdCdcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCAnbWV0YSBvaWYgdHVuNiBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbiBcdCdtZXRhIG9pZiBcInZldGgwXCIgdGNwIHNwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfcmVwbCBhY2NlcHQnXG5AQCAtNjI5LDcgKzYzMyw3IEBAIGlmICEgdGVzdF90Y3BfZm9yd2FyZGluZ19uYXQgXCIkbnMxXCIgXCIkbnMyXCIgMSBcIklQSVAgdHVubmVsXCI7IHRoZW5cbiBmaVxuIFxuIGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbi1cdGVjaG8gXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbFwiXG4rXHRjaGVja19jb3VudGVycyBcImZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiBJUDZJUDYgdHVubmVsXCJcbiBlbHNlXG4gXHRlY2hvIFwiRkFJTDogZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGggSVA2SVA2IHR1bm5lbFwiIDFcdTAwM2VcdTAwMjYyXG4gXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG5AQCAtNjQyLDYgKzY0Niw4IEBAIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHZldGgxLjEwIHVwXG4gaXAgLW5ldCBcIiRuc3IxXCIgYWRkciBhZGQgMTkyLjE2OC4yMC4xLzI0IGRldiB2ZXRoMS4xMFxuIGlwIC1uZXQgXCIkbnNyMVwiIGFkZHIgYWRkIGZlZTE6NDo6MS82NCBkZXYgdmV0aDEuMTAgbm9kYWRcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS8xMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuK2lwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkIFxcXG4rXHQnbWV0YSBvaWYgdmV0aDEuMTAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHZldGgxLjEwIGFjY2VwdCdcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjAuMTAgdHlwZSBpcGlwIGxvY2FsIDE5Mi4xNjguMjAuMSByZW1vdGUgMTkyLjE2OC4yMC4yXG5AQCAtNjQ5LDYgKzY1NSw4IEBAIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHR1bjAuMTAgdXBcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCAxOTIuMTY4LjIwMC4xLzI0IGRldiB0dW4wLjEwXG4gaXAgLW5ldCBcIiRuc3IxXCIgcm91dGUgY2hhbmdlIGRlZmF1bHQgdmlhIDE5Mi4xNjguMjAwLjJcbiBpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi50dW4wLzEwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4raXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgXFxcbitcdCdtZXRhIG9pZiB0dW4wLjEwIHRjcCBkcG9ydCAxMjM0NSBjdCBtYXJrIHNldCAxIGZsb3cgYWRkIEBmMSBjb3VudGVyIG5hbWUgcm91dGVkX29yaWcgYWNjZXB0J1xuIGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCAtYSBpbnNlcnQgcnVsZSBpbmV0IGZpbHRlciBmb3J3YXJkICdtZXRhIG9pZiB0dW4wLjEwIGFjY2VwdCdcbiBcbiBpcCAtbmV0IFwiJG5zcjFcIiBsaW5rIGFkZCBuYW1lIHR1bjYuMTAgdHlwZSBpcDZ0bmwgbG9jYWwgZmVlMTo0OjoxIHJlbW90ZSBmZWUxOjQ6OjIgZW5jYXBsaW1pdCBub25lXG5AQCAtNjU2LDYgKzY2NCw4IEBAIGlwIC1uZXQgXCIkbnNyMVwiIGxpbmsgc2V0IHR1bjYuMTAgdXBcbiBpcCAtbmV0IFwiJG5zcjFcIiBhZGRyIGFkZCBmZWUxOjU6OjEvNjQgZGV2IHR1bjYuMTAgbm9kYWRcbiBpcCAtNiAtbmV0IFwiJG5zcjFcIiByb3V0ZSBkZWxldGUgZGVmYXVsdFxuIGlwIC02IC1uZXQgXCIkbnNyMVwiIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmZWUxOjU6OjJcbitpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgLWEgaW5zZXJ0IHJ1bGUgaW5ldCBmaWx0ZXIgZm9yd2FyZCBcXFxuK1x0J21ldGEgb2lmIHR1bjYuMTAgdGNwIGRwb3J0IDEyMzQ1IGN0IG1hcmsgc2V0IDEgZmxvdyBhZGQgQGYxIGNvdW50ZXIgbmFtZSByb3V0ZWRfb3JpZyBhY2NlcHQnXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IC1hIGluc2VydCBydWxlIGluZXQgZmlsdGVyIGZvcndhcmQgJ21ldGEgb2lmIHR1bjYuMTAgYWNjZXB0J1xuIFxuIGlwIC1uZXQgXCIkbnNyMlwiIGxpbmsgYWRkIGxpbmsgdmV0aDAgbmFtZSB2ZXRoMC4xMCB0eXBlIHZsYW4gaWQgMTBcbkBAIC02ODMsNyArNjkzLDcgQEAgaWYgISB0ZXN0X3RjcF9mb3J3YXJkaW5nX25hdCBcIiRuczFcIiBcIiRuczJcIiAxIFwiSVBJUCB0dW5uZWwgb3ZlciB2bGFuXCI7IHRoZW5cbiBmaVxuIFxuIGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbi1cdGVjaG8gXCJQQVNTOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cIlxuK1x0Y2hlY2tfY291bnRlcnMgXCJmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgSVA2SVA2IHR1bm5lbCBvdmVyIHZsYW5cIlxuIGVsc2VcbiBcdGVjaG8gXCJGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aCBJUDZJUDYgdHVubmVsIG92ZXIgdmxhblwiIDFcdTAwM2VcdTAwMjYyXG4gXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgbGlzdCBydWxlc2V0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozNzo1NS4xMjI4MzIxODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjY3MTU5MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBzZXJpZXMgaGVyZSB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgbmV0d29yayBzdWJzeXN0ZW1zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBoaWdobHkgZnVuY3Rpb25hbCBhbmQgcmVhY2ggaW50byBzb21lIHZlcnkgY3J1Y2lhbCBuZXR3b3JrIGZpbHRlcmluZyBhbmQgbG9hZCBiYWxhbmNpbmcgbG9naWMsIHNvLCBhcyBhbiBleHBlcnQsIEkgY2FuIHRlbGwgaW1tZWRpYXRlbHksIHllcywgKipXb3J0aEZ1enppbmc9dHJ1ZSoqLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBhcmVhcyBhbmQgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFzcGVjdHMsIHRoZSBwb3RlbnRpYWwgXCJGb2N1c1N5bWJvbHNcIiBhbmQgdGhlIHJlbGV2YW50IFwiRW5hYmxlQ29uZmlnc1wiIHdlJ2xsIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRlc3RpbmcuXG5cbkZpcnN0LCB3ZSdyZSBsb29raW5nIGF0ICoqYG5ldC9uZXRmaWx0ZXIvaXB2cy9gKiouIFRoaXMgaXMgSVBWUywgdGhlIElQIFZpcnR1YWwgU2VydmVyIHN0dWZmLCByaWdodCBpbiB0aGUgY29yZTogY29ubmVjdGlvbiBoYW5kbGluZywgTkFULCB0aGUgd29ya3MuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YC4gTWFrZSBzdXJlIGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIGFyZSBhbGwgZW5hYmxlZCBhbmQgZnVuY3Rpb25hbCBmb3IgdGhlc2UuXG5cbk5leHQsIHdlJ3ZlIGdvdCBDb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgYW5kIHRoZSBTSVAvSC4zMjMgTkFUIGhlbHBlcnMgaW4gKipgbmV0L25ldGZpbHRlci9gKiouIFNwZWNpZmljYWxseSwgYG5mX2Nvbm50cmFja19leHBlY3QuY2AsIGBuZl9jb25udHJhY2tfc2lwLmNgLCBgbmZfbmF0X3NpcC5jYCwgYW5kIGBuZl9uYXRfaDMyMy5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb246IGBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyYCwgYG5hdF9ydHBfcnRjcGAsIGBuZl9uYXRfc2RwX21lZGlhYC4gQ29uZmlncyBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfTkFUX1NJUGAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGFuZCBgTkZfTkFUX0gzMjNgIGFyZSB0aGUga2V5IGVuYWJsaW5nIGZsYWdzIGhlcmUuXG5cbk1vdmluZyBvbiwgd2UncmUgbG9va2luZyBhdCAqKmBuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oYCoqIGFuZCAqKmBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AqKi4gTG9va3MgbGlrZSBgbmZfdGFibGVzYCBpcyB1c2luZyBgcmhsdGFibGVgIGZvciBvYmplY3QgbG9va3VwIGJ5IG5hbWUuIEZvciBgbmZfdGFibGVzYCwgdGhlIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhcmU6IGBuZnRfb2JqX2xvb2t1cGAsIGBuZl90YWJsZXNfbmV3dGFibGVgLCBgbmZfdGFibGVzX3RhYmxlX2Rlc3Ryb3lgLCBgbmZfdGFibGVzX25ld29iamAsIGBuZl90YWJsZXNfY29tbWl0YCwgYW5kIGBfX25mX3RhYmxlc19hYm9ydGAuIEknbGwgbmVlZCBgTkZfVEFCTEVTYCB0byB0ZXN0IHRoaXMgcHJvcGVybHkuXG5cbkFsc28sIHRoZXJlIGFyZSBzb21lIGZpeGVzIHJlbGF0ZWQgdG8gKipgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCoqIGFuZCAqKmBuZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jYCoqLlxuXG5MYXN0bHksIHRoZSAqKmB4dF9oYXNobGltaXQuY2AqKiBmaXggbG9va3MgbGlrZSBpdCdzIGltcGFjdGluZyBgaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vbmAgYW5kIGBodGFibGVfY3JlYXRlYC4gVGhpcyBsb29rcyBpbXBvcnRhbnQsIHNvIG1ha2Ugc3VyZSBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAgaXMgc2V0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGVzZSBjb25maWdzIHVzaW5nIGNvZGUgc2VhcmNoOyBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgZ2l2ZXMgdXMgYSBzb2xpZCBiYXNpcyBmb3IgdGFyZ2V0ZWQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODowNC43ODk5OTQ2MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NDIwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODowNC45OTQ0MjEwNDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI4OTE1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBJUF9WU19JUFY2YCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYElQX1ZTX0lQVjZgLiBVbmRlcnN0YW5kaW5nIGl0cyBjb25maWd1cmF0aW9uIGlzIGNyaXRpY2FsLCBvZiBjb3Vyc2UsIGJlY2F1c2UgaXQncyB0aGUgYmVkcm9jayBvZiBob3cgdHJhZmZpYyBpcyBiZWluZyBoYW5kbGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgbXkgbWluZCBpcyBjdXJyZW50bHkgZm9jdXNlZCBvbjpcblxuKiAgICoqSXRzIHN0YXR1czoqKiBJcyBpdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgcGFydGlhbGx5IGNvbmZpZ3VyZWQ/IFdoYXQga2VybmVsIG1vZHVsZSB2ZXJzaW9ucyBhcmUgd2Ugd29ya2luZyB3aXRoP1xuKiAgICoqQ29uZmxpY3QgcmVzb2x1dGlvbjoqKiBJJ20gbWVudGFsbHkgcGFyc2luZyBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgcnVsZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtYXkgY29uZmxpY3Qgd2l0aCBvdXIgZGVzaXJlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBhIG1ldGhvZGljYWwgZXhhbWluYXRpb24gb2YgdGhlIGN1cnJlbnQgc2V0dXAgdG8gc2VlIGlmIGl0IHBsYXlzIHdlbGwgd2l0aCB0aGUgcmVzdCBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUuXG4qICAgKipTZWN1cml0eSBpbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IHBvbGljeSBjb25zaWRlcmF0aW9ucyB3aXRoIHRoZSB1c2Ugb2YgdGhlIElQVjYgbW9kdWxlP1xuKiAgICoqT3B0aW1pemF0aW9uOioqIFdoYXQgb3B0aW1pemF0aW9ucywgaWYgYW55LCBoYXZlIGJlZW4gYXBwbGllZCBwcmV2aW91c2x5PyBJcyB0aGVyZSBhbnkgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSdtIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggbXkgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFscyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODowOC44MjMzMzk1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMTM1OTI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzg6MDguOTI2NDg1MjM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzQ1MjE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVBWUy9JUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSBwb3BwZWQgdXAsIHNwZWNpZmljYWxseSBgSVBfVlNfSVBWNmAsIGFuZCB0aGUgaGludCBwb2ludHMgdG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhhdCBzb3VuZHMgYWJvdXQgcmlnaHQsIHRob3VnaCBJIGFsd2F5cyBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZWl0aGVyIGp1bXAgZGlyZWN0bHkgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCwgb3IsIHRvIGtlZXAgdGhpbmdzIHF1aWNrLCBJJ2xsIGp1c3QgcnVuIGEgYGdyZXBgIGZvciB0aGUgc3ltYm9sLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgcmVhbGx5IGZhc3QgLSB3aGVyZSBlbHNlIGl0J3MgcmVmZXJlbmNlZCwgZGVwZW5kZW5jaWVzLCBhbmQgc28gb24uIEVmZmljaWVuY3kgaXMga2V5IHdoZW4gbmF2aWdhdGluZyB0aGVzZSBjb25maWcgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoxMi4yNDk5NDA2ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyODIzNzY5MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoxNi41NzgxODg3NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyOTkyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgTG9hZCBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGBDT05GSUdfSVBfVlNfSVBWNmAgc3ByaW5rbGVkIHRocm91Z2hvdXQgdGhpcyBjb2RlLiBPa2F5LCBsZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hlcmUgdGhpcyBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZCwgYmVjYXVzZSB0aGF0IHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgdGhlIGJlaGF2aW9yIGFuZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBsb2FkIGJhbGFuY2luZyBmZWF0dXJlcyBJJ20gbG9va2luZyBhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBLY29uZmlnIG9wdGlvbnMuIEl0J3MgY3J1Y2lhbCBJIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoaXMgbWFjcm8gdG8gZm9sbG93IHRoZSBsb2dpYyBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGVzZSBpbXBsZW1lbnRhdGlvbiBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjE5LjYyMTE4NDIxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MDgyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjc9aWYgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yOC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyOTpjb25maWdcXHRJUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiSVB2NiBzdXBwb3J0IGZvciBJUFZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoxOS44MjAyNzQ5NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MzQ1NDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIFNldHRpbmcqKlxuXG5SaWdodCwgc28gSSd2ZSBiZWVuIHdyZXN0bGluZyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCdzIHN0YXJpbmcgbWUgaW4gdGhlIGZhY2UuIEl0J3MgYWN0dWFsbHkgYGNvbmZpZyBJUF9WU19JUFY2YCwgYnV0IEkgY29tcGxldGVseSBtaXNzZWQgdGhlIHRhYiBjaGFyYWN0ZXIgd2hlbiBJIHdhcyBidWlsZGluZyBteSByZWd1bGFyIGV4cHJlc3Npb24uIEkgd2FzIHJ1bm5pbmcgYGNvbmZpZyBJUF9WU19JUFY2YCBpbnN0ZWFkISBSb29raWUgbWlzdGFrZSwgSSByZWFsbHkgc2hvdWxkIGhhdmUga25vd24gYmV0dGVyLCBJIHJlYWxseSBzaG91bGQgaGF2ZSB0ZXN0ZWQgaXQgYWdhaW5zdCB0aGUgc291cmNlIGEgYml0IG1vcmUgdmlnb3JvdXNseS5cblxuTm93IHRoYXQgSSd2ZSBob3BlZnVsbHkgY2xlYXJlZCB1cCB0aGF0IG9uZSBwb3RlbnRpYWwgcmVkIGhlcnJpbmcsIEkgbmVlZCB0byBjaGVjayBvdXQgYSBjb3VwbGUgb3RoZXIsIHJlbGF0ZWQgc2V0dGluZ3MgZm9yIHRoZSBOQVQgc3Vic3lzdGVtLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgTkZfTkFUX1NJUGAgYW5kIGBORl9OQVRfSDMyM2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIGEgY29uZmxpY3Qgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhvc2Ugdm9pY2Utb3Zlci1JUCBvciBzZXNzaW9uIGVzdGFibGlzaG1lbnQgc2NlbmFyaW9zLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIG5vdyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NzEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODoyMy4yODM3MzI0MDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg0ODY2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVF9TSVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00MjY9Y29uZmlnIE5GX05BVF9JUkNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQzMTpjb25maWcgTkZfTkFUX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzItXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzg6MjcuNzcyMjI0ODU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDg3NDM3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipORl9OQVRfSDMyMyAtIEEgTGluZ2VyaW5nIFF1ZXN0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24sIHByb2JhYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb21ldGhpbmcgbGlrZSBhIGZpcmV3YWxsIG9yIGEgcm91dGVyLCByaWdodD8gV2UncmUgZGVhbGluZyB3aXRoIE5BVCwgdGhhdCdzIGNsZWFyLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzICpzcGVjaWZpY2FsbHkqIGBORl9OQVRfSDMyM2AuIFdoYXQgYWJvdXQgaXQ/IEl04oCZcyBhIHZlcnkgcG9pbnRlZCBxdWVyeSwgc28gc29tZXRoaW5n4oCZcyBwaXF1ZWQgbXkgaW50ZXJlc3QgcmVnYXJkaW5nIEguMzIzLiBQZXJoYXBzIHRoZXJlJ3MgYSBwYXJ0aWN1bGFyIHByb2JsZW0gSSdtIHRyeWluZyB0byBkaWFnbm9zZS4gTWF5YmUgSSdtIHRyb3VibGVzaG9vdGluZyBhbiBILjMyMy1iYXNlZCBWb0lQIHNldHVwIGFuZCBJJ20gd29uZGVyaW5nIGlmIGEgc3BlY2lmaWMgbW9kdWxlIHJlbGF0ZWQgdG8gdGhhdCBwcm90b2NvbCBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseS4gT3IgSSdtIGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgZXZlbiB0aGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdHMgTkFUIGltcGxlbWVudGF0aW9uLiBJcyBpdCBwcm9wZXJseSBtYW5hZ2luZyB0aGUgc2lnbmFsaW5nIGFuZCBtZWRpYSBzdHJlYW1zPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIHRoYXQgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IElzIGl0IHNvbWV0aGluZyBJIG5lZWQgdG8gY29uZmlndXJlLCBkZWJ1Zywgb3IgbWF5YmUgZXZlbiByZXBsYWNlPyBUaGUgbGFjayBvZiBjb250ZXh0IGltcGxpZXMgdGhhdCBJJ3ZlIGFscmVhZHkgc2V0IGEgbG90IG9mIHN0YWdlLCBhbmQgdGhhdCBqdXN0IHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgbW9kdWxlIHJlbGF0ZWQgdG8gSC4zMjMgaXMgZW5vdWdoIHRvIHNwdXIgdGhvdWdodC4gVWx0aW1hdGVseSwgSSdtIHRyeWluZyB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgYSB2ZXJ5IHNwZWNpZmljLCBhbmQgcHJvYmFibHkgbm9uLXRyaXZpYWwsIGRldGFpbCB3aXRoaW4gdGhpcyB3aG9sZSBuZXR3b3JrIHRyYW5zbGF0aW9uIHByb2Nlc3MuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlIG15IGxpbmUgb2YgcmVhc29uaW5nLCBidXQgdGhhdCBzaW5nbGUgbW9kdWxlIG5hbWUgaXMgY2xlYXJseSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGUgbmV4dCBwaWVjZSBvZiB0aGlzIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzNDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODozMi42MjA5NzI4MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzIyMDA1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVF9IMzIzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTg9Y29uZmlnIE5GX05BVF9QUFRQXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9OQVRfSDMyM1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMzozODozNi4yNTMxNzkxOTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MzA1NTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgQWJvdXQgSGFzaGxpbWl0cyBhbmQgTmV0ZmlsdGVyKipcblxuSG1tLCBgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVGAuIFRoYXQncyB0aGUgb25lIHRoYXQgYWx3YXlzIG1ha2VzIG1lIHRoaW5rLi4uIGhvdyByb2J1c3QgaXMgdGhlIGltcGxlbWVudGF0aW9uIHJlYWxseT8gV2hhdCBhcmUgdGhlIGtleSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhdCBzY2FsZT8gSXMgaXQgdGhyZWFkLXNhZmUgaW4gYWxsIHRoZSB3YXlzIGl0ICpuZWVkcyogdG8gYmU/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBsdXJraW5nIHRoYXQgbWlnaHQgcmVhciB0aGVpciB1Z2x5IGhlYWRzIHVuZGVyIGhlYXZ5IGxvYWQsIGNhdXNpbmcgdW5leHBlY3RlZCBkcm9wcyBvciBldmVuIHdvcnNlLCBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyDigJMgaG93IGFyZSBjb2xsaXNpb25zIGhhbmRsZWQgd2l0aGluIHRoZSBoYXNoIHRhYmxlPyBBbmQgd2hhdCBhYm91dCBtZW1vcnkgY29uc3VtcHRpb24gd2l0aCBhIGxhcmdlIG51bWJlciBvZiBydWxlcz8gQXJlIHRoZXJlIGFueSBnb3RjaGFzIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaGFzaCBsaW1pdHMgdGhlbXNlbHZlcz8gSSBzaG91bGQgcmV2aWV3IHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWNlbnQgcGF0Y2hlcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjM5Ljg0NjIzNzcxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgwODA5MTEyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTEzMTQ9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9FU1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzIzOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzMjQtXFx0dHJpc3RhdGUgJ1xcXCJoYXNobGltaXRcXFwiIG1hdGNoIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjQzLjY1NDMzNjcwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIyNzQ0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgRXNzZW50aWFsIE5ldHdvcmsgUHJvdG9jb2wgQ29uc3RhbnRzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5kYW1lbnRhbCBjb25zdGFudHMgc3RyYWlnaHQgaW4gbXkgaGVhZCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFZpcnR1YWwgU2VydmVyIChWUykgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY29ycmVjdCBkZWZpbml0aW9ucyBmb3IgdGhlIHByb3RvY29sIGlkZW50aWZpZXJzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSB2YWx1ZXMgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcyBvZiBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGFuZCBgSVBfVlNfUFJPVE9fU0NUUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGEgYmVhdC4gQWZ0ZXIgYWxsLCBpbmNvcnJlY3QgdmFsdWVzIGhlcmUgY291bGQgbGVhZCB0byBzb21lIHNpZ25pZmljYW50IGFuZCBlYXNpbHkgb3Zlcmxvb2tlZCBlcnJvcnMgZG93bnN0cmVhbSBpbiB0cmFmZmljIHJvdXRpbmcgb3IgaGVhbHRoIGNoZWNrcy4gTGV0IG1lIG1ha2Ugc3VyZSBJIGtub3cgdGhlIHZhbHVlcy4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjQ2LjY3NzA4NDYyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NjIxMzg0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX1BST1RPX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjUwLjk3MzMwODYxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk4MzkzMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIElQVlMgQ29uZmlnIGZvciBQUk9UT19UQ1AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVENQIHdpdGhpbiB0aGUgSVAgVmlydHVhbCBTZXJ2ZXIgY29kZS4gTXkgaW5zdGluY3Qgc2F5cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgd291bGQgYmUgdGhlIGBLY29uZmlnYCBmaWxlLCBsb2NhdGVkIHVuZGVyIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL2AgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSBrZXJuZWwgbW9kdWxlcyBkZWZpbmUgdGhlaXIgYnVpbGQgb3B0aW9ucy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYFBST1RPX1RDUGAuIFRoaXMgc2hvdWxkIHBvaW50IG1lIHRvd2FyZHMgaG93IFRDUCBsb2FkIGJhbGFuY2luZyBhbmQgb3RoZXIgcmVsYXRlZCBUQ1Atc3BlY2lmaWMgZmVhdHVyZXMgd2l0aGluIElQVlMgYXJlIGNvbmZpZ3VyZWQuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzM5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM4OjU0LjM3MTcwNTI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NjY2MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFxcXCJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1RDUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVxcdGJvb2wgXFxcIlRDUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjM6Mzg6NTQuODkxMzc2OTEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzQxNzk0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBTeW1ib2wgU2V0IGZvciBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBJJ3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gZXhhbWluZSByZWxhdGVkIHRvIElQVlMsIGNvbm50cmFjaywgTmV0ZmlsdGVyIHRhYmxlcywgYW5kIGhhc2hsaW1pdC4gRmlyc3QsIEkndmUgY29uZmlybWVkIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgIGFyZSBhbGwgdmFsaWQgcHJvdG9jb2wgZGVmaW5pdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC5cblxuTm93LCBsZXQncyBjbGFyaWZ5IHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4gSSd2ZSBub3RlZCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYElQX1ZTYCwgYElQX1ZTX0lQVjZgLCBgSVBfVlNfUFJPVE9fVENQYCwgYElQX1ZTX1BST1RPX1VEUGAsIGBJUF9WU19QUk9UT19TQ1RQYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfTkFUX1NJUGAsIGBORl9DT05OVFJBQ0tfSDMyM2AsIGBORl9OQVRfSDMyM2AsIGBORl9UQUJMRVNgLCBhbmQgYE5FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVRgLlxuXG5OZXh0LCBJJ20gZGl2aW5nIGludG8gdGhlIG1vcmUgZ3JhbnVsYXIgc3ltYm9scywgZm9jdXNpbmcgb24gdGhvc2UgdGhhdCBhcmUgbGlrZWx5IHJlbGV2YW50LlxuXG5Gb3IgSVBWUywgSSd2ZSBpZGVudGlmaWVkOiBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGFuZCBgc2N0cF9jc3VtX2NoZWNrYC5cblxuSW4gdGhlIGNvbm50cmFjayByZWFsbSwgSSdtIGxvb2tpbmcgYXQ6IGBuZl9jdF9leHBlY3RfcmVsYXRlZF9wYWlyYCwgYG5hdF9ydHBfcnRjcGAsIGFuZCBgbmZfbmF0X3NkcF9tZWRpYWAuXG5cbk5ldGZpbHRlciB0YWJsZXMgYXJlIHJlcHJlc2VudGVkIGJ5OiBgbmZ0X29ial9sb29rdXBgLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc190YWJsZV9kZXN0cm95YCwgYG5mX3RhYmxlc19uZXdvYmpgLCBhbmQgYG5mdF9vYmpfZGVsYC5cblxuRmluYWxseSwgZm9yIHh0X2hhc2hsaW1pdCwgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6IGBoYXNobGltaXRfbXRfY2hlY2tfY29tbW9uYCBhbmQgYGh0YWJsZV9jcmVhdGVgLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIHZpc2liaWxpdHkgb2YgZnVuY3Rpb25zIGlzIG5lY2Vzc2FyeS4gSXQgc2VlbXMgYG5mdF9vYmpfZGVsYCBpcyBzdGF0aWMgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLiBGdXJ0aGVyLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc190YWJsZV9kZXN0cm95YCwgYW5kIGBuZl90YWJsZXNfbmV3b2JqYCBhcmUgYWxzbyBzdGF0aWMuIEFsdGhvdWdoIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB0aGV5J3JlIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsuIEhvd2V2ZXIsIGBuZl90YWJsZXNfdGFibGVfZGVzdHJveWAgaXMgc3RhdGljLCBzbyBJJ2xsIGF2b2lkIGluY2x1ZGluZyBpdC4gSSdsbCBzdGljayB3aXRoIGBuZnRfb2JqX2xvb2t1cGAgYW5kIGBuZl90YWJsZXNfbmV3dGFibGVgLCB3aGljaCBhcmUgYWNjZXNzaWJsZS5cblxuYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgIGlzIGV4cG9ydGVkLCBzbyBpdCdzIGdvb2QuIGBuYXRfcnRwX3J0Y3BgIGFuZCBgbmZfbmF0X3NkcF9tZWRpYWAgYXJlIHN0YXRpYywgcmVzaWRpbmcgaW4gYG5mX25hdF9oMzIzLmNgIGFuZCBgbmZfbmF0X3NpcC5jYCByZXNwZWN0aXZlbHkuXG5cbkNoZWNraW5nIHRoZSBJUFZTIGZ1bmN0aW9ucyBhZ2FpbiwgSSBmaW5kIHRoYXQgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpcyBzdGF0aWMgaW4gYGlwX3ZzX2Nvbm4uY2AuIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfbmF0X2ljbXBgLCBgaXBfdnNfbmF0X2ljbXBfdjZgLCBgaXBfdnNfaWNtcF94bWl0YCwgYGlwX3ZzX2ljbXBfeG1pdF92NmAgYXJlIGV4cG9ydGVkLiBgaXBfdnNfb3V0X2ljbXBgIGFuZCBgaXBfdnNfaW5faWNtcGAgYXJlIHN0YXRpYyBpbiBgaXBfdnNfY29yZS5jYC5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSd2ZSBmaW5hbGl6ZWQgbXkgc2V0IG9mIHN5bWJvbHMgdG8gaW5jbHVkZTpcblxuYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgLCBgc2N0cF9jc3VtX2NoZWNrYCwgYG5mX2N0X2V4cGVjdF9yZWxhdGVkX3BhaXJgLCBgbmF0X3J0cF9ydGNwYCwgYG5mX25hdF9zZHBfbWVkaWFgLCBgbmZ0X29ial9sb29rdXBgLCBgbmZfdGFibGVzX25ld3RhYmxlYCwgYG5mX3RhYmxlc19uZXdvYmpgLCBgbmZ0X29ial9kZWxgLCBhbmQgYGhhc2hsaW1pdF9tdF9jaGVja19jb21tb25gLlxuXG5JIGJlbGlldmUgdGhpcyBpcyBhIGNvbXByZWhlbnNpdmUgbGlzdCBhbmQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeVxuXG4iLCJJbnB1dFRva2VucyI6MzM4MjIsIk91dHB1dFRva2VucyI6NDA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIzOjM5OjA4LjYzMzE3NTQ2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTUzNTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9OQVRfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfTkFUX0gzMjNcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwibmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpclwiLFxuICAgIFwibmF0X3J0cF9ydGNwXCIsXG4gICAgXCJuZl9uYXRfc2RwX21lZGlhXCIsXG4gICAgXCJuZnRfb2JqX2xvb2t1cFwiLFxuICAgIFwibmZfdGFibGVzX25ld3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3b2JqXCIsXG4gICAgXCJuZnRfb2JqX2RlbFwiLFxuICAgIFwiaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9OQVRfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfTkFUX0gzMjNcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwibmZfY3RfZXhwZWN0X3JlbGF0ZWRfcGFpclwiLFxuICAgIFwibmF0X3J0cF9ydGNwXCIsXG4gICAgXCJuZl9uYXRfc2RwX21lZGlhXCIsXG4gICAgXCJuZnRfb2JqX2xvb2t1cFwiLFxuICAgIFwibmZfdGFibGVzX25ld3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3b2JqXCIsXG4gICAgXCJuZnRfb2JqX2RlbFwiLFxuICAgIFwiaGFzaGxpbWl0X210X2NoZWNrX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbXVsdGlwbGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcywgaW5jbHVkaW5nIElQVlMgY29ubmVjdGlvbiBoYW5kbGluZyBhbmQgSUNNUC9jaGVja3N1bSBwcm9jZXNzaW5nLCBjb25udHJhY2sgZXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIFNJUCBhbmQgSC4zMjMsIG5mX3RhYmxlcyBvYmplY3QgbG9va3VwIG1lY2hhbmlzbXMsIGFuZCB4dF9oYXNobGltaXQgbWF0Y2hpbmcuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowfgcjq[1] Phase: Succeeded StartedAt: 2026-07-23 23:39:20 +0000 UTC FinishedAt: 2026-07-23 23:39:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 23:39:20 +0000 UTC FinishedAt: 2026-07-23 23:39:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2] Phase: Running StartedAt: 2026-07-23 23:39:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-23 23:39:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 23:39:21 +0000 UTC FinishedAt: 2026-07-23 23:40:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 23:39:21 +0000 UTC FinishedAt: 2026-07-23 23:39:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-convert-artifact-2697636035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 23:40:05 +0000 UTC FinishedAt: 2026-07-24 00:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 23:40:05 +0000 UTC FinishedAt: 2026-07-24 00:19:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d1994df1-b118-4cb2-8269-ad2f5f2219bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-convert-artifact-2697636035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d3772f93-8a64-4597-9bcc-b2a2aa6b9a36", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-build-action-3458081585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 23:40:05 +0000 UTC FinishedAt: 2026-07-24 00:18:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d1994df1-b118-4cb2-8269-ad2f5f2219bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-convert-artifact-2697636035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d3772f93-8a64-4597-9bcc-b2a2aa6b9a36", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-build-action-3458081585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 00:19:33 +0000 UTC FinishedAt: 2026-07-24 00:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 00:19:33 +0000 UTC FinishedAt: 2026-07-24 00:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 00:19:33 +0000 UTC FinishedAt: 2026-07-24 00:19:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 00:19:33 +0000 UTC FinishedAt: 2026-07-24 00:19:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-convert-artifact-2645874298/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 00:19:43 +0000 UTC FinishedAt: 2026-07-24 00:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 00:19:43 +0000 UTC FinishedAt: 2026-07-24 00:21:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d3772f93-8a64-4597-9bcc-b2a2aa6b9a36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-build-action-3458081585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 00:21:46 +0000 UTC FinishedAt: 2026-07-24 00:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 00:21:46 +0000 UTC FinishedAt: 2026-07-24 00:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 00:21:46 +0000 UTC FinishedAt: 2026-07-24 00:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 00:21:46 +0000 UTC FinishedAt: 2026-07-24 00:57:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d1994df1-b118-4cb2-8269-ad2f5f2219bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-convert-artifact-2645874298/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "40659fb3-e6bb-4033-8238-2c96e59eae9e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-build-action-1611625950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 00:21:46 +0000 UTC FinishedAt: 2026-07-24 00:57:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d1994df1-b118-4cb2-8269-ad2f5f2219bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-convert-artifact-2645874298/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "40659fb3-e6bb-4033-8238-2c96e59eae9e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-build-action-1611625950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 00:57:22 +0000 UTC FinishedAt: 2026-07-24 00:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 00:57:22 +0000 UTC FinishedAt: 2026-07-24 00:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-07-24 00:57:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgcjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_fill_cport","ip_vs_conn_change_fwd_mask","ip_vs_nat_icmp","ip_vs_nat_icmp_v6","ip_vs_out_icmp","ip_vs_in_icmp","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6","tcp_csum_check","udp_csum_check","sctp_csum_check","nf_ct_expect_related_pair","nat_rtp_rtcp","nf_nat_sdp_media","nft_obj_lookup","nf_tables_newtable","nf_tables_newobj","nft_obj_del","hashlimit_mt_check_common"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP","NF_CONNTRACK_SIP","NF_NAT_SIP","NF_CONNTRACK_H323","NF_NAT_H323","NF_TABLES","NETFILTER_XT_MATCH_HASHLIMIT"],"series_id":"01ddf54a-ed60-4049-9b31-1f92fc2e0296","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-07-24 00:57:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40659fb3-e6bb-4033-8238-2c96e59eae9e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfgcjq/series-workflowfgcjq-build-action-1611625950/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil