Name: series-workflow45zbc Phase: Running StartedAt: 2026-07-02 15:06:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45zbc[0] Phase: Running StartedAt: 2026-07-02 15:06:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45zbc[0].run-triage Phase: Running StartedAt: 2026-07-02 15:06:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45zbc[0].run-triage(0) Phase: Running StartedAt: 2026-07-02 15:06:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "d6e81529749190123aa0040626c7e5dbc20fdc9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_NAT", "BRIDGE_NF_EBTABLES", "NETFILTER_NETLINK_HOOK", "NF_CT_NETLINK_HELPER", "NF_CT_NETLINK_TIMEOUT", "NFT_CT", "NETFILTER_XT_MATCH_DSCP", "NETFILTER_XT_MATCH_TCPMSS", "NETFILTER_XT_MATCH_RECENT", "NETFILTER_XT_TARGET_TCPOPTSTRIP", "NF_CONNTRACK_AMANDA", "NF_CONNTRACK_FTP", "NF_CONNTRACK_H323", "NF_CONNTRACK_IRC", "NF_CONNTRACK_NETBIOS_NS", "NF_CONNTRACK_SNMP", "NF_CONNTRACK_PPTP", "NF_CONNTRACK_SANE", "NF_CONNTRACK_SIP", "NF_CONNTRACK_TFTP", "NF_NAT_SNMP_BASIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "d6e81529749190123aa0040626c7e5dbc20fdc9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_NAT", "BRIDGE_NF_EBTABLES", "NETFILTER_NETLINK_HOOK", "NF_CT_NETLINK_HELPER", "NF_CT_NETLINK_TIMEOUT", "NFT_CT", "NETFILTER_XT_MATCH_DSCP", "NETFILTER_XT_MATCH_TCPMSS", "NETFILTER_XT_MATCH_RECENT", "NETFILTER_XT_TARGET_TCPOPTSTRIP", "NF_CONNTRACK_AMANDA", "NF_CONNTRACK_FTP", "NF_CONNTRACK_H323", "NF_CONNTRACK_IRC", "NF_CONNTRACK_NETBIOS_NS", "NF_CONNTRACK_SNMP", "NF_CONNTRACK_PPTP", "NF_CONNTRACK_SANE", "NF_CONNTRACK_SIP", "NF_CONNTRACK_TFTP", "NF_NAT_SNMP_BASIC" ], "series_id": "c33a0650-8a05-44ea-8bc3-3c4f2446d13d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nf_conntrack_helper_register", "nf_ct_helper_init", "__nf_conntrack_helper_find", "nfnl_hook_dump_nat", "nfnl_cthelper_new", "cttimeout_new_timeout", "tos_mt_check", "tcpmss_mt_check", "nft_ct_nat_follow_master", "do_replace", "compat_copy_ebt_replace_from_user" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9OQVQmIzM0OywKICAgICYjMzQ7QlJJREdFX05GX0VCVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0hPT0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19USU1FT1VUJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfQU1BTkRBJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19GVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0lSQyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfTkVUQklPU19OUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU05NUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfUFBUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0FORSYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19URlRQJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O25mX2N0X2hlbHBlcl9pbml0JiMzNDssCiAgICAmIzM0O19fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX25ldyYjMzQ7LAogICAgJiMzNDtjdHRpbWVvdXRfbmV3X3RpbWVvdXQmIzM0OywKICAgICYjMzQ7dG9zX210X2NoZWNrJiMzNDssCiAgICAmIzM0O3RjcG1zc19tdF9jaGVjayYjMzQ7LAogICAgJiMzNDtuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXImIzM0OywKICAgICYjMzQ7ZG9fcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBOQVQgaG9va3MsIGFuZCBlYnRhYmxlcy4gSXQgY2hhbmdlcyBob3cgY29ubnRyYWNrIGhlbHBlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIGxvb2tlZCB1cCAocmVtb3ZpbmcgcG9ydC1zcGVjaWZpYyBkZWZhdWx0cyksIGFkZHMgYSBuZXcgTkZfSE9PS19PUF9OQVQgdHlwZSBhbmQgZml4ZXMgTkFUIGhvb2sgZHVtcGluZywgYWRkcyBhIE5BVCBmb2xsb3cgbWFzdGVyIGV4cGVjdGZuIGZvciBuZnRfY3QsIGFuZCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGVidGFibGVzIGRvX3JlcGxhY2UuIEl0IGFsc28gYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgeHRfZHNjcCBhbmQgeHRfdGNwbXNzIG1hdGNoZXMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIG5ldGZpbHRlciBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNjZTEyNmIyNGYzY2JjMGY4NDk4Y2Y3YmZmODkwNWE4ZDZmM2QwMTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE1OjIwOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oXG5pbmRleCBlZmJiZmE3NzBkNjYxNy4uZTk5YWZjMTQxNGNkMzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oXG5AQCAtOTMsNiAmIzQzOzkzLDcgQEAgZW51bSBuZl9ob29rX29wc190eXBlIHtcbiBcdE5GX0hPT0tfT1BfTkZfVEFCTEVTLFxuIFx0TkZfSE9PS19PUF9CUEYsXG4gXHRORl9IT09LX09QX05GVF9GVCxcbiYjNDM7XHRORl9IT09LX09QX05BVCxcbiB9O1xuIFxuIHN0cnVjdCBuZl9ob29rX29wcyB7XG5AQCAtMTQwLDYgJiM0MzsxNDEsMTIgQEAgc3RydWN0IG5mX2hvb2tfZW50cmllcyB7XG4gXHQgKi9cbiB9O1xuIFxuJiM0MztzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYge1xuJiM0MztcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgX19yY3UgKmVudHJpZXM7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcbiYjNDM7fTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9ob29rX29wcyAqKm5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoY29uc3Qgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSlcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbmluZGV4IDgxMjg2YzQ5OTMyNTIxLi5iMTVmMzc2MDRjZGU0ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcbkBAIC05LDggJiM0Mzs5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaFx1MDAzZVxuIFxuLSNkZWZpbmUgUkFTX1BPUlQgMTcxOVxuLSNkZWZpbmUgUTkzMV9QT1JUIDE3MjBcbiAjZGVmaW5lIEgzMjNfUlRQX0NIQU5ORUxfTUFYIDRcdC8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqL1xuIFxuIC8qIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBvbmx5IG9uY2UgcGVyIG1hc3RlciAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG5pbmRleCBjM2JkYjQzNzA5Mzg0ZC4uYzBiMzA1Y2U3YzNjNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXG5AQCAtNTAsOCAmIzQzOzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHtcbiBcdF9fYmUxNiBwYWNfY2FsbF9pZDtcdFx0XHQvKiBOQVQmIzM5O2VkIFBBQyBjYWxsIGlkICovXG4gfTtcbiBcbi0jZGVmaW5lIFBQVFBfQ09OVFJPTF9QT1JUXHQxNzIzXG4tXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9DT05UUk9MXHQxXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9NR01UXHQyXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbmluZGV4IDQ2YzdhY2QxYjRhNzBmLi44NTAxMDM1ZDczMzU1OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcbkBAIC0zLDggJiM0MzszLDYgQEBcbiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfU0FORV9IXG4gLyogU0FORSB0cmFja2luZy4gKi9cbiBcbi0jZGVmaW5lIFNBTkVfUE9SVFx0NjU2NlxuLVxuIGVudW0gc2FuZV9zdGF0ZSB7XG4gXHRTQU5FX1NUQVRFX05PUk1BTCxcbiBcdFNBTkVfU1RBVEVfU1RBUlRfUkVRVUVTVEVELFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG5pbmRleCA5MGIzMzRiYmNlM2NlNi4uZTNkMTczOWM1NTdkMTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXG5AQCAtMiw4ICYjNDM7Miw2IEBAXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxuICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0hcbiBcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDQ5Mjk3ZmVjNDQ4YTgyLi5lZDJlOWJjMWJiNGU5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0yMTIzLDcgJiM0MzsyMTIzLDcgQEAgdm9pZCBpcF92c191cGRhdGVfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0XHQgICAgaW50IG91dGluKTtcbiBpbnQgaXBfdnNfY29uZmlybV9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdm9pZCBpcF92c19uZmN0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1X2ludDhfdCBwcm90byxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTggcHJvdG8sXG4gXHRcdFx0ICAgICAgIGNvbnN0IF9fYmUxNiBwb3J0LCBpbnQgZnJvbV9ycyk7XG4gdm9pZCBpcF92c19jb25uX2Ryb3BfY29ubnRyYWNrKHN0cnVjdCBpcF92c19jb25uICpjcCk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbkBAIC00MywxMSAmIzQzOzQzLDEwIEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHtcbiBcbiBcdHJlZmNvdW50X3QgY3RfcmVmY250O1xuIFxuLVx0LyogVHVwbGUgb2YgdGhpbmdzIHdlIHdpbGwgaGVscCAoY29tcGFyZWQgYWdhaW5zdCBzZXJ2ZXIgcmVzcG9uc2UpICovXG4tXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlO1xuJiM0MztcdHU4IG5mcHJvdG87XHQvKiBORlBST1RPXyosIGNhbiBiZSBORlBST1RPX1VOU1BFQyAqL1xuJiM0MztcdHU4IGw0cHJvdG87XHQvKiBJUFBST1RPX1VEUC9UQ1AgKi9cbiBcbi1cdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QsIG9yIC0xIHRvXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xuJiM0MztcdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QgKi9cbiBcdGludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdCAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjb25udHJhY2tpbmZvKTtcbkBAIC05NCw4ICYjNDM7OTMsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4mIzQzO1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbmluZGV4IGYyMGMwMzllNDRjOGQ3Li4wNDJkMzEyNzg3MTNkZiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmNcbkBAIC0zOSw2ICYjNDM7MzksOCBAQFxuICNkZWZpbmUgQ09VTlRFUl9PRkZTRVQobikgKFNNUF9BTElHTihuICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKVxuICNkZWZpbmUgQ09VTlRFUl9CQVNFKGMsIG4sIGNwdSkgKChzdHJ1Y3QgZWJ0X2NvdW50ZXIgKikoKChjaGFyICopYykgJiM0MzsgXFxcbiBcdFx0XHRcdCBDT1VOVEVSX09GRlNFVChuKSAqIGNwdSkpXG4mIzQzOyNkZWZpbmUgTUFYX0VCVF9FTlRSSUVTICgoKElOVF9NQVggLSBzaXplb2Yoc3RydWN0IGVidF90YWJsZV9pbmZvKSkgLyBcXFxuJiM0MztcdFx0XHQgTlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcbiBcbiBzdHJ1Y3QgZWJ0X3Blcm5ldCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHRhYmxlcztcbkBAIC0xMTI0LDEwICYjNDM7MTEyNiw5IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Lyogb3ZlcmZsb3cgY2hlY2sgKi9cbi1cdGlmICh0bXAubmVudHJpZXMgXHUwMDNlPSAoKElOVF9NQVggLSBzaXplb2Yoc3RydWN0IGVidF90YWJsZV9pbmZvKSkgL1xuLVx0XHRcdE5SX0NQVVMgLSBTTVBfQ0FDSEVfQllURVMpIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpXG4mIzQzO1x0aWYgKHRtcC5uZW50cmllcyBcdTAwM2U9IE1BWF9FQlRfRU5UUklFUylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRpZiAodG1wLm51bV9jb3VudGVycyBcdTAwM2U9IElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcbiYjNDM7XHRpZiAodG1wLm51bV9jb3VudGVycyBcdTAwM2U9IE1BWF9FQlRfRU5UUklFUylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHR0bXAubmFtZVtzaXplb2YodG1wLm5hbWUpIC0gMV0gPSAwO1xuQEAgLTIyNjUsMTAgJiM0MzsyMjY2LDkgQEAgc3RhdGljIGludCBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxuIFx0aWYgKHRtcC5lbnRyaWVzX3NpemUgPT0gMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAodG1wLm5lbnRyaWVzIFx1MDAzZT0gKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC9cbi1cdFx0XHROUl9DUFVTIC0gU01QX0NBQ0hFX0JZVEVTKSAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKVxuJiM0MztcdGlmICh0bXAubmVudHJpZXMgXHUwMDNlPSBNQVhfRUJUX0VOVFJJRVMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0aWYgKHRtcC5udW1fY291bnRlcnMgXHUwMDNlPSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpXG4mIzQzO1x0aWYgKHRtcC5udW1fY291bnRlcnMgXHUwMDNlPSBNQVhfRUJUX0VOVFJJRVMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0bWVtY3B5KHJlcGwsIFx1MDAyNnRtcCwgb2Zmc2V0b2Yoc3RydWN0IGVidF9yZXBsYWNlLCBob29rX2VudHJ5KSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbkBAIC0yMTMsNyAmIzQzOzIxMyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX25hdF9zbm1wX2Jhc2ljX2luaXQodm9pZClcbiBcdFJDVV9JTklUX1BPSU5URVIobmZfbmF0X3NubXBfaG9vaywgaGVscCk7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzbm1wX3RyYXBfaGVscGVyLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O3NubXBfdHJhcFwmIzM0OywgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtzbm1wX3RyYXBcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c25tcF90cmFwX2hlbHBlciwgXHUwMDI2c25tcF90cmFwX2hlbHBlcl9wdHIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jXG5pbmRleCA4MTk3NGY2OWU1YmI0ZS4uMzQ3MTg1ZmQwYzhjNmYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jXG5AQCAtMjA4LDcgJiM0MzsyMDgsNyBAQCBzdGF0aWMgdm9pZCBpcF92c19uZmN0X2V4cGVjdF9jYWxsYmFjayhzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gICogVXNlIHBvcnQgMCB0byBleHBlY3QgY29ubmVjdGlvbiBmcm9tIGFueSBwb3J0LlxuICAqL1xuIHZvaWQgaXBfdnNfbmZjdF9leHBlY3RfcmVsYXRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdV9pbnQ4X3QgcHJvdG8sXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHU4IHByb3RvLFxuIFx0XHRcdCAgICAgICBjb25zdCBfX2JlMTYgcG9ydCwgaW50IGZyb21fcnMpXG4ge1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG5pbmRleCBkZGFmYmRmYzk2ZGMzNS4uMDZkNmVjMTJjODZkZmEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbkBAIC04OSw3ICYjNDM7ODksNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbiBcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xuIFx0Y2hhciBwYnVmW3NpemVvZihcJiMzNDs2NTUzNVwmIzM0OyldLCAqdG1wO1xuLVx0dV9pbnQxNl90IGxlbjtcbiYjNDM7XHR1MTYgbGVuO1xuIFx0X19iZTE2IHBvcnQ7XG4gXHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuIFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xuQEAgLTE5OSwxMCAmIzQzOzE5OSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfYW1hbmRhX2luaXQodm9pZClcbiBcdH1cbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4gXHRcdFx0ICBcdTAwMjZhbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmFtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIEhFTFBFUl9OQU1FLCAxMDA4MCwgMTAwODAsIDEwMDgwLFxuJiM0MztcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTY2LDggJiM0Mzs2Niw2IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGV4cC1cdTAwM2V0dXBsZSAgICAgICAgICAgICAgICA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xuIFxuIFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXHUwMDNlaGVscGVyKTtcbi1cdGlmIChoZWxwZXIpXG4tXHRcdGV4cC1cdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci1cdTAwM2V0dXBsZS5zcmMudS51ZHAucG9ydDtcbiBcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51My5pcCAgICAgICA9IG1hc2s7XG4gXHRleHAtXHUwMDNlbWFzay5zcmMudS51ZHAucG9ydCAgPSBodG9ucygweEZGRkYpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcbmluZGV4IDA4NDdmODQ1NjEzZDZhLi5mMzk0NDU5OGMxNzI2ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xuQEAgLTM1LDExICYjNDM7MzUsNiBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2Z0cFwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mX2Z0cF9sb2NrKTtcbiBcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XG4tc3RhdGljIHVfaW50MTZfdCBwb3J0c1tNQVhfUE9SVFNdO1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tXG4gc3RhdGljIGJvb2wgbG9vc2U7XG4gbW9kdWxlX3BhcmFtKGxvb3NlLCBib29sLCAwNjAwKTtcbiBcbkBAIC01NjAsOCAmIzQzOzU1NSw4IEBAIHN0YXRpYyBpbnQgbmZfY3RfZnRwX2Zyb21fbmxhdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHAgX19yZWFkX21vc3RseTtcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC01NzAsMzIgJiM0Mzs1NjUsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2Z0cF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihmdHBfcHRyLCBwb3J0c19jICogMik7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyKSk7XG4gXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBGVFBfUE9SVDtcbi1cbiBcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xuIFx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmZ0cFsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgRlRQX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2ZnRwX2V4cF9wb2xpY3ksIDAsIGhlbHAsXG4tXHRcdFx0XHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHBbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbiYjNDM7XHRcdFx0ICBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcbiYjNDM7XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGZ0cCwgcG9ydHNfYyAqIDIsIGZ0cF9wdHIpO1xuJiM0MztcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2ZnRwLCBcdTAwMjZmdHBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXG5pbmRleCAyNDkzMWUzNzk5ODViYi4uNGNiMTY2NWJiYTAyMTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcbkBAIC02NzEsNyAmIzQzOzY3MSw3IEBAIHN0YXRpYyBpbnQgZXhwZWN0X2gyNDUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIHN0YXRpYyBpbnQgY2FsbGZvcndhcmRfZG9fZmlsdGVyKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNyYyxcbiBcdFx0XHRcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcbi1cdFx0XHRcdCB1X2ludDhfdCBmYW1pbHkpXG4mIzQzO1x0XHRcdFx0IHU4IGZhbWlseSlcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC0xNzEzLDE5ICYjNDM7MTcxMywxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBoMzIzX2hlbHBlcl9pbml0KHZvaWQpXG4gXHRpbnQgcmV0O1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCYjMzQ7UkFTXCYjMzQ7LCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O1JBU1wmIzM0OyxcbiBcdFx0XHQgIFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O1JBU1wmIzM0OywgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtSQVNcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LCAwLCAwLCAwLFxuJiM0MztcdFx0XHQgIFwmIzM0O0guMjQ1XCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OywgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OyxcbiBcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LCBROTMxX1BPUlQsIFE5MzFfUE9SVCwgUTkzMV9QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O1EuOTMxXCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDUwMDUwOWIxNzY2M2VkLi41MDZjNTgwMzQ3NjE1NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTQwLDEyICYjNDM7NDAsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfY291bnQgX19yZWFkX21vc3RseTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKG5mX2N0X25hdF9oZWxwZXJzX211dGV4KTtcbiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xuIFxuLS8qIFN0dXBpZCBoYXNoLCBidXQgY29sbGlzaW9uIGZyZWUgZm9yIHRoZSBkZWZhdWx0IHJlZ2lzdHJhdGlvbnMgb2YgdGhlXG4tICogaGVscGVycyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUsIHU4IHByb3RvbnVtKVxuIHtcbi1cdHJldHVybiAoKCh0dXBsZS1cdTAwM2VzcmMubDNudW0gXHUwMDNjXHUwMDNjIDgpIHwgdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtKSBeXG4tXHRcdChfX2ZvcmNlIF9fdTE2KXR1cGxlLVx1MDAzZXNyYy51LmFsbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XG4mIzQzO1x0c3RhdGljIHUzMiBzZWVkO1xuJiM0MztcdHUzMiBpbml0dmFsO1xuJiM0MztcbiYjNDM7XHRnZXRfcmFuZG9tX29uY2UoXHUwMDI2c2VlZCwgc2l6ZW9mKHNlZWQpKTtcbiYjNDM7XG4mIzQzO1x0aW5pdHZhbCA9IHNlZWQgXiBwcm90b251bTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGpoYXNoKG5hbWUsIHN0cmxlbihuYW1lKSwgaW5pdHZhbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XG4gfVxuIFxuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpcbkBAIC01NCwxOCAmIzQzOzU4LDE4IEBAIF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG4tXHRcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuLVx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgaC1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gbDNudW0pXG4tXHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRpID0gaGVscGVyX2hhc2gobmFtZSwgcHJvdG9udW0pO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBwcm90b251bSlcbi1cdFx0XHRcdHJldHVybiBoO1xuLVx0XHR9XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xuJiM0MztcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChoLVx1MDAzZW5mcHJvdG8gIT0gTkZQUk9UT19VTlNQRUMgXHUwMDI2XHUwMDI2IGgtXHUwMDNlbmZwcm90byAhPSBsM251bSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaC1cdTAwM2VsNHByb3RvID09IHByb3RvbnVtKVxuJiM0MztcdFx0XHRyZXR1cm4gaDtcbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0zNjMsOSAmIzQzOzM2Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xuIFxuIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIHtcbi1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrID0geyAuc3JjLnUuYWxsID0gaHRvbnMoMHhGRkZGKSB9O1xuLVx0dW5zaWduZWQgaW50IGggPSBoZWxwZXJfaGFzaChcdTAwMjZtZS1cdTAwM2V0dXBsZSk7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3VyO1xuJiM0MztcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IHJldCA9IDAsIGk7XG4gXG4gXHRCVUdfT04obWUtXHUwMDNlZXhwZWN0X2NsYXNzX21heCBcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7XG5AQCAtMzgyLDI5ICYjNDM7Mzg1LDE4IEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGggPSBoZWxwZXJfaGFzaChtZS1cdTAwM2VuYW1lLCBtZS1cdTAwM2VsNHByb3RvKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcbi1cdFx0XHRpZiAoIXN0cmNtcChjdXItXHUwMDNlbmFtZSwgbWUtXHUwMDNlbmFtZSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IE5GUFJPVE9fVU5TUEVDIHx8XG4tXHRcdFx0ICAgICBjdXItXHUwMDNldHVwbGUuc3JjLmwzbnVtID09IG1lLVx1MDAzZXR1cGxlLnNyYy5sM251bSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGN1ci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPT0gbWUtXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHtcbiYjNDM7XHRcdGlmICghc3RyY21wKGN1ci1cdTAwM2VuYW1lLCBtZS1cdTAwM2VuYW1lKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY3VyLVx1MDAzZW5mcHJvdG8gPT0gTkZQUk9UT19VTlNQRUMgfHxcbiYjNDM7XHRcdCAgICAgY3VyLVx1MDAzZW5mcHJvdG8gPT0gbWUtXHUwMDNlbmZwcm90bykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY3VyLVx1MDAzZWw0cHJvdG8gPT0gbWUtXHUwMDNlbDRwcm90bykge1xuJiM0MztcdFx0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBhdm9pZCB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBmb3IgYXV0b19hc3NpZ25faGVscGVyICovXG4tXHRpZiAoIShtZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFKSkge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xuLVx0XHRcdGlmIChuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoXHUwMDI2Y3VyLVx1MDAzZXR1cGxlLCBcdTAwMjZtZS1cdTAwM2V0dXBsZSxcbi1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1hc2spKSB7XG4tXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZtZS1cdTAwM2VjdF9yZWZjbnQsIDEpO1xuIFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XG4gXHRuZl9jdF9oZWxwZXJfY291bnQmIzQzOyYjNDM7O1xuQEAgLTQ3OSw4ICYjNDM7NDcxLDcgQEAgdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLVx0XHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXG4mIzQzO1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5AQCAtNDkyLDkgJiM0Mzs0ODMsOCBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4ge1xuIFx0bWVtc2V0KGhlbHBlciwgMCwgc2l6ZW9mKCpoZWxwZXIpKTtcbiBcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0gPSBsM251bTtcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPSBwcm90b251bTtcbi1cdGhlbHBlci1cdTAwM2V0dXBsZS5zcmMudS5hbGwgPSBodG9ucyhzcGVjX3BvcnQpO1xuJiM0MztcdGhlbHBlci1cdTAwM2VuZnByb3RvID0gbDNudW07XG4mIzQzO1x0aGVscGVyLVx1MDAzZWw0cHJvdG8gPSBwcm90b251bTtcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItXHUwMDNlaGVscCwgaGVscCk7XG4gXHRoZWxwZXItXHUwMDNlZnJvbV9ubGF0dHIgPSBmcm9tX25sYXR0cjtcbkBAIC01MDIsMTAgJiM0Mzs0OTIsNyBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4gXHRzbnByaW50ZihoZWxwZXItXHUwMDNlbmF0X21vZF9uYW1lLCBzaXplb2YoaGVscGVyLVx1MDAzZW5hdF9tb2RfbmFtZSksXG4gXHRcdCBORl9OQVRfSEVMUEVSX1BSRUZJWCBcJiMzNDslc1wmIzM0OywgbmFtZSk7XG4gXG4tXHRpZiAoc3BlY19wb3J0ID09IGRlZmF1bHRfcG9ydClcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbi1cdGVsc2Vcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzLSV1XCYjMzQ7LCBuYW1lLCBpZCk7XG4mIzQzO1x0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoZXhwZWN0X2NsYXNzX21heCBcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUykpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG5pbmRleCAxOTNhYjM0ZGI3OTVmOS4uNGU2YmFmZTQxNDM3NTIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbkBAIC0yMSw5ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaFx1MDAzZVxuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4gc3RhdGljIHVuc2lnbmVkIGludCBtYXhfZGNjX2NoYW5uZWxzID0gODtcbiBzdGF0aWMgdW5zaWduZWQgaW50IGRjY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMDA7XG4gLyogVGhpcyBpcyBzbG93LCBidXQgaXQmIzM5O3Mgc2ltcGxlLiAtLVJSICovXG5AQCAtNDIsOCAmIzQzOzM5LDYgQEAgTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2lyY1wmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcbiBcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXHUwMDI2cG9ydHNfYywgMDQwMCk7XG4tTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgXCYjMzQ7cG9ydCBudW1iZXJzIG9mIElSQyBzZXJ2ZXJzXCYjMzQ7KTtcbiBtb2R1bGVfcGFyYW0obWF4X2RjY19jaGFubmVscywgdWludCwgMDQwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfZGNjX2NoYW5uZWxzLCBcJiMzNDttYXggbnVtYmVyIG9mIGV4cGVjdGVkIERDQyBjaGFubmVscyBwZXIgXCYjMzQ7XG4gXHRcdFx0XHQgICBcJiMzNDtJUkMgc2Vzc2lvblwmIzM0Oyk7XG5AQCAtMjU0LDEzICYjNDM7MjQ5LDEzIEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmNbTUFYX1BPUlRTXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaXJjX3B0cltNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmMgX19yZWFkX21vc3RseTtcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyIF9fcmVhZF9tb3N0bHk7XG4gc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0O1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xuIFxuQEAgLTI4MiwxNyAmIzQzOzI3NywxMSBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiBcdGlmICghaXJjX2J1ZmZlcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGlyYyBwb3J0ICovXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBJUkNfUE9SVDtcbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbiYjNDM7XHRcdFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZpcmNbaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHRcdCAgSVJDX1BPUlQsIHBvcnRzW2ldLCBpLCBcdTAwMjZpcmNfZXhwX3BvbGljeSxcbi1cdFx0XHRcdCAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0fVxuLVxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoXHUwMDI2aXJjWzBdLCBwb3J0c19jLCBpcmNfcHRyKTtcbiYjNDM7XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmlyYywgXHUwMDI2aXJjX3B0cik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdGtmcmVlKGlyY19idWZmZXIpO1xuQEAgLTMwNCw3ICYjNDM7MjkzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19pcmNfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoaXJjX3B0ciwgcG9ydHNfYyk7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGlyY19wdHIpO1xuIFx0a2ZyZWUoaXJjX2J1ZmZlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xuaW5kZXggODlkMWNmN2Q2NTEyZTcuLmNhYTJiMTAxZmE5ZTVlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcbkBAIC0yMSw3ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBIRUxQRVJfTkFNRVx0XCYjMzQ7bmV0Ymlvcy1uc1wmIzM0O1xuLSNkZWZpbmUgTk1CRF9QT1JUXHQxMzdcbiBcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1BhdHJpY2sgTWNIYXJkeSBcdTAwM2NrYWJlckB0cmFzaC5uZXRcdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcJiMzNDspO1xuQEAgLTU0LDcgJiM0Mzs1Myw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHQgIE5NQkRfUE9SVCwgTk1CRF9QT1JULCBOTUJEX1BPUlQsXG4gXHRcdFx0ICBcdTAwMjZleHBfcG9saWN5LCAwLCBuZXRiaW9zX25zX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmhlbHBlciwgXHUwMDI2aGVscGVyX3B0cik7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuaW5kZXggNDlkMTUxMWU5OTIxODUuLmI0MDg1YWYzYWQxY2UwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXG5AQCAtMzEsOCAmIzQzOzMxLDggQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRpZiAoIWhlbHBlcilcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbi1cdGlmIChoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gcHJvdG8pXG4mIzQzO1x0aWYgKGhlbHBlci1cdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBoZWxwZXItXHUwMDNlbmZwcm90byAhPSBwcm90bylcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbkBAIC02MCw3ICYjNDM7NjAsNyBAQCBpbnQgbmZfY3RfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXHR9XG4gXG4tXHRpZiAoaGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSAhPSBwcm90bylcbiYjNDM7XHRpZiAoaGVscGVyLVx1MDAzZWw0cHJvdG8gIT0gcHJvdG8pXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRoZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLVx1MDAzZWhlbHApO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuaW5kZXggODBmYzE0Yzg3ZGRjNGIuLmNiZjMyYTNjYjFmNjEyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbkBAIC01NDAsNyAmIzQzOzU0MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19wcHRwX2luaXQodm9pZClcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9wcHRwX21hc3RlcikpO1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2cHB0cCwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0ICBcJiMzNDtwcHRwXCYjMzQ7LCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULFxuJiM0MztcdFx0XHQgIFwmIzM0O3BwdHBcJiMzNDssXG4gXHRcdFx0ICBcdTAwMjZwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXG5pbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xuQEAgLTM0LDExICYjNDM7MzQsNiBAQCBNT0RVTEVfQVVUSE9SKFwmIzM0O01pY2hhbCBTY2htaWR0IFx1MDAzY21zY2htaWR0QHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTQU5FIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1cbiBzdHJ1Y3Qgc2FuZV9yZXF1ZXN0IHtcbiBcdF9fYmUzMiBSUENfY29kZTtcbiAjZGVmaW5lIFNBTkVfTkVUX1NUQVJUICAgICAgNyAgIC8qIFJQQyBjb2RlICovXG5AQCAtMTY5LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzYW5lX2V4cF9wb2xpY3kgPSB7XG4gXHQubWF4X2V4cGVjdGVkXHQ9IDEsXG5AQCAtMTc5LDMyICYjNDM7MTc0LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0ge1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2FuZV9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzYW5lX3B0ciwgcG9ydHNfYyAqIDIpO1xuJiM0MztcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzYW5lX3B0cik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zYW5lX21hc3RlcikpO1xuIFxuLVx0aWYgKHBvcnRzX2MgPT0gMClcbi1cdFx0cG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gU0FORV9QT1JUO1xuLVxuLVx0LyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnNcbi1cdFx0IGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTQU5FX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSxcbi1cdFx0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmVbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLFxuLVx0XHRcdFx0ICBcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXG4tXHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4mIzQzO1x0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuJiM0MztcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNhbmUsIHBvcnRzX2MgKiAyLCBzYW5lX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZzYW5lLCBcdTAwMjZzYW5lX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuaW5kZXggNWVjM2E0YTRiYmQ3MDcuLmQwYjg1YjhhZDFlNmQ4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5AQCAtMzUsMTIgJiM0MzszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTSVAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcJiMzNDspO1xuIE1PRFVMRV9BTElBUyhcJiMzNDtpcF9jb25udHJhY2tfc2lwXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTXHQ4XG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcJiMzNDtwb3J0IG51bWJlcnMgb2YgU0lQIHNlcnZlcnNcJiMzNDspO1xuLVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUO1xuIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhzaXBfdGltZW91dCwgXCYjMzQ7dGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvblwmIzM0Oyk7XG5AQCAtMTc2NCw4ICYjNDM7MTc1OCw4IEBAIHN0YXRpYyBpbnQgc2lwX2hlbHBfdWRwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0cmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBwcm90b2ZmLCBkYXRhb2ZmLCBcdTAwMjZkcHRyLCBcdTAwMjZkYXRhbGVuKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0cltNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwWzJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggJiM0MzsgMV0gPSB7XG4gXHRbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHtcbkBAIC0xNzkyLDM4ICYjNDM7MTc4NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICYjNDM7IDFcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpXG4ge1xuLVx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCBwb3J0c19jICogNCk7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCAyKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NpcF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NpcF9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MmIzQzOyYjNDM7XSA9IFNJUF9QT1JUO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzQgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSAmIzQzOyAxXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuLVx0XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNpcFs0ICogaSAmIzQzOyAyXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGkgJiM0MzsgM10sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcbi1cdFx0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4tXHRcdFx0XHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcbi1cdH1cbiYjNDM7XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbMF0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcbiYjNDM7XHRcdFx0ICBIRUxQRVJfTkFNRSxcbiYjNDM7XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbiYjNDM7XHRcdFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XG4mIzQzO1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdCAgSEVMUEVSX05BTUUsXG4mIzQzO1x0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXG4mIzQzO1x0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCBwb3J0c19jICogNCwgc2lwX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCAyLCBzaXBfcHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcbmluZGV4IGI2ZmNlNTcwM2ZjZTc3Li4xMDk5ODZkNWQ1NWU2OSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXG5AQCAtMTQsOCAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5oXHUwMDNlXG4gXG4tI2RlZmluZSBTTk1QX1BPUlRcdDE2MVxuLVxuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7SmlyaSBPbHNhIFx1MDAzY2pvbHNhQHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTTk1QIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuQEAgLTU1LDcgJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCYjMzQ7c25tcFwmIzM0OywgU05NUF9QT1JULCBTTk1QX1BPUlQsIFNOTVBfUE9SVCxcbiYjNDM7XHRcdFx0ICBcJiMzNDtzbm1wXCYjMzQ7LFxuIFx0XHRcdCAgXHUwMDI2ZXhwX3BvbGljeSwgMCwgc25tcF9jb25udHJhY2tfaGVscCwgTlVMTCxcbiBcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcbmluZGV4IDQzOTNjNDM1YWEzNTQ5Li5hNjk1NTllZGY5YjM2MyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXG5AQCAtMjYsMTIgJiM0MzsyNiw2IEBAIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gTU9EVUxFX0FMSUFTKFwmIzM0O2lwX2Nvbm50cmFja190ZnRwXCYjMzQ7KTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFwmIzM0O1BvcnQgbnVtYmVycyBvZiBURlRQIHNlcnZlcnNcJiMzNDspO1xuLVxuIG5mX25hdF90ZnRwX2hvb2tfZm4gX19yY3UgKm5mX25hdF90ZnRwX2hvb2sgX19yZWFkX21vc3RseTtcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfdGZ0cF9ob29rKTtcbiBcbkBAIC05NSw4ICYjNDM7ODksOCBAQCBzdGF0aWMgaW50IHRmdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHBbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC0xMDUsMzAgJiM0Mzs5OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3RmdHBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIodGZ0cF9wdHIsIHBvcnRzX2MgKiAyKTtcbiYjNDM7XHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIodGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTigwKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MmIzQzOyYjNDM7XSA9IFRGVFBfUE9SVDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHR9XG4mIzQzO1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxuJiM0MztcdFx0XHQgIEhFTFBFUl9OQU1FLFxuJiM0MztcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuJiM0MztcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiBcbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHRmdHAsIHBvcnRzX2MgKiAyLCB0ZnRwX3B0cik7XG4mIzQzO1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZ0ZnRwLCBcdTAwMjZ0ZnRwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCA2M2ZmNmI0ZDVkMjE0YS4uOGFjMzI2ZTFlYjViYTkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuQEAgLTM5LDEyICYjNDM7MzksNiBAQCBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKm5mX25hdF9ieXNvdXJjZSBfX3JlYWRfbW9zdGx5O1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7XG4gc3RhdGljIHNpcGhhc2hfYWxpZ25lZF9rZXlfdCBuZl9uYXRfaGFzaF9ybmQ7XG4gXG4tc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2IHtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgX19yY3UgKmVudHJpZXM7XG4tXG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XG4tfTtcbi1cbiBzdHJ1Y3QgbmZfbmF0X2hvb2tzX25ldCB7XG4gXHRzdHJ1Y3QgbmZfaG9va19vcHMgKm5hdF9ob29rX29wcztcbiBcdHVuc2lnbmVkIGludCB1c2VycztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xuaW5kZXggMDdmNTFmZTc1ZmJlNDMuLjY0YjliYWMyMjhlYWU4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xuQEAgLTc3MCw2ICYjNDM7NzcwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2NF9vcHNbXSA9IHtcbiBcdFx0LnBmXHRcdD0gTkZQUk9UT19JUFY0LFxuIFx0XHQuaG9va251bVx0PSBORl9JTkVUX1BSRV9ST1VUSU5HLFxuIFx0XHQucHJpb3JpdHlcdD0gTkZfSVBfUFJJX05BVF9EU1QsXG4mIzQzO1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovXG4gXHR7XG5AQCAtNzc3LDYgJiM0Mzs3NzgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY0X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfUE9TVF9ST1VUSU5HLFxuIFx0XHQucHJpb3JpdHlcdD0gTkZfSVBfUFJJX05BVF9TUkMsXG4mIzQzO1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovXG4gXHR7XG5AQCAtNzg0LDYgJiM0Mzs3ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY0X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfTE9DQUxfT1VULFxuIFx0XHQucHJpb3JpdHlcdD0gTkZfSVBfUFJJX05BVF9EU1QsXG4mIzQzO1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovXG4gXHR7XG5AQCAtNzkxLDYgJiM0Mzs3OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY0X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfTE9DQUxfSU4sXG4gXHRcdC5wcmlvcml0eVx0PSBORl9JUF9QUklfTkFUX1NSQyxcbiYjNDM7XHRcdC5ob29rX29wc190eXBlXHQ9IE5GX0hPT0tfT1BfTkFULFxuIFx0fSxcbiB9O1xuIFxuQEAgLTEwMzEsNiAmIzQzOzEwMzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY2X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfUFJFX1JPVVRJTkcsXG4gXHRcdC5wcmlvcml0eVx0PSBORl9JUDZfUFJJX05BVF9EU1QsXG4mIzQzO1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovXG4gXHR7XG5AQCAtMTAzOCw2ICYjNDM7MTA0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7XG4gXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNixcbiBcdFx0Lmhvb2tudW1cdD0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsXG4gXHRcdC5wcmlvcml0eVx0PSBORl9JUDZfUFJJX05BVF9TUkMsXG4mIzQzO1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovXG4gXHR7XG5AQCAtMTA0NSw2ICYjNDM7MTA1MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7XG4gXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNixcbiBcdFx0Lmhvb2tudW1cdD0gTkZfSU5FVF9MT0NBTF9PVVQsXG4gXHRcdC5wcmlvcml0eVx0PSBORl9JUDZfUFJJX05BVF9EU1QsXG4mIzQzO1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovXG4gXHR7XG5AQCAtMTA1Miw2ICYjNDM7MTA1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7XG4gXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNixcbiBcdFx0Lmhvb2tudW1cdD0gTkZfSU5FVF9MT0NBTF9JTixcbiBcdFx0LnByaW9yaXR5XHQ9IE5GX0lQNl9QUklfTkFUX1NSQyxcbiYjNDM7XHRcdC5ob29rX29wc190eXBlXHQ9IE5GX0hPT0tfT1BfTkFULFxuIFx0fSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uNTY2NTVjYjdmZTJhZDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5AQCAtNjcsNyAmIzQzOzY3LDcgQEAgbmZubF91c2Vyc3BhY2VfY3RoZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2N0aGVscGVyX3R1cGxlX3BvbFtORkNUSF9UVVBMRV9NQVgmIzQzOzFdID0ge1xuLVx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sXG4mIzQzO1x0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMTYsIE5GUFJPVE9fSVBWNiksXG4gXHRbTkZDVEhfVFVQTEVfTDRQUk9UT05VTV0gPSB7IC50eXBlID0gTkxBX1U4LCB9LFxuIH07XG4gXG5AQCAtMjU0LDcgJiM0MzsyNTQsOCBAQCBuZm5sX2N0aGVscGVyX2NyZWF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcbiBcdGhlbHBlci1cdTAwM2VkYXRhX2xlbiA9IHNpemU7XG4gXG4gXHRoZWxwZXItXHUwMDNlZmxhZ3MgfD0gTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFO1xuLVx0bWVtY3B5KFx1MDAyNmhlbHBlci1cdTAwM2V0dXBsZSwgdHVwbGUsIHNpemVvZihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlKSk7XG4mIzQzO1x0aGVscGVyLVx1MDAzZW5mcHJvdG8gPSB0dXBsZS1cdTAwM2VzcmMubDNudW07XG4mIzQzO1x0aGVscGVyLVx1MDAzZWw0cHJvdG8gPSB0dXBsZS1cdTAwM2Vkc3QucHJvdG9udW07XG4gXG4gXHRoZWxwZXItXHUwMDNlbWUgPSBUSElTX01PRFVMRTtcbiBcdGhlbHBlci1cdTAwM2VoZWxwID0gbmZubF91c2Vyc3BhY2VfY3RoZWxwZXI7XG5AQCAtNDQ5LDggJiM0Mzs0NTAsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfbmV3KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdGlmIChzdHJuY21wKGN1ci1cdTAwM2VuYW1lLCBoZWxwZXJfbmFtZSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKCh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZXR1cGxlLnNyYy5sM251bSB8fFxuLVx0XHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcbiYjNDM7XHRcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4mIzQzO1x0XHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXHUwMDNlbDRwcm90bykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpbmZvLVx1MDAzZW5saC1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfRVhDTClcbkBAIC00NzksMTAgJiM0Mzs0ODAsMTAgQEAgbmZubF9jdGhlbHBlcl9kdW1wX3R1cGxlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuIFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIE5GQ1RIX1RVUExFX0wzUFJPVE9OVU0sXG4tXHRcdFx0IGh0b25zKGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0pKSlcbiYjNDM7XHRcdFx0IGh0b25zKGhlbHBlci1cdTAwM2VuZnByb3RvKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcbiYjNDM7XHRpZiAobmxhX3B1dF91OChza2IsIE5GQ1RIX1RVUExFX0w0UFJPVE9OVU0sIGhlbHBlci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRubGFfbmVzdF9lbmQoc2tiLCBuZXN0X3Bhcm1zKTtcbkBAIC02NjEsOCAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKHR1cGxlX3NldCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZXR1cGxlLnNyYy5sM251bSB8fFxuLVx0XHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcbiYjNDM7XHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4mIzQzO1x0XHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXHUwMDNlbDRwcm90bykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNrYjIgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbkBAIC03MjEsOCAmIzQzOzcyMiw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKHR1cGxlX3NldCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVx1MDAzZXR1cGxlLnNyYy5sM251bSB8fFxuLVx0XHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcbiYjNDM7XHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4mIzQzO1x0XHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXHUwMDNlbDRwcm90bykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGZvdW5kID0gdHJ1ZTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG5pbmRleCAxNzBkM2RiODYwYzU2NC4uNjZjMjAxNmY2MDQ5ZDcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmNcbkBAIC0xNjgsNyAmIzQzOzE2OCw3IEBAIHN0YXRpYyBpbnQgY3R0aW1lb3V0X25ld190aW1lb3V0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9mcmVlX3RpbWVvdXRfcG9saWN5O1xuIFxuLVx0c3RyY3B5KHRpbWVvdXQtXHUwMDNlbmFtZSwgbmxhX2RhdGEoY2RhW0NUQV9USU1FT1VUX05BTUVdKSk7XG4mIzQzO1x0bmxhX3N0cnNjcHkodGltZW91dC1cdTAwM2VuYW1lLCBjZGFbQ1RBX1RJTUVPVVRfTkFNRV0sIHNpemVvZih0aW1lb3V0LVx1MDAzZW5hbWUpKTtcbiBcdHRpbWVvdXQtXHUwMDNldGltZW91dC1cdTAwM2VsM251bSA9IGwzbnVtO1xuIFx0dGltZW91dC1cdTAwM2V0aW1lb3V0LVx1MDAzZWw0cHJvdG8gPSBsNHByb3RvO1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnRpbWVvdXQtXHUwMDNldGltZW91dC1cdTAwM2VyZWZjbnQsIDEpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuaW5kZXggNTYyM2MxOGZjZDEyZjAuLjk1MDA1ZTlhNjA2Njg4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC0xOTAsNyAmIzQzOzE5MCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX3B1dF9uZnRfZnRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgcHJpb3JpdHksXG4gXHRcdFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcbiB7XG4gXHR1MTYgZXZlbnQgPSBuZm5sX21zZ190eXBlKE5GTkxfU1VCU1lTX0hPT0ssIE5GTkxfTVNHX0hPT0tfR0VUKTtcbkBAIC0yNDQsNyAmIzQzOzI0NCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0cmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX1BSSU9SSVRZLCBodG9ubChvcHMtXHUwMDNlcHJpb3JpdHkpKTtcbiYjNDM7XHRyZXQgPSBubGFfcHV0X2JlMzIobmxza2IsIE5GTkxBX0hPT0tfUFJJT1JJVFksIGh0b25sKHByaW9yaXR5KSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC0zMzcsNiAmIzQzOzMzNywzMCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZVxuIFx0cmV0dXJuIGhvb2tfaGVhZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4mIzQzO1x0XHRcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4mIzQzO1x0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxuJiM0MztcdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LCBzZXEpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4ge1xuQEAgLTM2NSw4ICYjNDM7Mzg5LDEzIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbiBcdGZvciAoOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sIGZhbWlseSxcbi1cdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiM0MztcdFx0aWYgKG9wc1tpXS1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuJiM0MztcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXG4mIzQzO1x0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSxcbiYjNDM7XHRcdFx0XHRcdFx0IG9wc1tpXS1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuJiM0MztcdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbmluZGV4IDAzYTg4Yzc3ZTBmMDI4Li4zNThiOTI4N2UxMmU4NyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbkBAIC0xMjk3LDYgJiM0MzsxMjk3LDE3IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuJiM0MztzdGF0aWMgdm9pZCBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqdGhpcylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gKmV4cGZuO1xuJiM0MztcbiYjNDM7XHRleHBmbiA9IG5mX2N0X2hlbHBlcl9leHBlY3Rmbl9maW5kX2J5X25hbWUoXCYjMzQ7bmF0LWZvbGxvdy1tYXN0ZXJcJiMzNDspO1xuJiM0MztcdGlmIChleHBmbilcbiYjNDM7XHRcdGV4cGZuLVx1MDAzZWV4cGVjdGZuKGN0LCB0aGlzKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG5AQCAtMTM0Miw2ICYjNDM7MTM1MywxMyBAQCBzdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXG4gXHRcdCAgICAgICAgICBwcml2LVx1MDAzZWw0cHJvdG8sIE5VTEwsIFx1MDAyNnByaXYtXHUwMDNlZHBvcnQpO1xuIFx0ZXhwLVx1MDAzZXRpbWVvdXQgJiM0Mzs9IHByaXYtXHUwMDNldGltZW91dDtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbiYjNDM7XHRpZiAoY3QtXHUwMDNlc3RhdHVzIFx1MDAyNiBJUFNfTkFUX01BU0spIHtcbiYjNDM7XHRcdGV4cC1cdTAwM2VzYXZlZF9wcm90by50Y3AucG9ydCA9IHByaXYtXHUwMDNlZHBvcnQ7XG4mIzQzO1x0XHRleHAtXHUwMDNlZGlyID0gIWRpcjtcbiYjNDM7XHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcjtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuIFx0aWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMClcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIFxuQEAgLTEzNzUsNiAmIzQzOzEzOTMsMTMgQEAgc3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2N0X2V4cGVjdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gfTtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gbmZ0X2N0X25hdCBfX3JlYWRfbW9zdGx5ID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bmZ0X2N0LWZvbGxvdy1tYXN0ZXJcJiMzNDssXG4mIzQzO1x0LmV4cGVjdGZuID0gbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyLFxuJiM0Mzt9O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGludCBfX2luaXQgbmZ0X2N0X21vZHVsZV9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbkBAIC0xNDAwLDYgJiM0MzsxNDI1LDkgQEAgc3RhdGljIGludCBfX2luaXQgbmZ0X2N0X21vZHVsZV9pbml0KHZvaWQpXG4gXHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFx1MDAyNm5mdF9jdF90aW1lb3V0X29ial90eXBlKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyNDtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4mIzQzO1x0bmZfY3RfaGVscGVyX2V4cGVjdGZuX3JlZ2lzdGVyKFx1MDAyNm5mdF9jdF9uYXQpO1xuICNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQyNSw2ICYjNDM7MTQ1MywxMyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmZ0X2N0X21vZHVsZV9leGl0KHZvaWQpXG4gXHRuZnRfdW5yZWdpc3Rlcl9vYmooXHUwMDI2bmZ0X2N0X2hlbHBlcl9vYmpfdHlwZSk7XG4gXHRuZnRfdW5yZWdpc3Rlcl9leHByKFx1MDAyNm5mdF9ub3RyYWNrX3R5cGUpO1xuIFx0bmZ0X3VucmVnaXN0ZXJfZXhwcihcdTAwMjZuZnRfY3RfdHlwZSk7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuJiM0MztcdG5mX2N0X2hlbHBlcl9leHBlY3Rmbl91bnJlZ2lzdGVyKFx1MDAyNm5mdF9jdF9uYXQpO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdG5mX2N0X2hlbHBlcl9leHBlY3Rmbl9kZXN0cm95KFx1MDAyNm5mdF9jdF9uYXQpO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MzsjZW5kaWZcbiB9XG4gXG4gbW9kdWxlX2luaXQobmZ0X2N0X21vZHVsZV9pbml0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbmluZGV4IDAxOGJiYjZkZjRjZTQzLi5lZmMyNWU3ODhhMWM1MiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jXG5AQCAtNTQ0LDggJiM0Mzs1NDQsNyBAQCBzdGF0aWMgaW50IG5mdF9hcnJheV9pbnRlcnZhbHNfYWxsb2Moc3RydWN0IG5mdF9hcnJheSAqYXJyYXksIHUzMiBtYXhfaW50ZXJ2YWxzKVxuIFx0aWYgKCFpbnRlcnZhbHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0aWYgKGFycmF5LVx1MDAzZWludGVydmFscylcbi1cdFx0a3ZmcmVlKGFycmF5LVx1MDAzZWludGVydmFscyk7XG4mIzQzO1x0a3ZmcmVlKGFycmF5LVx1MDAzZWludGVydmFscyk7XG4gXG4gXHRhcnJheS1cdTAwM2VpbnRlcnZhbHMgPSBpbnRlcnZhbHM7XG4gXHRhcnJheS1cdTAwM2VtYXhfaW50ZXJ2YWxzID0gbWF4X2ludGVydmFscztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmNcbmluZGV4IDRlNjcwOGMyMzkyMmI5Li5lNjQxMTZiZjI2Mzc4NiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jXG5AQCAtMTkyMCw5ICYjNDM7MTkyMCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgeHRfdGFyZ2V0X3NlcV9vcHMgPSB7XG4gXHQuc2hvd1x0PSB4dF90YXJnZXRfc2VxX3Nob3csXG4gfTtcbiBcbi0jZGVmaW5lIEZPUk1BVF9UQUJMRVNcdFwmIzM0O190YWJsZXNfbmFtZXNcJiMzNDtcbi0jZGVmaW5lXHRGT1JNQVRfTUFUQ0hFU1x0XCYjMzQ7X3RhYmxlc19tYXRjaGVzXCYjMzQ7XG4tI2RlZmluZSBGT1JNQVRfVEFSR0VUUyBcdFwmIzM0O190YWJsZXNfdGFyZ2V0c1wmIzM0O1xuJiM0MzsjZGVmaW5lIEZPUk1BVF9UQUJMRVNcdFwmIzM0OyVzX3RhYmxlc19uYW1lc1wmIzM0O1xuJiM0MzsjZGVmaW5lXHRGT1JNQVRfTUFUQ0hFU1x0XCYjMzQ7JXNfdGFibGVzX21hdGNoZXNcJiMzNDtcbiYjNDM7I2RlZmluZSBGT1JNQVRfVEFSR0VUU1x0XCYjMzQ7JXNfdGFibGVzX3RhcmdldHNcJiMzNDtcbiBcbiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cbiBcbkBAIC0yMDMzLDggJiM0MzsyMDMzLDcgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZilcbiBcdHJvb3RfdWlkID0gbWFrZV9rdWlkKG5ldC1cdTAwM2V1c2VyX25zLCAwKTtcbiBcdHJvb3RfZ2lkID0gbWFrZV9rZ2lkKG5ldC1cdTAwM2V1c2VyX25zLCAwKTtcbiBcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBQkxFUywgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEZPUk1BVF9UQUJMRVMsIHh0X3ByZWZpeFthZl0pO1xuIFx0cHJvYyA9IHByb2NfY3JlYXRlX25ldF9kYXRhKGJ1ZiwgMDQ0MCwgbmV0LVx1MDAzZXByb2NfbmV0LCBcdTAwMjZ4dF90YWJsZV9zZXFfb3BzLFxuIFx0XHRcdHNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSxcbiBcdFx0XHQodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFmKTtcbkBAIC0yMDQzLDggJiM0MzsyMDQyLDcgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZilcbiBcdGlmICh1aWRfdmFsaWQocm9vdF91aWQpIFx1MDAyNlx1MDAyNiBnaWRfdmFsaWQocm9vdF9naWQpKVxuIFx0XHRwcm9jX3NldF91c2VyKHByb2MsIHJvb3RfdWlkLCByb290X2dpZCk7XG4gXG4tXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xuLVx0c3RybGNhdChidWYsIEZPUk1BVF9NQVRDSEVTLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX01BVENIRVMsIHh0X3ByZWZpeFthZl0pO1xuIFx0cHJvYyA9IHByb2NfY3JlYXRlX3NlcV9wcml2YXRlKGJ1ZiwgMDQ0MCwgbmV0LVx1MDAzZXByb2NfbmV0LFxuIFx0XHRcdFx1MDAyNnh0X21hdGNoX3NlcV9vcHMsIHNpemVvZihzdHJ1Y3QgbmZfbXR0Z190cmF2KSxcbiBcdFx0XHQodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFmKTtcbkBAIC0yMDUzLDggJiM0MzsyMDUxLDcgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZilcbiBcdGlmICh1aWRfdmFsaWQocm9vdF91aWQpIFx1MDAyNlx1MDAyNiBnaWRfdmFsaWQocm9vdF9naWQpKVxuIFx0XHRwcm9jX3NldF91c2VyKHByb2MsIHJvb3RfdWlkLCByb290X2dpZCk7XG4gXG4tXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xuLVx0c3RybGNhdChidWYsIEZPUk1BVF9UQVJHRVRTLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBUkdFVFMsIHh0X3ByZWZpeFthZl0pO1xuIFx0cHJvYyA9IHByb2NfY3JlYXRlX3NlcV9wcml2YXRlKGJ1ZiwgMDQ0MCwgbmV0LVx1MDAzZXByb2NfbmV0LFxuIFx0XHRcdCBcdTAwMjZ4dF90YXJnZXRfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBuZl9tdHRnX3RyYXYpLFxuIFx0XHRcdCAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFmKTtcbkBAIC0yMDY4LDEzICYjNDM7MjA2NSwxMSBAQCBpbnQgeHRfcHJvdG9faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKVxuIFxuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIG91dF9yZW1vdmVfbWF0Y2hlczpcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX01BVENIRVMsIHNpemVvZihidWYpKTtcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfTUFUQ0hFUywgeHRfcHJlZml4W2FmXSk7XG4gXHRyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gXG4gb3V0X3JlbW92ZV90YWJsZXM6XG4tXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xuLVx0c3RybGNhdChidWYsIEZPUk1BVF9UQUJMRVMsIHNpemVvZihidWYpKTtcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfVEFCTEVTLCB4dF9wcmVmaXhbYWZdKTtcbiBcdHJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LVx1MDAzZXByb2NfbmV0KTtcbiBvdXQ6XG4gXHRyZXR1cm4gLTE7XG5AQCAtMjA4NywxNiAmIzQzOzIwODIsMTMgQEAgdm9pZCB4dF9wcm90b19maW5pKHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgYWYpXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gXHRjaGFyIGJ1ZltYVF9GVU5DVElPTl9NQVhOQU1FTEVOXTtcbiBcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBQkxFUywgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEZPUk1BVF9UQUJMRVMsIHh0X3ByZWZpeFthZl0pO1xuIFx0cmVtb3ZlX3Byb2NfZW50cnkoYnVmLCBuZXQtXHUwMDNlcHJvY19uZXQpO1xuIFxuLVx0c3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTtcbi1cdHN0cmxjYXQoYnVmLCBGT1JNQVRfVEFSR0VUUywgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEZPUk1BVF9UQVJHRVRTLCB4dF9wcmVmaXhbYWZdKTtcbiBcdHJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LVx1MDAzZXByb2NfbmV0KTtcbiBcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX01BVENIRVMsIHNpemVvZihidWYpKTtcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfTUFUQ0hFUywgeHRfcHJlZml4W2FmXSk7XG4gXHRyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gI2VuZGlmIC8qQ09ORklHX1BST0NfRlMqL1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmNcbmluZGV4IDkzZjA2NDMwNjkwMWMwLi4yNjVkMjE2OTc4NDdiZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVENQT1BUU1RSSVAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5jXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5oXHUwMDNlXG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb3B0bGVuKGNvbnN0IHVfaW50OF90ICpvcHQsIHVuc2lnbmVkIGludCBvZmZzZXQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9wdGxlbihjb25zdCB1OCAqb3B0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxuIHtcbiBcdC8qIEJld2FyZSB6ZXJvLWxlbmd0aCBvcHRpb25zOiBtYWtlIGZpbml0ZSBwcm9ncmVzcyAqL1xuIFx0aWYgKG9wdFtvZmZzZXRdIFx1MDAzYz0gVENQT1BUX05PUCB8fCBvcHRbb2Zmc2V0JiM0MzsxXSA9PSAwKVxuQEAgLTMzLDggJiM0MzszMyw4IEBAIHRjcG9wdHN0cmlwX21hbmdsZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCB4dF90Y3BvcHRzdHJpcF90YXJnZXRfaW5mbyAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcdHN0cnVjdCB0Y3BoZHIgKnRjcGgsIF90aDtcbiBcdHVuc2lnbmVkIGludCBvcHRsLCBpLCBqO1xuLVx0dV9pbnQxNl90IG4sIG87XG4tXHR1X2ludDhfdCAqb3B0O1xuJiM0MztcdHUxNiBuLCBvO1xuJiM0MztcdHU4ICpvcHQ7XG4gXHRpbnQgdGNwX2hkcmxlbjtcbiBcbiBcdC8qIFRoaXMgaXMgYSBmcmFnbWVudCwgbm8gVENQIGhlYWRlciBpcyBhdmFpbGFibGUgKi9cbkBAIC05Nyw3ICYjNDM7OTcsNyBAQCB0Y3BvcHRzdHJpcF90ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIHtcbiBcdHN0cnVjdCBpcHY2aGRyICppcHY2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRpbnQgdGNwaG9mZjtcbi1cdHVfaW50OF90IG5leHRoZHI7XG4mIzQzO1x0dTggbmV4dGhkcjtcbiBcdF9fYmUxNiBmcmFnX29mZjtcbiBcbiBcdG5leHRoZHIgPSBpcHY2aC1cdTAwM2VuZXh0aGRyO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfZHNjcC5jIGIvbmV0L25ldGZpbHRlci94dF9kc2NwLmNcbmluZGV4IGZiMDE2OWE4ZjliYmQzLi44NzhmMjcwMTZlOTk4OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfZHNjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuY1xuQEAgLTQ5LDYgJiM0Mzs0OSwxNiBAQCBzdGF0aWMgaW50IGRzY3BfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdG9zX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlaW52ZXJ0IFx1MDAzZSAxKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIHRvc19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbkBAIC04Miw2ICYjNDM7OTIsNyBAQCBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGRzY3BfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbiBcdFx0Lm5hbWVcdFx0PSBcJiMzNDt0b3NcJiMzNDssXG4gXHRcdC5yZXZpc2lvblx0PSAxLFxuIFx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY0LFxuJiM0MztcdFx0LmNoZWNrZW50cnlcdD0gdG9zX210X2NoZWNrLFxuIFx0XHQubWF0Y2hcdFx0PSB0b3NfbXQsXG4gXHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyksXG4gXHRcdC5tZVx0XHQ9IFRISVNfTU9EVUxFLFxuQEAgLTkwLDYgJiM0MzsxMDEsNyBAQCBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGRzY3BfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbiBcdFx0Lm5hbWVcdFx0PSBcJiMzNDt0b3NcJiMzNDssXG4gXHRcdC5yZXZpc2lvblx0PSAxLFxuIFx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY2LFxuJiM0MztcdFx0LmNoZWNrZW50cnlcdD0gdG9zX210X2NoZWNrLFxuIFx0XHQubWF0Y2hcdFx0PSB0b3NfbXQsXG4gXHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyksXG4gXHRcdC5tZVx0XHQ9IFRISVNfTU9EVUxFLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG5pbmRleCBmNzI3NTJmYTQzNzRkYS4uZDM0ODMxY2UzYWRmYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG5AQCAtNDAwLDcgJiM0Mzs0MDAsNyBAQCBzdGF0aWMgaW50IHJlY2VudF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcixcbiBcdHQtXHUwMDNlbnN0YW1wc19tYXhfbWFzayA9IG5zdGFtcF9tYXNrO1xuIFxuIFx0bWVtY3B5KFx1MDAyNnQtXHUwMDNlbWFzaywgXHUwMDI2aW5mby1cdTAwM2VtYXNrLCBzaXplb2YodC1cdTAwM2VtYXNrKSk7XG4tXHRzdHJjcHkodC1cdTAwM2VuYW1lLCBpbmZvLVx1MDAzZW5hbWUpO1xuJiM0MztcdHN0cnNjcHkodC1cdTAwM2VuYW1lLCBpbmZvLVx1MDAzZW5hbWUpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dC1cdTAwM2VscnVfbGlzdCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpcF9saXN0X2hhc2hfc2l6ZTsgaSYjNDM7JiM0MzspXG4gXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlaXBoYXNoW2ldKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jIGIvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuY1xuaW5kZXggYjlkYTgyNjkxNjFkOGYuLmIwOGIwNzdkN2YwYWRhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuY1xuQEAgLTc4LDEwICYjNDM7NzgsMjMgQEAgdGNwbXNzX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdGNwbXNzX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHh0X3RjcG1zc19tYXRjaF9pbmZvICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlbXNzX21pbiBcdTAwM2UgaW5mby1cdTAwM2Vtc3NfbWF4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlaW52ZXJ0IFx1MDAzZSAxKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggdGNwbXNzX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHR7XG4gXHRcdC5uYW1lXHRcdD0gXCYjMzQ7dGNwbXNzXCYjMzQ7LFxuIFx0XHQuZmFtaWx5XHRcdD0gTkZQUk9UT19JUFY0LFxuJiM0MztcdFx0LmNoZWNrZW50cnlcdD0gdGNwbXNzX210X2NoZWNrLFxuIFx0XHQubWF0Y2hcdFx0PSB0Y3Btc3NfbXQsXG4gXHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF90Y3Btc3NfbWF0Y2hfaW5mbyksXG4gXHRcdC5wcm90b1x0XHQ9IElQUFJPVE9fVENQLFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3QuYyBiL25ldC9zY2hlZC9hY3RfY3QuY1xuaW5kZXggYmU1MzVhMjYxZmEwNGEuLjRjYTc5NjRlODNjODU3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9jdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbkBAIC0xNTI3LDggJiM0MzsxNTI3LDggQEAgc3RhdGljIGludCB0Y2ZfY3RfZHVtcF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBUQ0FfQ1RfSEVMUEVSX05BTUUsIGhlbHBlci1cdTAwM2VuYW1lKSB8fFxuLVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX0ZBTUlMWSwgaGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSkgfHxcbi1cdCAgICBubGFfcHV0X3U4KHNrYiwgVENBX0NUX0hFTFBFUl9QUk9UTywgaGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4mIzQzO1x0ICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX0ZBTUlMWSwgaGVscGVyLVx1MDAzZW5mcHJvdG8pIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX1BST1RPLCBoZWxwZXItXHUwMDNlbDRwcm90bykpXG4gXHRcdHJldHVybiAtMTtcbiBcbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9OQVQmIzM0OywKICAgICYjMzQ7QlJJREdFX05GX0VCVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0hPT0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19USU1FT1VUJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfQU1BTkRBJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19GVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0lSQyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfTkVUQklPU19OUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU05NUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfUFBUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0FORSYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19URlRQJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O25mX2N0X2hlbHBlcl9pbml0JiMzNDssCiAgICAmIzM0O19fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX25ldyYjMzQ7LAogICAgJiMzNDtjdHRpbWVvdXRfbmV3X3RpbWVvdXQmIzM0OywKICAgICYjMzQ7dG9zX210X2NoZWNrJiMzNDssCiAgICAmIzM0O3RjcG1zc19tdF9jaGVjayYjMzQ7LAogICAgJiMzNDtuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXImIzM0OywKICAgICYjMzQ7ZG9fcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBOQVQgaG9va3MsIGFuZCBlYnRhYmxlcy4gSXQgY2hhbmdlcyBob3cgY29ubnRyYWNrIGhlbHBlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIGxvb2tlZCB1cCAocmVtb3ZpbmcgcG9ydC1zcGVjaWZpYyBkZWZhdWx0cyksIGFkZHMgYSBuZXcgTkZfSE9PS19PUF9OQVQgdHlwZSBhbmQgZml4ZXMgTkFUIGhvb2sgZHVtcGluZywgYWRkcyBhIE5BVCBmb2xsb3cgbWFzdGVyIGV4cGVjdGZuIGZvciBuZnRfY3QsIGFuZCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGVidGFibGVzIGRvX3JlcGxhY2UuIEl0IGFsc28gYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgeHRfZHNjcCBhbmQgeHRfdGNwbXNzIG1hdGNoZXMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIG5ldGZpbHRlciBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2NlMTI2YjI0ZjNjYmMwZjg0OThjZjdiZmY4OTA1YThkNmYzZDAxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTU6MjA6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAppbmRleCBlZmJiZmE3NzBkNjYxNy4uZTk5YWZjMTQxNGNkMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApAQCAtOTMsNiAmIzQzOzkzLDcgQEAgZW51bSBuZl9ob29rX29wc190eXBlIHsKIAlORl9IT09LX09QX05GX1RBQkxFUywKIAlORl9IT09LX09QX0JQRiwKIAlORl9IT09LX09QX05GVF9GVCwKJiM0MzsJTkZfSE9PS19PUF9OQVQsCiB9OwogCiBzdHJ1Y3QgbmZfaG9va19vcHMgewpAQCAtMTQwLDYgJiM0MzsxNDEsMTIgQEAgc3RydWN0IG5mX2hvb2tfZW50cmllcyB7CiAJICovCiB9OwogCiYjNDM7c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2IHsKJiM0MzsJc3RydWN0IG5mX2hvb2tfZW50cmllcyBfX3JjdSAqZW50cmllczsKJiM0MzsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwomIzQzO307CiYjNDM7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfaG9va19vcHMgKipuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGNvbnN0IHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaAppbmRleCA4MTI4NmM0OTkzMjUyMS4uYjE1ZjM3NjA0Y2RlNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaApAQCAtOSw4ICYjNDM7OSw2IEBACiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oJmd0OwogCi0jZGVmaW5lIFJBU19QT1JUIDE3MTkKLSNkZWZpbmUgUTkzMV9QT1JUIDE3MjAKICNkZWZpbmUgSDMyM19SVFBfQ0hBTk5FTF9NQVggNAkvKiBBdWRpbywgdmlkZW8sIEZBWCBhbmQgb3RoZXIgKi8KIAogLyogVGhpcyBzdHJ1Y3R1cmUgZXhpc3RzIG9ubHkgb25jZSBwZXIgbWFzdGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaAppbmRleCBjM2JkYjQzNzA5Mzg0ZC4uYzBiMzA1Y2U3YzNjNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaApAQCAtNTAsOCAmIzQzOzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHsKIAlfX2JlMTYgcGFjX2NhbGxfaWQ7CQkJLyogTkFUJiMzOTtlZCBQQUMgY2FsbCBpZCAqLwogfTsKIAotI2RlZmluZSBQUFRQX0NPTlRST0xfUE9SVAkxNzIzCi0KICNkZWZpbmUgUFBUUF9QQUNLRVRfQ09OVFJPTAkxCiAjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVQJMgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaAppbmRleCA0NmM3YWNkMWI0YTcwZi4uODUwMTAzNWQ3MzM1NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaApAQCAtMyw4ICYjNDM7Myw2IEBACiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfU0FORV9ICiAvKiBTQU5FIHRyYWNraW5nLiAqLwogCi0jZGVmaW5lIFNBTkVfUE9SVAk2NTY2Ci0KIGVudW0gc2FuZV9zdGF0ZSB7CiAJU0FORV9TVEFURV9OT1JNQUwsCiAJU0FORV9TVEFURV9TVEFSVF9SRVFVRVNURUQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaAppbmRleCA5MGIzMzRiYmNlM2NlNi4uZTNkMTczOWM1NTdkMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaApAQCAtMiw4ICYjNDM7Miw2IEBACiAjaWZuZGVmIF9ORl9DT05OVFJBQ0tfVEZUUF9ICiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVEZUUF9ICiAKLSNkZWZpbmUgVEZUUF9QT1JUIDY5Ci0KICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggNDkyOTdmZWM0NDhhODIuLmVkMmU5YmMxYmI0ZTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTIxMjMsNyAmIzQzOzIxMjMsNyBAQCB2b2lkIGlwX3ZzX3VwZGF0ZV9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQkJICAgIGludCBvdXRpbik7CiBpbnQgaXBfdnNfY29uZmlybV9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGlwX3ZzX25mY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdV9pbnQ4X3QgcHJvdG8sCiYjNDM7CQkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTggcHJvdG8sCiAJCQkgICAgICAgY29uc3QgX19iZTE2IHBvcnQsIGludCBmcm9tX3JzKTsKIHZvaWQgaXBfdnNfY29ubl9kcm9wX2Nvbm50cmFjayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCBjNzYxY2Q4MTU4YjI1My4uYmM1NDI3ZDIzOWY0YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaApAQCAtNDMsMTEgJiM0Mzs0MywxMCBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB7CiAKIAlyZWZjb3VudF90IGN0X3JlZmNudDsKIAotCS8qIFR1cGxlIG9mIHRoaW5ncyB3ZSB3aWxsIGhlbHAgKGNvbXBhcmVkIGFnYWluc3Qgc2VydmVyIHJlc3BvbnNlKSAqLwotCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiYjNDM7CXU4IG5mcHJvdG87CS8qIE5GUFJPVE9fKiwgY2FuIGJlIE5GUFJPVE9fVU5TUEVDICovCiYjNDM7CXU4IGw0cHJvdG87CS8qIElQUFJPVE9fVURQL1RDUCAqLwogCi0JLyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCwgb3IgLTEgdG8KLSAgICAgICAgICAgaW52YWxpZGF0ZS4gKi8KJiM0MzsJLyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCAqLwogCWludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY29ubnRyYWNraW5mbyk7CkBAIC05NCw4ICYjNDM7OTMsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLAogdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKTsKIAogdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLAotCQkgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsCiYjNDM7CQkgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCwKIAkJICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LAogCQkgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCBmMjBjMDM5ZTQ0YzhkNy4uMDQyZDMxMjc4NzEzZGYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMzksNiAmIzQzOzM5LDggQEAKICNkZWZpbmUgQ09VTlRFUl9PRkZTRVQobikgKFNNUF9BTElHTihuICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKQogI2RlZmluZSBDT1VOVEVSX0JBU0UoYywgbiwgY3B1KSAoKHN0cnVjdCBlYnRfY291bnRlciAqKSgoKGNoYXIgKiljKSAmIzQzOyBcCiAJCQkJIENPVU5URVJfT0ZGU0VUKG4pICogY3B1KSkKJiM0MzsjZGVmaW5lIE1BWF9FQlRfRU5UUklFUyAoKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC8gXAomIzQzOwkJCSBOUl9DUFVTIC0gU01QX0NBQ0hFX0JZVEVTKSAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQogCiBzdHJ1Y3QgZWJ0X3Blcm5ldCB7CiAJc3RydWN0IGxpc3RfaGVhZCB0YWJsZXM7CkBAIC0xMTI0LDEwICYjNDM7MTEyNiw5IEBAIHN0YXRpYyBpbnQgZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogb3ZlcmZsb3cgY2hlY2sgKi8KLQlpZiAodG1wLm5lbnRyaWVzICZndDs9ICgoSU5UX01BWCAtIHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pKSAvCi0JCQlOUl9DUFVTIC0gU01QX0NBQ0hFX0JZVEVTKSAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQomIzQzOwlpZiAodG1wLm5lbnRyaWVzICZndDs9IE1BWF9FQlRfRU5UUklFUykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHRtcC5udW1fY291bnRlcnMgJmd0Oz0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQomIzQzOwlpZiAodG1wLm51bV9jb3VudGVycyAmZ3Q7PSBNQVhfRUJUX0VOVFJJRVMpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJdG1wLm5hbWVbc2l6ZW9mKHRtcC5uYW1lKSAtIDFdID0gMDsKQEAgLTIyNjUsMTAgJiM0MzsyMjY2LDkgQEAgc3RhdGljIGludCBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAogCWlmICh0bXAuZW50cmllc19zaXplID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHRtcC5uZW50cmllcyAmZ3Q7PSAoKElOVF9NQVggLSBzaXplb2Yoc3RydWN0IGVidF90YWJsZV9pbmZvKSkgLwotCQkJTlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkKJiM0MzsJaWYgKHRtcC5uZW50cmllcyAmZ3Q7PSBNQVhfRUJUX0VOVFJJRVMpCiAJCXJldHVybiAtRU5PTUVNOwotCWlmICh0bXAubnVtX2NvdW50ZXJzICZndDs9IElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkKJiM0MzsJaWYgKHRtcC5udW1fY291bnRlcnMgJmd0Oz0gTUFYX0VCVF9FTlRSSUVTKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbWNweShyZXBsLCAmYW1wO3RtcCwgb2Zmc2V0b2Yoc3RydWN0IGVidF9yZXBsYWNlLCBob29rX2VudHJ5KSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYwppbmRleCAwZWRlMTM4ZGZkMjllNy4uZTU0MGI4NmJkMTViNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYwpAQCAtMjEzLDcgJiM0MzsyMTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfc25tcF9iYXNpY19pbml0KHZvaWQpCiAJUkNVX0lOSVRfUE9JTlRFUihuZl9uYXRfc25tcF9ob29rLCBoZWxwKTsKIAogCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c25tcF90cmFwX2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsCi0JCQkgICYjMzQ7c25tcF90cmFwJiMzNDssIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCwgU05NUF9UUkFQX1BPUlQsCiYjNDM7CQkJICAmIzM0O3NubXBfdHJhcCYjMzQ7LAogCQkJICAmYW1wO3NubXBfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCiAJZXJyID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO3NubXBfdHJhcF9oZWxwZXIsICZhbXA7c25tcF90cmFwX2hlbHBlcl9wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMKaW5kZXggODE5NzRmNjllNWJiNGUuLjM0NzE4NWZkMGM4YzZmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMKQEAgLTIwOCw3ICYjNDM7MjA4LDcgQEAgc3RhdGljIHZvaWQgaXBfdnNfbmZjdF9leHBlY3RfY2FsbGJhY2soc3RydWN0IG5mX2Nvbm4gKmN0LAogICogVXNlIHBvcnQgMCB0byBleHBlY3QgY29ubmVjdGlvbiBmcm9tIGFueSBwb3J0LgogICovCiB2b2lkIGlwX3ZzX25mY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdV9pbnQ4X3QgcHJvdG8sCiYjNDM7CQkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTggcHJvdG8sCiAJCQkgICAgICAgY29uc3QgX19iZTE2IHBvcnQsIGludCBmcm9tX3JzKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IGRkYWZiZGZjOTZkYzM1Li4wNmQ2ZWMxMmM4NmRmYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKQEAgLTg5LDcgJiM0Mzs4OSw3IEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTsKIAl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgc3RhcnQsIHN0b3AsIG9mZiwgaTsKIAljaGFyIHBidWZbc2l6ZW9mKCYjMzQ7NjU1MzUmIzM0OyldLCAqdG1wOwotCXVfaW50MTZfdCBsZW47CiYjNDM7CXUxNiBsZW47CiAJX19iZTE2IHBvcnQ7CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKIAluZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7CkBAIC0xOTksMTAgJiM0MzsxOTksMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpCiAJfQogCiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDthbWFuZGFfaGVscGVyWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCwKLQkJCSAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKIAkJCSAgJmFtcDthbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2FtYW5kYV9oZWxwZXJbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCwKLQkJCSAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKIAkJCSAgJmFtcDthbWFuZGFfZXhwX3BvbGljeSwgMCwgYW1hbmRhX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAogCXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKGFtYW5kYV9oZWxwZXIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jCmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKQEAgLTY2LDggJiM0Mzs2Niw2IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlleHAtJmd0O3R1cGxlICAgICAgICAgICAgICAgID0gY3QtJmd0O3R1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlOwogCiAJaGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtJmd0O2hlbHBlcik7Ci0JaWYgKGhlbHBlcikKLQkJZXhwLSZndDt0dXBsZS5zcmMudS51ZHAucG9ydCA9IGhlbHBlci0mZ3Q7dHVwbGUuc3JjLnUudWRwLnBvcnQ7CiAKIAlleHAtJmd0O21hc2suc3JjLnUzLmlwICAgICAgID0gbWFzazsKIAlleHAtJmd0O21hc2suc3JjLnUudWRwLnBvcnQgID0gaHRvbnMoMHhGRkZGKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKaW5kZXggMDg0N2Y4NDU2MTNkNmEuLmYzOTQ0NTk4YzE3MjZmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwpAQCAtMzUsMTEgJiM0MzszNSw2IEBAIE1PRFVMRV9BTElBUygmIzM0O2lwX2Nvbm50cmFja19mdHAmIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhuZl9mdHBfbG9jayk7CiAKLSNkZWZpbmUgTUFYX1BPUlRTIDgKLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotCiBzdGF0aWMgYm9vbCBsb29zZTsKIG1vZHVsZV9wYXJhbShsb29zZSwgYm9vbCwgMDYwMCk7CiAKQEAgLTU2MCw4ICYjNDM7NTU1LDggQEAgc3RhdGljIGludCBuZl9jdF9mdHBfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgZnRwIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7CiAJLm1heF9leHBlY3RlZAk9IDEsCkBAIC01NzAsMzIgJiM0Mzs1NjUsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBmdHBfZXhwX3BvbGljeSA9IHsKIAogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19mdHBfZmluaSh2b2lkKQogewotCW5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoZnRwX3B0ciwgcG9ydHNfYyAqIDIpOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoZnRwX3B0cik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19mdHBfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyKSk7CiAKLQlpZiAocG9ydHNfYyA9PSAwKQotCQlwb3J0c1twb3J0c19jJiM0MzsmIzQzO10gPSBGVFBfUE9SVDsKLQogCS8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9ucwogCQkgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCwKLQkJCQkgIEhFTFBFUl9OQU1FLCBGVFBfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLAotCQkJCSAgJmFtcDtmdHBfZXhwX3BvbGljeSwgMCwgaGVscCwKLQkJCQkgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2Z0cFsyICogaSAmIzQzOyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sCi0JCQkJICAmYW1wO2Z0cF9leHBfcG9saWN5LCAwLCBoZWxwLAotCQkJCSAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7Ci0JfQomIzQzOwluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO2Z0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLAomIzQzOwkJCSAgSEVMUEVSX05BTUUsCiYjNDM7CQkJICAmYW1wO2Z0cF9leHBfcG9saWN5LCAwLCBoZWxwLAomIzQzOwkJCSAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihmdHAsIHBvcnRzX2MgKiAyLCBmdHBfcHRyKTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO2Z0cCwgJmFtcDtmdHBfcHRyKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xuJiMzNDspOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCAyNDkzMWUzNzk5ODViYi4uNGNiMTY2NWJiYTAyMTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC02NzEsNyAmIzQzOzY3MSw3IEBAIHN0YXRpYyBpbnQgZXhwZWN0X2gyNDUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAogc3RhdGljIGludCBjYWxsZm9yd2FyZF9kb19maWx0ZXIoc3RydWN0IG5ldCAqbmV0LAogCQkJCSBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNyYywKIAkJCQkgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkc3QsCi0JCQkJIHVfaW50OF90IGZhbWlseSkKJiM0MzsJCQkJIHU4IGZhbWlseSkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTcxMywxOSAmIzQzOzE3MTMsMTkgQEAgc3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKQogCWludCByZXQ7CiAKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfcmFzWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCwKLQkJCSAgJiMzNDtSQVMmIzM0OywgUkFTX1BPUlQsIFJBU19QT1JULCBSQVNfUE9SVCwKJiM0MzsJCQkgICYjMzQ7UkFTJiMzNDssCiAJCQkgICZhbXA7cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7CiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtuZl9jb25udHJhY2tfaGVscGVyX3Jhc1sxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLAotCQkJICAmIzM0O1JBUyYjMzQ7LCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULAomIzQzOwkJCSAgJiMzNDtSQVMmIzM0OywKIAkJCSAgJmFtcDtyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCwKLQkJCSAgJiMzNDtILjI0NSYjMzQ7LCAwLCAwLCAwLAomIzQzOwkJCSAgJiMzNDtILjI0NSYjMzQ7LAogCQkJICAmYW1wO2gyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7CiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLAotCQkJICAmIzM0O1EuOTMxJiMzNDssIFE5MzFfUE9SVCwgUTkzMV9QT1JULCBROTMxX1BPUlQsCiYjNDM7CQkJICAmIzM0O1EuOTMxJiMzNDssCiAJCQkgICZhbXA7cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO25mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsxXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLAotCQkJICAmIzM0O1EuOTMxJiMzNDssIFE5MzFfUE9SVCwgUTkzMV9QT1JULCBROTMxX1BPUlQsCiYjNDM7CQkJICAmIzM0O1EuOTMxJiMzNDssCiAJCQkgICZhbXA7cTkzMV9leHBfcG9saWN5LCAwLCBxOTMxX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAogCXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmFtcDtuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCmluZGV4IDUwMDUwOWIxNzY2M2VkLi41MDZjNTgwMzQ3NjE1NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTQwLDEyICYjNDM7NDAsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfY291bnQgX19yZWFkX21vc3RseTsKIHN0YXRpYyBERUZJTkVfTVVURVgobmZfY3RfbmF0X2hlbHBlcnNfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbmZfY3RfbmF0X2hlbHBlcnMgX19yZWFkX21vc3RseTsKIAotLyogU3R1cGlkIGhhc2gsIGJ1dCBjb2xsaXNpb24gZnJlZSBmb3IgdGhlIGRlZmF1bHQgcmVnaXN0cmF0aW9ucyBvZiB0aGUKLSAqIGhlbHBlcnMgY3VycmVudGx5IGluIHRoZSBrZXJuZWwuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3QgY2hhciAqbmFtZSwgdTggcHJvdG9udW0pCiB7Ci0JcmV0dXJuICgoKHR1cGxlLSZndDtzcmMubDNudW0gJmx0OyZsdDsgOCkgfCB0dXBsZS0mZ3Q7ZHN0LnByb3RvbnVtKSBeCi0JCShfX2ZvcmNlIF9fdTE2KXR1cGxlLSZndDtzcmMudS5hbGwpICUgbmZfY3RfaGVscGVyX2hzaXplOwomIzQzOwlzdGF0aWMgdTMyIHNlZWQ7CiYjNDM7CXUzMiBpbml0dmFsOwomIzQzOwomIzQzOwlnZXRfcmFuZG9tX29uY2UoJmFtcDtzZWVkLCBzaXplb2Yoc2VlZCkpOwomIzQzOwomIzQzOwlpbml0dmFsID0gc2VlZCBeIHByb3RvbnVtOwomIzQzOwomIzQzOwlyZXR1cm4gamhhc2gobmFtZSwgc3RybGVuKG5hbWUpLCBpbml0dmFsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTsKIH0KIAogc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKgpAQCAtNTQsMTggJiM0Mzs1OCwxOCBAQCBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKQogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IG5mX2N0X2hlbHBlcl9oc2l6ZTsgaSYjNDM7JiM0MzspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsICZhbXA7bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7Ci0JCQlpZiAoc3RyY21wKGgtJmd0O25hbWUsIG5hbWUpKQotCQkJCWNvbnRpbnVlOwomIzQzOwlpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAKLQkJCWlmIChoLSZndDt0dXBsZS5zcmMubDNudW0gIT0gTkZQUk9UT19VTlNQRUMgJmFtcDsmYW1wOwotCQkJICAgIGgtJmd0O3R1cGxlLnNyYy5sM251bSAhPSBsM251bSkKLQkJCQljb250aW51ZTsKJiM0MzsJaSA9IGhlbHBlcl9oYXNoKG5hbWUsIHByb3RvbnVtKTsKIAotCQkJaWYgKGgtJmd0O3R1cGxlLmRzdC5wcm90b251bSA9PSBwcm90b251bSkKLQkJCQlyZXR1cm4gaDsKLQkJfQomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgJmFtcDtuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHsKJiM0MzsJCWlmIChzdHJjbXAoaC0mZ3Q7bmFtZSwgbmFtZSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoaC0mZ3Q7bmZwcm90byAhPSBORlBST1RPX1VOU1BFQyAmYW1wOyZhbXA7IGgtJmd0O25mcHJvdG8gIT0gbDNudW0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoaC0mZ3Q7bDRwcm90byA9PSBwcm90b251bSkKJiM0MzsJCQlyZXR1cm4gaDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0zNjMsOSAmIzQzOzM2Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpOwogCiBpbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKIHsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgbWFzayA9IHsgLnNyYy51LmFsbCA9IGh0b25zKDB4RkZGRikgfTsKLQl1bnNpZ25lZCBpbnQgaCA9IGhlbHBlcl9oYXNoKCZhbXA7bWUtJmd0O3R1cGxlKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3VyOwomIzQzOwl1bnNpZ25lZCBpbnQgaDsKIAlpbnQgcmV0ID0gMCwgaTsKIAogCUJVR19PTihtZS0mZ3Q7ZXhwZWN0X2NsYXNzX21heCAmZ3Q7PSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpOwpAQCAtMzgyLDI5ICYjNDM7Mzg1LDE4IEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWggPSBoZWxwZXJfaGFzaChtZS0mZ3Q7bmFtZSwgbWUtJmd0O2w0cHJvdG8pOwogCW11dGV4X2xvY2soJmFtcDtuZl9jdF9oZWxwZXJfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBuZl9jdF9oZWxwZXJfaHNpemU7IGkmIzQzOyYjNDM7KSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmFtcDtuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHsKLQkJCWlmICghc3RyY21wKGN1ci0mZ3Q7bmFtZSwgbWUtJmd0O25hbWUpICZhbXA7JmFtcDsKLQkJCSAgICAoY3VyLSZndDt0dXBsZS5zcmMubDNudW0gPT0gTkZQUk9UT19VTlNQRUMgfHwKLQkJCSAgICAgY3VyLSZndDt0dXBsZS5zcmMubDNudW0gPT0gbWUtJmd0O3R1cGxlLnNyYy5sM251bSkgJmFtcDsmYW1wOwotCQkJICAgIGN1ci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtID09IG1lLSZndDt0dXBsZS5kc3QucHJvdG9udW0pIHsKLQkJCQlyZXQgPSAtRUJVU1k7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmFtcDtuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHsKJiM0MzsJCWlmICghc3RyY21wKGN1ci0mZ3Q7bmFtZSwgbWUtJmd0O25hbWUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoY3VyLSZndDtuZnByb3RvID09IE5GUFJPVE9fVU5TUEVDIHx8CiYjNDM7CQkgICAgIGN1ci0mZ3Q7bmZwcm90byA9PSBtZS0mZ3Q7bmZwcm90bykgJmFtcDsmYW1wOwomIzQzOwkJICAgIGN1ci0mZ3Q7bDRwcm90byA9PSBtZS0mZ3Q7bDRwcm90bykgewomIzQzOwkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCS8qIGF2b2lkIHVucHJlZGljdGFibGUgYmVoYXZpb3VyIGZvciBhdXRvX2Fzc2lnbl9oZWxwZXIgKi8KLQlpZiAoIShtZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFKSkgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsICZhbXA7bmZfY3RfaGVscGVyX2hhc2hbaF0sIGhub2RlKSB7Ci0JCQlpZiAobmZfY3RfdHVwbGVfc3JjX21hc2tfY21wKCZhbXA7Y3VyLSZndDt0dXBsZSwgJmFtcDttZS0mZ3Q7dHVwbGUsCi0JCQkJCQkgICAgICZhbXA7bWFzaykpIHsKLQkJCQlyZXQgPSAtRUJVU1k7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQl9CiAJcmVmY291bnRfc2V0KCZhbXA7bWUtJmd0O2N0X3JlZmNudCwgMSk7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7bWUtJmd0O2hub2RlLCAmYW1wO25mX2N0X2hlbHBlcl9oYXNoW2hdKTsKIAluZl9jdF9oZWxwZXJfY291bnQmIzQzOyYjNDM7OwpAQCAtNDc5LDggJiM0Mzs0NzEsNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpOwogCiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsCi0JCSAgICAgICB1MTYgbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICAgIHUxNiBkZWZhdWx0X3BvcnQsIHUxNiBzcGVjX3BvcnQsIHUzMiBpZCwKJiM0MzsJCSAgICAgICB1OCBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBfcG9sLAogCQkgICAgICAgdTMyIGV4cGVjdF9jbGFzc19tYXgsCiAJCSAgICAgICBpbnQgKCpoZWxwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTQ5Miw5ICYjNDM7NDgzLDggQEAgdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLAogewogCW1lbXNldChoZWxwZXIsIDAsIHNpemVvZigqaGVscGVyKSk7CiAKLQloZWxwZXItJmd0O3R1cGxlLnNyYy5sM251bSA9IGwzbnVtOwotCWhlbHBlci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtID0gcHJvdG9udW07Ci0JaGVscGVyLSZndDt0dXBsZS5zcmMudS5hbGwgPSBodG9ucyhzcGVjX3BvcnQpOwomIzQzOwloZWxwZXItJmd0O25mcHJvdG8gPSBsM251bTsKJiM0MzsJaGVscGVyLSZndDtsNHByb3RvID0gcHJvdG9udW07CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoaGVscGVyLSZndDtoZWxwLCBoZWxwKTsKIAloZWxwZXItJmd0O2Zyb21fbmxhdHRyID0gZnJvbV9ubGF0dHI7CkBAIC01MDIsMTAgJiM0Mzs0OTIsNyBAQCB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsCiAJc25wcmludGYoaGVscGVyLSZndDtuYXRfbW9kX25hbWUsIHNpemVvZihoZWxwZXItJmd0O25hdF9tb2RfbmFtZSksCiAJCSBORl9OQVRfSEVMUEVSX1BSRUZJWCAmIzM0OyVzJiMzNDssIG5hbWUpOwogCi0JaWYgKHNwZWNfcG9ydCA9PSBkZWZhdWx0X3BvcnQpCi0JCXNucHJpbnRmKGhlbHBlci0mZ3Q7bmFtZSwgc2l6ZW9mKGhlbHBlci0mZ3Q7bmFtZSksICYjMzQ7JXMmIzM0OywgbmFtZSk7Ci0JZWxzZQotCQlzbnByaW50ZihoZWxwZXItJmd0O25hbWUsIHNpemVvZihoZWxwZXItJmd0O25hbWUpLCAmIzM0OyVzLSV1JiMzNDssIG5hbWUsIGlkKTsKJiM0MzsJc25wcmludGYoaGVscGVyLSZndDtuYW1lLCBzaXplb2YoaGVscGVyLSZndDtuYW1lKSwgJiMzNDslcyYjMzQ7LCBuYW1lKTsKIAogCWlmIChXQVJOX09OX09OQ0UoZXhwZWN0X2NsYXNzX21heCAmZ3Q7PSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCmluZGV4IDE5M2FiMzRkYjc5NWY5Li40ZTZiYWZlNDE0Mzc1MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMKQEAgLTIxLDkgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaCZndDsKIAotI2RlZmluZSBNQVhfUE9SVFMgOAotc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107Ci1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7CiBzdGF0aWMgdW5zaWduZWQgaW50IG1heF9kY2NfY2hhbm5lbHMgPSA4Owogc3RhdGljIHVuc2lnbmVkIGludCBkY2NfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAwOwogLyogVGhpcyBpcyBzbG93LCBidXQgaXQmIzM5O3Mgc2ltcGxlLiAtLVJSICovCkBAIC00Miw4ICYjNDM7MzksNiBAQCBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIE1PRFVMRV9BTElBUygmIzM0O2lwX2Nvbm50cmFja19pcmMmIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogCi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgJmFtcDtwb3J0c19jLCAwNDAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsICYjMzQ7cG9ydCBudW1iZXJzIG9mIElSQyBzZXJ2ZXJzJiMzNDspOwogbW9kdWxlX3BhcmFtKG1heF9kY2NfY2hhbm5lbHMsIHVpbnQsIDA0MDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfZGNjX2NoYW5uZWxzLCAmIzM0O21heCBudW1iZXIgb2YgZXhwZWN0ZWQgRENDIGNoYW5uZWxzIHBlciAmIzM0OwogCQkJCSAgICYjMzQ7SVJDIHNlc3Npb24mIzM0Oyk7CkBAIC0yNTQsMTMgJiM0MzsyNDksMTMgQEAgc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmNbTUFYX1BPUlRTXSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyW01BWF9QT1JUU10gX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaXJjIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGlyY19leHBfcG9saWN5OwogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgcmV0OwomIzQzOwlpbnQgcmV0OwogCiAJbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTsKIApAQCAtMjgyLDE3ICYjNDM7Mjc3LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKQogCWlmICghaXJjX2J1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGlyYyBwb3J0ICovCi0JaWYgKHBvcnRzX2MgPT0gMCkKLQkJcG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gSVJDX1BPUlQ7CiYjNDM7CW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7aXJjLCBBRl9JTkVULCBJUFBST1RPX1RDUCwgSEVMUEVSX05BTUUsCiYjNDM7CQkJICAmYW1wO2lyY19leHBfcG9saWN5LAomIzQzOwkJCSAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7aXJjW2ldLCBBRl9JTkVULCBJUFBST1RPX1RDUCwgSEVMUEVSX05BTUUsCi0JCQkJICBJUkNfUE9SVCwgcG9ydHNbaV0sIGksICZhbXA7aXJjX2V4cF9wb2xpY3ksCi0JCQkJICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7Ci0JfQotCi0JcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoJmFtcDtpcmNbMF0sIHBvcnRzX2MsIGlyY19wdHIpOwomIzQzOwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbXA7aXJjLCAmYW1wO2lyY19wdHIpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcbiYjMzQ7KTsKIAkJa2ZyZWUoaXJjX2J1ZmZlcik7CkBAIC0zMDQsNyAmIzQzOzI5Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2lyY19maW5pKHZvaWQpCiB7Ci0JbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihpcmNfcHRyLCBwb3J0c19jKTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGlyY19wdHIpOwogCWtmcmVlKGlyY19idWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKaW5kZXggODlkMWNmN2Q2NTEyZTcuLmNhYTJiMTAxZmE5ZTVlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCkBAIC0yMSw3ICYjNDM7MjEsNiBAQAogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oJmd0OwogCiAjZGVmaW5lIEhFTFBFUl9OQU1FCSYjMzQ7bmV0Ymlvcy1ucyYjMzQ7Ci0jZGVmaW5lIE5NQkRfUE9SVAkxMzcKIAogTU9EVUxFX0FVVEhPUigmIzM0O1BhdHJpY2sgTWNIYXJkeSAmbHQ7a2FiZXJAdHJhc2gubmV0Jmd0OyYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzQ7KTsKQEAgLTU0LDcgJiM0Mzs1Myw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZCkKIAlleHBfcG9saWN5LnRpbWVvdXQgPSB0aW1lb3V0OwogCiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSwKLQkJCSAgTk1CRF9QT1JULCBOTUJEX1BPUlQsIE5NQkRfUE9SVCwKIAkJCSAgJmFtcDtleHBfcG9saWN5LCAwLCBuZXRiaW9zX25zX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAogCXJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbXA7aGVscGVyLCAmYW1wO2hlbHBlcl9wdHIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYwppbmRleCA0OWQxNTExZTk5MjE4NS4uYjQwODVhZjNhZDFjZTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jCkBAIC0zMSw4ICYjNDM7MzEsOCBAQCBpbnQgbmZfY3RfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKIAlpZiAoIWhlbHBlcikKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCWlmIChoZWxwZXItJmd0O3R1cGxlLnNyYy5sM251bSAhPSBORlBST1RPX1VOU1BFQyAmYW1wOyZhbXA7Ci0JICAgIGhlbHBlci0mZ3Q7dHVwbGUuc3JjLmwzbnVtICE9IHByb3RvKQomIzQzOwlpZiAoaGVscGVyLSZndDtuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIGhlbHBlci0mZ3Q7bmZwcm90byAhPSBwcm90bykKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCXN3aXRjaCAocHJvdG8pIHsKQEAgLTYwLDcgJiM0Mzs2MCw3IEBAIGludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQlyZXR1cm4gTkZfRFJPUDsKIAl9CiAKLQlpZiAoaGVscGVyLSZndDt0dXBsZS5kc3QucHJvdG9udW0gIT0gcHJvdG8pCiYjNDM7CWlmIChoZWxwZXItJmd0O2w0cHJvdG8gIT0gcHJvdG8pCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAloZWxwZXJfY2IgPSByY3VfZGVyZWZlcmVuY2UoaGVscGVyLSZndDtoZWxwKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCA4MGZjMTRjODdkZGM0Yi4uY2JmMzJhM2NiMWY2MTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKQEAgLTU0MCw3ICYjNDM7NTQwLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKQogCU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9wcHRwX21hc3RlcikpOwogCiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtwcHRwLCBBRl9JTkVULCBJUFBST1RPX1RDUCwKLQkJCSAgJiMzNDtwcHRwJiMzNDssIFBQVFBfQ09OVFJPTF9QT1JULCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsCiYjNDM7CQkJICAmIzM0O3BwdHAmIzM0OywKIAkJCSAgJmFtcDtwcHRwX2V4cF9wb2xpY3ksIDAsIGNvbm50cmFja19wcHRwX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAogCXBwdHAuZGVzdHJveSA9IGdyZV9wcHRwX2Rlc3Ryb3lfc2libGluZ3M7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKaW5kZXggMzkwODVhY2Y3YTcxODUuLmEwNjU4ZjY5ZDc4ZmJiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jCkBAIC0zNCwxMSAmIzQzOzM0LDYgQEAgTU9EVUxFX0FVVEhPUigmIzM0O01pY2hhbCBTY2htaWR0ICZsdDttc2NobWlkdEByZWRoYXQuY29tJmd0OyYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1NBTkUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXImIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogCi0jZGVmaW5lIE1BWF9QT1JUUyA4Ci1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107Ci1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7Ci1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgJmFtcDtwb3J0c19jLCAwNDAwKTsKLQogc3RydWN0IHNhbmVfcmVxdWVzdCB7CiAJX19iZTMyIFJQQ19jb2RlOwogI2RlZmluZSBTQU5FX05FVF9TVEFSVCAgICAgIDcgICAvKiBSUEMgY29kZSAqLwpAQCAtMTY5LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZVtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5OwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzYW5lIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0ciBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNhbmVfZXhwX3BvbGljeSA9IHsKIAkubWF4X2V4cGVjdGVkCT0gMSwKQEAgLTE3OSwzMiAmIzQzOzE3NCwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNhbmVfZXhwX3BvbGljeSA9IHsKIAogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19zYW5lX2Zpbmkodm9pZCkKIHsKLQluZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHNhbmVfcHRyLCBwb3J0c19jICogMik7CiYjNDM7CW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzYW5lX3B0cik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgcmV0ID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2FuZV9tYXN0ZXIpKTsKIAotCWlmIChwb3J0c19jID09IDApCi0JCXBvcnRzW3BvcnRzX2MmIzQzOyYjNDM7XSA9IFNBTkVfUE9SVDsKLQotCS8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IGNvbm5lY3Rpb25zCi0JCSBhcmUgdHJhY2tlZCBvciBub3QgLSBZSyAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBwb3J0c19jOyBpJiM0MzsmIzQzOykgewotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NhbmVbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCwKLQkJCQkgIEhFTFBFUl9OQU1FLCBTQU5FX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSwKLQkJCQkgICZhbXA7c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLAotCQkJCSAgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NhbmVbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCwKLQkJCQkgIEhFTFBFUl9OQU1FLCBTQU5FX1BPUlQsIHBvcnRzW2ldLCBwb3J0c1tpXSwKLQkJCQkgICZhbXA7c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLAotCQkJCSAgVEhJU19NT0RVTEUpOwotCX0KJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtzYW5lLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKJiM0MzsJCQkgICZhbXA7c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLAomIzQzOwkJCSAgVEhJU19NT0RVTEUpOwogCi0JcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2FuZSwgcG9ydHNfYyAqIDIsIHNhbmVfcHRyKTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO3NhbmUsICZhbXA7c2FuZV9wdHIpOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXG4mIzM0Oyk7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCmluZGV4IDVlYzNhNGE0YmJkNzA3Li5kMGI4NWI4YWQxZTZkOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTM1LDEyICYjNDM7MzUsNiBAQCBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtTSVAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXImIzM0Oyk7CiBNT0RVTEVfQUxJQVMoJiMzNDtpcF9jb25udHJhY2tfc2lwJiMzNDspOwogTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTsKIAotI2RlZmluZSBNQVhfUE9SVFMJOAotc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107Ci1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7Ci1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgJmFtcDtwb3J0c19jLCAwNDAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsICYjMzQ7cG9ydCBudW1iZXJzIG9mIFNJUCBzZXJ2ZXJzJiMzNDspOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IHNpcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSBTSVBfVElNRU9VVDsKIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNpcF90aW1lb3V0LCAmIzM0O3RpbWVvdXQgZm9yIHRoZSBtYXN0ZXIgU0lQIHNlc3Npb24mIzM0Oyk7CkBAIC0xNzY0LDggJiM0MzsxNzU4LDggQEAgc3RhdGljIGludCBzaXBfaGVscF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCiAJcmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBwcm90b2ZmLCBkYXRhb2ZmLCAmYW1wO2RwdHIsICZhbXA7ZGF0YWxlbik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbTUFYX1BPUlRTICogNF0gX19yZWFkX21vc3RseTsKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0cltNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5OwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbMl0gX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNpcF9wdHJbMl0gX19yZWFkX21vc3RseTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzaXBfZXhwX3BvbGljeVtTSVBfRVhQRUNUX01BWCAmIzQzOyAxXSA9IHsKIAlbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHsKQEAgLTE3OTIsMzggJiM0MzsxNzg2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2lwX2V4cF9wb2xpY3lbU0lQX0VYUEVDVF9NQVggJiM0MzsgMQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpCiB7Ci0JbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzaXBfcHRyLCBwb3J0c19jICogNCk7CiYjNDM7CW5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2lwX3B0ciwgMik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zaXBfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQ7CiYjNDM7CWludCByZXQ7CiAKIAlORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbmZfY3Rfc2lwX21hc3RlcikpOwogCi0JaWYgKHBvcnRzX2MgPT0gMCkKLQkJcG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gU0lQX1BPUlQ7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgcG9ydHNfYzsgaSYjNDM7JiM0MzspIHsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtzaXBbNCAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCwKLQkJCQkgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksCi0JCQkJICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCwKLQkJCQkgIE5VTEwsIFRISVNfTU9EVUxFKTsKLQkJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtzaXBbNCAqIGkgJiM0MzsgMV0sIEFGX0lORVQsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSwKLQkJCQkgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLAotCQkJCSAgTlVMTCwgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFs0ICogaSAmIzQzOyAyXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSwKLQkJCQkgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLAotCQkJCSAgTlVMTCwgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3NpcFs0ICogaSAmIzQzOyAzXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLAotCQkJCSAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSwKLQkJCQkgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLAotCQkJCSAgTlVMTCwgVEhJU19NT0RVTEUpOwotCX0KJiM0MzsJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtzaXBbMF0sIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCwKJiM0MzsJCQkgIEhFTFBFUl9OQU1FLAomIzQzOwkJCSAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsCiYjNDM7CQkJICBOVUxMLCBUSElTX01PRFVMRSk7CiYjNDM7CW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsCiYjNDM7CQkJICBIRUxQRVJfTkFNRSwKJiM0MzsJCQkgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLAomIzQzOwkJCSAgTlVMTCwgVEhJU19NT0RVTEUpOwogCi0JcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCBwb3J0c19jICogNCwgc2lwX3B0cik7CiYjNDM7CXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNpcCwgMiwgc2lwX3B0cik7CiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYwppbmRleCBiNmZjZTU3MDNmY2U3Ny4uMTA5OTg2ZDVkNTVlNjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMKQEAgLTE0LDggJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmgmZ3Q7CiAKLSNkZWZpbmUgU05NUF9QT1JUCTE2MQotCiBNT0RVTEVfQVVUSE9SKCYjMzQ7SmlyaSBPbHNhICZsdDtqb2xzYUByZWRoYXQuY29tJmd0OyYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1NOTVAgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXImIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKQEAgLTU1LDcgJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zbm1wX2luaXQodm9pZCkKIAlleHBfcG9saWN5LnRpbWVvdXQgPSB0aW1lb3V0OwogCiAJbmZfY3RfaGVscGVyX2luaXQoJmFtcDtoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLAotCQkJICAmIzM0O3NubXAmIzM0OywgU05NUF9QT1JULCBTTk1QX1BPUlQsIFNOTVBfUE9SVCwKJiM0MzsJCQkgICYjMzQ7c25tcCYjMzQ7LAogCQkJICAmYW1wO2V4cF9wb2xpY3ksIDAsIHNubXBfY29ubnRyYWNrX2hlbHAsIE5VTEwsCiAJCQkgIFRISVNfTU9EVUxFKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jCmluZGV4IDQzOTNjNDM1YWEzNTQ5Li5hNjk1NTllZGY5YjM2MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYwpAQCAtMjYsMTIgJiM0MzsyNiw2IEBAIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogTU9EVUxFX0FMSUFTKCYjMzQ7aXBfY29ubnRyYWNrX3RmdHAmIzM0Oyk7CiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpOwogCi0jZGVmaW5lIE1BWF9QT1JUUyA4Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYzsKLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCAmYW1wO3BvcnRzX2MsIDA0MDApOwotTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgJiMzNDtQb3J0IG51bWJlcnMgb2YgVEZUUCBzZXJ2ZXJzJiMzNDspOwotCiBuZl9uYXRfdGZ0cF9ob29rX2ZuIF9fcmN1ICpuZl9uYXRfdGZ0cF9ob29rIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfdGZ0cF9ob29rKTsKIApAQCAtOTUsOCAmIzQzOzg5LDggQEAgc3RhdGljIGludCB0ZnRwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgdGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0ZnRwX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5OwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwIF9fcmVhZF9tb3N0bHk7CiYjNDM7c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICp0ZnRwX3B0ciBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHsKIAkubWF4X2V4cGVjdGVkCT0gMSwKQEAgLTEwNSwzMCAmIzQzOzk5LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgdGZ0cF9leHBfcG9saWN5ID0gewogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3RmdHBfZmluaSh2b2lkKQogewotCW5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIodGZ0cF9wdHIsIHBvcnRzX2MgKiAyKTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHRmdHBfcHRyKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3RmdHBfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQ7CiYjNDM7CWludCByZXQ7CiAKIAlORl9DVF9IRUxQRVJfQlVJTERfQlVHX09OKDApOwogCi0JaWYgKHBvcnRzX2MgPT0gMCkKLQkJcG9ydHNbcG9ydHNfYyYjNDM7JiM0MztdID0gVEZUUF9QT1JUOwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IHBvcnRzX2M7IGkmIzQzOyYjNDM7KSB7Ci0JCW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7dGZ0cFsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLAotCQkJCSAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksCi0JCQkJICAmYW1wO3RmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLAotCQkJCSAgVEhJU19NT0RVTEUpOwotCQluZl9jdF9oZWxwZXJfaW5pdCgmYW1wO3RmdHBbMiAqIGkgJiM0MzsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCwKLQkJCQkgIEhFTFBFUl9OQU1FLCBURlRQX1BPUlQsIHBvcnRzW2ldLCBpLAotCQkJCSAgJmFtcDt0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCwKLQkJCQkgIFRISVNfTU9EVUxFKTsKLQl9CiYjNDM7CW5mX2N0X2hlbHBlcl9pbml0KCZhbXA7dGZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLAomIzQzOwkJCSAgSEVMUEVSX05BTUUsCiYjNDM7CQkJICAmYW1wO3RmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLAomIzQzOwkJCSAgVEhJU19NT0RVTEUpOwogCi0JcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIodGZ0cCwgcG9ydHNfYyAqIDIsIHRmdHBfcHRyKTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO3RmdHAsICZhbXA7dGZ0cF9wdHIpOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXG4mIzM0Oyk7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggNjNmZjZiNGQ1ZDIxNGEuLjhhYzMyNmUxZWI1YmE5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC0zOSwxMiAmIzQzOzM5LDYgQEAgc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpuZl9uYXRfYnlzb3VyY2UgX19yZWFkX21vc3RseTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc2lwaGFzaF9hbGlnbmVkX2tleV90IG5mX25hdF9oYXNoX3JuZDsKIAotc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2IHsKLQlzdHJ1Y3QgbmZfaG9va19lbnRyaWVzIF9fcmN1ICplbnRyaWVzOwotCi0Jc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwotfTsKLQogc3RydWN0IG5mX25hdF9ob29rc19uZXQgewogCXN0cnVjdCBuZl9ob29rX29wcyAqbmF0X2hvb2tfb3BzOwogCXVuc2lnbmVkIGludCB1c2VyczsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jCmluZGV4IDA3ZjUxZmU3NWZiZTQzLi42NGI5YmFjMjI4ZWFlOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jCkBAIC03NzAsNiAmIzQzOzc3MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjRfb3BzW10gPSB7CiAJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QUkVfUk9VVElORywKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QsCiYjNDM7CQkuaG9va19vcHNfdHlwZQk9IE5GX0hPT0tfT1BfTkFULAogCX0sCiAJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqLwogCXsKQEAgLTc3Nyw2ICYjNDM7Nzc4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2NF9vcHNbXSA9IHsKIAkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BPU1RfUk9VVElORywKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMsCiYjNDM7CQkuaG9va19vcHNfdHlwZQk9IE5GX0hPT0tfT1BfTkFULAogCX0sCiAJLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwogCXsKQEAgLTc4NCw2ICYjNDM7Nzg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2NF9vcHNbXSA9IHsKIAkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9EU1QsCiYjNDM7CQkuaG9va19vcHNfdHlwZQk9IE5GX0hPT0tfT1BfTkFULAogCX0sCiAJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqLwogCXsKQEAgLTc5MSw2ICYjNDM7Nzk0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2NF9vcHNbXSA9IHsKIAkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKJiM0MzsJCS5ob29rX29wc190eXBlCT0gTkZfSE9PS19PUF9OQVQsCiAJfSwKIH07CiAKQEAgLTEwMzEsNiAmIzQzOzEwMzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY2X29wc1tdID0gewogCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfUFJFX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX0RTVCwKJiM0MzsJCS5ob29rX29wc190eXBlCT0gTkZfSE9PS19PUF9OQVQsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovCiAJewpAQCAtMTAzOCw2ICYjNDM7MTA0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7CiAJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX1NSQywKJiM0MzsJCS5ob29rX29wc190eXBlCT0gTkZfSE9PS19PUF9OQVQsCiAJfSwKIAkvKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovCiAJewpAQCAtMTA0NSw2ICYjNDM7MTA1MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7CiAJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX0RTVCwKJiM0MzsJCS5ob29rX29wc190eXBlCT0gTkZfSE9PS19PUF9OQVQsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovCiAJewpAQCAtMTA1Miw2ICYjNDM7MTA1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7CiAJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9OQVRfU1JDLAomIzQzOwkJLmhvb2tfb3BzX3R5cGUJPSBORl9IT09LX09QX05BVCwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMKaW5kZXggZjE0NjBiNjgzZDdhZjcuLjU2NjU1Y2I3ZmUyYWQwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMKQEAgLTY3LDcgJiM0Mzs2Nyw3IEBAIG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYJiM0MzsxXSA9IHsKLQlbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSB7IC50eXBlID0gTkxBX1UxNiwgfSwKJiM0MzsJW05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMTYsIE5GUFJPVE9fSVBWNiksCiAJW05GQ1RIX1RVUExFX0w0UFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VOCwgfSwKIH07CiAKQEAgLTI1NCw3ICYjNDM7MjU0LDggQEAgbmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sCiAJaGVscGVyLSZndDtkYXRhX2xlbiA9IHNpemU7CiAKIAloZWxwZXItJmd0O2ZsYWdzIHw9IE5GX0NUX0hFTFBFUl9GX1VTRVJTUEFDRTsKLQltZW1jcHkoJmFtcDtoZWxwZXItJmd0O3R1cGxlLCB0dXBsZSwgc2l6ZW9mKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUpKTsKJiM0MzsJaGVscGVyLSZndDtuZnByb3RvID0gdHVwbGUtJmd0O3NyYy5sM251bTsKJiM0MzsJaGVscGVyLSZndDtsNHByb3RvID0gdHVwbGUtJmd0O2RzdC5wcm90b251bTsKIAogCWhlbHBlci0mZ3Q7bWUgPSBUSElTX01PRFVMRTsKIAloZWxwZXItJmd0O2hlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjsKQEAgLTQ0OSw4ICYjNDM7NDUwLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLAogCQlpZiAoc3RybmNtcChjdXItJmd0O25hbWUsIGhlbHBlcl9uYW1lLCBORl9DVF9IRUxQRVJfTkFNRV9MRU4pKQogCQkJY29udGludWU7CiAKLQkJaWYgKCh0dXBsZS5zcmMubDNudW0gIT0gY3VyLSZndDt0dXBsZS5zcmMubDNudW0gfHwKLQkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDt0dXBsZS5kc3QucHJvdG9udW0pKQomIzQzOwkJaWYgKCh0dXBsZS5zcmMubDNudW0gIT0gY3VyLSZndDtuZnByb3RvIHx8CiYjNDM7CQkgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItJmd0O2w0cHJvdG8pKQogCQkJY29udGludWU7CiAKIAkJaWYgKGluZm8tJmd0O25saC0mZ3Q7bmxtc2dfZmxhZ3MgJmFtcDsgTkxNX0ZfRVhDTCkKQEAgLTQ3OSwxMCAmIzQzOzQ4MCwxMCBAQCBuZm5sX2N0aGVscGVyX2R1bXBfdHVwbGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZDVEhfVFVQTEVfTDNQUk9UT05VTSwKLQkJCSBodG9ucyhoZWxwZXItJmd0O3R1cGxlLnNyYy5sM251bSkpKQomIzQzOwkJCSBodG9ucyhoZWxwZXItJmd0O25mcHJvdG8pKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAobmxhX3B1dF91OChza2IsIE5GQ1RIX1RVUExFX0w0UFJPVE9OVU0sIGhlbHBlci0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtKSkKJiM0MzsJaWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItJmd0O2w0cHJvdG8pKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCW5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpOwpAQCAtNjYxLDggJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJCQljb250aW51ZTsKIAogCQlpZiAodHVwbGVfc2V0ICZhbXA7JmFtcDsKLQkJICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLSZndDt0dXBsZS5zcmMubDNudW0gfHwKLQkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDt0dXBsZS5kc3QucHJvdG9udW0pKQomIzQzOwkJICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLSZndDtuZnByb3RvIHx8CiYjNDM7CQkgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItJmd0O2w0cHJvdG8pKQogCQkJY29udGludWU7CiAKIAkJc2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOwpAQCAtNzIxLDggJiM0Mzs3MjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sCiAJCQljb250aW51ZTsKIAogCQlpZiAodHVwbGVfc2V0ICZhbXA7JmFtcDsKLQkJICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLSZndDt0dXBsZS5zcmMubDNudW0gfHwKLQkJICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLSZndDt0dXBsZS5kc3QucHJvdG9udW0pKQomIzQzOwkJICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLSZndDtuZnByb3RvIHx8CiYjNDM7CQkgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItJmd0O2w0cHJvdG8pKQogCQkJY29udGludWU7CiAKIAkJZm91bmQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYwppbmRleCAxNzBkM2RiODYwYzU2NC4uNjZjMjAxNmY2MDQ5ZDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jCkBAIC0xNjgsNyAmIzQzOzE2OCw3IEBAIHN0YXRpYyBpbnQgY3R0aW1lb3V0X25ld190aW1lb3V0KHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyX2ZyZWVfdGltZW91dF9wb2xpY3k7CiAKLQlzdHJjcHkodGltZW91dC0mZ3Q7bmFtZSwgbmxhX2RhdGEoY2RhW0NUQV9USU1FT1VUX05BTUVdKSk7CiYjNDM7CW5sYV9zdHJzY3B5KHRpbWVvdXQtJmd0O25hbWUsIGNkYVtDVEFfVElNRU9VVF9OQU1FXSwgc2l6ZW9mKHRpbWVvdXQtJmd0O25hbWUpKTsKIAl0aW1lb3V0LSZndDt0aW1lb3V0LSZndDtsM251bSA9IGwzbnVtOwogCXRpbWVvdXQtJmd0O3RpbWVvdXQtJmd0O2w0cHJvdG8gPSBsNHByb3RvOwogCXJlZmNvdW50X3NldCgmYW1wO3RpbWVvdXQtJmd0O3RpbWVvdXQtJmd0O3JlZmNudCwgMSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKaW5kZXggNTYyM2MxOGZjZDEyZjAuLjk1MDA1ZTlhNjA2Njg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCkBAIC0xOTAsNyAmIzQzOzE5MCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX3B1dF9uZnRfZnRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCiAKIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IHByaW9yaXR5LAogCQkJICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSkKIHsKIAl1MTYgZXZlbnQgPSBuZm5sX21zZ190eXBlKE5GTkxfU1VCU1lTX0hPT0ssIE5GTkxfTVNHX0hPT0tfR0VUKTsKQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLAogCWlmIChyZXQpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX1BSSU9SSVRZLCBodG9ubChvcHMtJmd0O3ByaW9yaXR5KSk7CiYjNDM7CXJldCA9IG5sYV9wdXRfYmUzMihubHNrYiwgTkZOTEFfSE9PS19QUklPUklUWSwgaHRvbmwocHJpb3JpdHkpKTsKIAlpZiAocmV0KQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApAQCAtMzM3LDYgJiM0MzszMzcsMzAgQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGUKIAlyZXR1cm4gaG9va19oZWFkOwogfQogCiYjNDM7c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCiYjNDM7CQkJICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdiAqcHJpdiA9IG9wcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKJiM0MzsJc3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wczsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5hdF9vcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLAomIzQzOwkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwgc2VxKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYiwKIAkJCSAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewpAQCAtMzY1LDggJiM0MzszODksMTMgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCiAJb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTsKIAogCWZvciAoOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LAotCQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKJiM0MzsJCWlmIChvcHNbaV0tJmd0O2hvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpCiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LAomIzQzOwkJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwomIzQzOwkJZWxzZQomIzQzOwkJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sCiYjNDM7CQkJCQkJIG9wc1tpXS0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKJiM0MzsJCQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCmluZGV4IDAzYTg4Yzc3ZTBmMDI4Li4zNThiOTI4N2UxMmU4NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCkBAIC0xMjk3LDYgJiM0MzsxMjk3LDE3IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiAwOwogfQogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVCkKJiM0MztzdGF0aWMgdm9pZCBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqdGhpcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gKmV4cGZuOwomIzQzOwomIzQzOwlleHBmbiA9IG5mX2N0X2hlbHBlcl9leHBlY3Rmbl9maW5kX2J5X25hbWUoJiMzNDtuYXQtZm9sbG93LW1hc3RlciYjMzQ7KTsKJiM0MzsJaWYgKGV4cGZuKQomIzQzOwkJZXhwZm4tJmd0O2V4cGVjdGZuKGN0LCB0aGlzKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosCiAJCQkJICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQpAQCAtMTM0Miw2ICYjNDM7MTM1MywxMyBAQCBzdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosCiAJCSAgICAgICAgICBwcml2LSZndDtsNHByb3RvLCBOVUxMLCAmYW1wO3ByaXYtJmd0O2Rwb3J0KTsKIAlleHAtJmd0O3RpbWVvdXQgJiM0Mzs9IHByaXYtJmd0O3RpbWVvdXQ7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKQomIzQzOwlpZiAoY3QtJmd0O3N0YXR1cyAmYW1wOyBJUFNfTkFUX01BU0spIHsKJiM0MzsJCWV4cC0mZ3Q7c2F2ZWRfcHJvdG8udGNwLnBvcnQgPSBwcml2LSZndDtkcG9ydDsKJiM0MzsJCWV4cC0mZ3Q7ZGlyID0gIWRpcjsKJiM0MzsJCWV4cC0mZ3Q7ZXhwZWN0Zm4gPSBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXI7CiYjNDM7CX0KJiM0MzsjZW5kaWYKIAlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKQogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORl9EUk9QOwogCkBAIC0xMzc1LDYgJiM0MzsxMzkzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVCkKJiM0MztzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBuZnRfY3RfbmF0IF9fcmVhZF9tb3N0bHkgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtuZnRfY3QtZm9sbG93LW1hc3RlciYjMzQ7LAomIzQzOwkuZXhwZWN0Zm4gPSBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXIsCiYjNDM7fTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbnQgX19pbml0IG5mdF9jdF9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCBlcnI7CkBAIC0xNDAwLDYgJiM0MzsxNDI1LDkgQEAgc3RhdGljIGludCBfX2luaXQgbmZ0X2N0X21vZHVsZV9pbml0KHZvaWQpCiAJZXJyID0gbmZ0X3JlZ2lzdGVyX29iaigmYW1wO25mdF9jdF90aW1lb3V0X29ial90eXBlKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZ290byBlcnI0OwomIzQzOyNlbmRpZgomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpCiYjNDM7CW5mX2N0X2hlbHBlcl9leHBlY3Rmbl9yZWdpc3RlcigmYW1wO25mdF9jdF9uYXQpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiAKQEAgLTE0MjUsNiAmIzQzOzE0NTMsMTMgQEAgc3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKQogCW5mdF91bnJlZ2lzdGVyX29iaigmYW1wO25mdF9jdF9oZWxwZXJfb2JqX3R5cGUpOwogCW5mdF91bnJlZ2lzdGVyX2V4cHIoJmFtcDtuZnRfbm90cmFja190eXBlKTsKIAluZnRfdW5yZWdpc3Rlcl9leHByKCZhbXA7bmZ0X2N0X3R5cGUpOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpCiYjNDM7CW5mX2N0X2hlbHBlcl9leHBlY3Rmbl91bnJlZ2lzdGVyKCZhbXA7bmZ0X2N0X25hdCk7CiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwluZl9jdF9oZWxwZXJfZXhwZWN0Zm5fZGVzdHJveSgmYW1wO25mdF9jdF9uYXQpOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsjZW5kaWYKIH0KIAogbW9kdWxlX2luaXQobmZ0X2N0X21vZHVsZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYwppbmRleCAwMThiYmI2ZGY0Y2U0My4uZWZjMjVlNzg4YTFjNTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMKQEAgLTU0NCw4ICYjNDM7NTQ0LDcgQEAgc3RhdGljIGludCBuZnRfYXJyYXlfaW50ZXJ2YWxzX2FsbG9jKHN0cnVjdCBuZnRfYXJyYXkgKmFycmF5LCB1MzIgbWF4X2ludGVydmFscykKIAlpZiAoIWludGVydmFscykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoYXJyYXktJmd0O2ludGVydmFscykKLQkJa3ZmcmVlKGFycmF5LSZndDtpbnRlcnZhbHMpOwomIzQzOwlrdmZyZWUoYXJyYXktJmd0O2ludGVydmFscyk7CiAKIAlhcnJheS0mZ3Q7aW50ZXJ2YWxzID0gaW50ZXJ2YWxzOwogCWFycmF5LSZndDttYXhfaW50ZXJ2YWxzID0gbWF4X2ludGVydmFsczsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwppbmRleCA0ZTY3MDhjMjM5MjJiOS4uZTY0MTE2YmYyNjM3ODYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTE5MjAsOSAmIzQzOzE5MjAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHh0X3RhcmdldF9zZXFfb3BzID0gewogCS5zaG93CT0geHRfdGFyZ2V0X3NlcV9zaG93LAogfTsKIAotI2RlZmluZSBGT1JNQVRfVEFCTEVTCSYjMzQ7X3RhYmxlc19uYW1lcyYjMzQ7Ci0jZGVmaW5lCUZPUk1BVF9NQVRDSEVTCSYjMzQ7X3RhYmxlc19tYXRjaGVzJiMzNDsKLSNkZWZpbmUgRk9STUFUX1RBUkdFVFMgCSYjMzQ7X3RhYmxlc190YXJnZXRzJiMzNDsKJiM0MzsjZGVmaW5lIEZPUk1BVF9UQUJMRVMJJiMzNDslc190YWJsZXNfbmFtZXMmIzM0OwomIzQzOyNkZWZpbmUJRk9STUFUX01BVENIRVMJJiMzNDslc190YWJsZXNfbWF0Y2hlcyYjMzQ7CiYjNDM7I2RlZmluZSBGT1JNQVRfVEFSR0VUUwkmIzM0OyVzX3RhYmxlc190YXJnZXRzJiMzNDsKIAogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKQEAgLTIwMzMsOCAmIzQzOzIwMzMsNyBAQCBpbnQgeHRfcHJvdG9faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKQogCXJvb3RfdWlkID0gbWFrZV9rdWlkKG5ldC0mZ3Q7dXNlcl9ucywgMCk7CiAJcm9vdF9naWQgPSBtYWtlX2tnaWQobmV0LSZndDt1c2VyX25zLCAwKTsKIAotCXN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7Ci0Jc3RybGNhdChidWYsIEZPUk1BVF9UQUJMRVMsIHNpemVvZihidWYpKTsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBQkxFUywgeHRfcHJlZml4W2FmXSk7CiAJcHJvYyA9IHByb2NfY3JlYXRlX25ldF9kYXRhKGJ1ZiwgMDQ0MCwgbmV0LSZndDtwcm9jX25ldCwgJmFtcDt4dF90YWJsZV9zZXFfb3BzLAogCQkJc2l6ZW9mKHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUpLAogCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylhZik7CkBAIC0yMDQzLDggJiM0MzsyMDQyLDcgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZikKIAlpZiAodWlkX3ZhbGlkKHJvb3RfdWlkKSAmYW1wOyZhbXA7IGdpZF92YWxpZChyb290X2dpZCkpCiAJCXByb2Nfc2V0X3VzZXIocHJvYywgcm9vdF91aWQsIHJvb3RfZ2lkKTsKIAotCXN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7Ci0Jc3RybGNhdChidWYsIEZPUk1BVF9NQVRDSEVTLCBzaXplb2YoYnVmKSk7CiYjNDM7CXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEZPUk1BVF9NQVRDSEVTLCB4dF9wcmVmaXhbYWZdKTsKIAlwcm9jID0gcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoYnVmLCAwNDQwLCBuZXQtJmd0O3Byb2NfbmV0LAogCQkJJmFtcDt4dF9tYXRjaF9zZXFfb3BzLCBzaXplb2Yoc3RydWN0IG5mX210dGdfdHJhdiksCiAJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFmKTsKQEAgLTIwNTMsOCAmIzQzOzIwNTEsNyBAQCBpbnQgeHRfcHJvdG9faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKQogCWlmICh1aWRfdmFsaWQocm9vdF91aWQpICZhbXA7JmFtcDsgZ2lkX3ZhbGlkKHJvb3RfZ2lkKSkKIAkJcHJvY19zZXRfdXNlcihwcm9jLCByb290X3VpZCwgcm9vdF9naWQpOwogCi0Jc3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTsKLQlzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBUkdFVFMsIHNpemVvZihidWYpKTsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBUkdFVFMsIHh0X3ByZWZpeFthZl0pOwogCXByb2MgPSBwcm9jX2NyZWF0ZV9zZXFfcHJpdmF0ZShidWYsIDA0NDAsIG5ldC0mZ3Q7cHJvY19uZXQsCiAJCQkgJmFtcDt4dF90YXJnZXRfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBuZl9tdHRnX3RyYXYpLAogCQkJICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWYpOwpAQCAtMjA2OCwxMyAmIzQzOzIwNjUsMTEgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZikKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBvdXRfcmVtb3ZlX21hdGNoZXM6Ci0Jc3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTsKLQlzdHJsY2F0KGJ1ZiwgRk9STUFUX01BVENIRVMsIHNpemVvZihidWYpKTsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX01BVENIRVMsIHh0X3ByZWZpeFthZl0pOwogCXJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LSZndDtwcm9jX25ldCk7CiAKIG91dF9yZW1vdmVfdGFibGVzOgotCXN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7Ci0Jc3RybGNhdChidWYsIEZPUk1BVF9UQUJMRVMsIHNpemVvZihidWYpKTsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBQkxFUywgeHRfcHJlZml4W2FmXSk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoYnVmLCBuZXQtJmd0O3Byb2NfbmV0KTsKIG91dDoKIAlyZXR1cm4gLTE7CkBAIC0yMDg3LDE2ICYjNDM7MjA4MiwxMyBAQCB2b2lkIHh0X3Byb3RvX2Zpbmkoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZikKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWNoYXIgYnVmW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU5dOwogCi0Jc3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTsKLQlzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBQkxFUywgc2l6ZW9mKGJ1ZikpOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfVEFCTEVTLCB4dF9wcmVmaXhbYWZdKTsKIAlyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC0mZ3Q7cHJvY19uZXQpOwogCi0Jc3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTsKLQlzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBUkdFVFMsIHNpemVvZihidWYpKTsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBUkdFVFMsIHh0X3ByZWZpeFthZl0pOwogCXJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LSZndDtwcm9jX25ldCk7CiAKLQlzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpOwotCXN0cmxjYXQoYnVmLCBGT1JNQVRfTUFUQ0hFUywgc2l6ZW9mKGJ1ZikpOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfTUFUQ0hFUywgeHRfcHJlZml4W2FmXSk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoYnVmLCBuZXQtJmd0O3Byb2NfbmV0KTsKICNlbmRpZiAvKkNPTkZJR19QUk9DX0ZTKi8KIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfVENQT1BUU1RSSVAuYyBiL25ldC9uZXRmaWx0ZXIveHRfVENQT1BUU1RSSVAuYwppbmRleCA5M2YwNjQzMDY5MDFjMC4uMjY1ZDIxNjk3ODQ3YmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVENQT1BUU1RSSVAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmMKQEAgLTE2LDcgJiM0MzsxNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmgmZ3Q7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9wdGxlbihjb25zdCB1X2ludDhfdCAqb3B0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9wdGxlbihjb25zdCB1OCAqb3B0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCS8qIEJld2FyZSB6ZXJvLWxlbmd0aCBvcHRpb25zOiBtYWtlIGZpbml0ZSBwcm9ncmVzcyAqLwogCWlmIChvcHRbb2Zmc2V0XSAmbHQ7PSBUQ1BPUFRfTk9QIHx8IG9wdFtvZmZzZXQmIzQzOzFdID09IDApCkBAIC0zMyw4ICYjNDM7MzMsOCBAQCB0Y3BvcHRzdHJpcF9tYW5nbGVfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IHh0X3RjcG9wdHN0cmlwX3RhcmdldF9pbmZvICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoLCBfdGg7CiAJdW5zaWduZWQgaW50IG9wdGwsIGksIGo7Ci0JdV9pbnQxNl90IG4sIG87Ci0JdV9pbnQ4X3QgKm9wdDsKJiM0MzsJdTE2IG4sIG87CiYjNDM7CXU4ICpvcHQ7CiAJaW50IHRjcF9oZHJsZW47CiAKIAkvKiBUaGlzIGlzIGEgZnJhZ21lbnQsIG5vIFRDUCBoZWFkZXIgaXMgYXZhaWxhYmxlICovCkBAIC05Nyw3ICYjNDM7OTcsNyBAQCB0Y3BvcHRzdHJpcF90ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogewogCXN0cnVjdCBpcHY2aGRyICppcHY2aCA9IGlwdjZfaGRyKHNrYik7CiAJaW50IHRjcGhvZmY7Ci0JdV9pbnQ4X3QgbmV4dGhkcjsKJiM0MzsJdTggbmV4dGhkcjsKIAlfX2JlMTYgZnJhZ19vZmY7CiAKIAluZXh0aGRyID0gaXB2NmgtJmd0O25leHRoZHI7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZHNjcC5jCmluZGV4IGZiMDE2OWE4ZjliYmQzLi44NzhmMjcwMTZlOTk4OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9kc2NwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9kc2NwLmMKQEAgLTQ5LDYgJiM0Mzs0OSwxNiBAQCBzdGF0aWMgaW50IGRzY3BfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRvc19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwomIzQzOwomIzQzOwlpZiAoaW5mby0mZ3Q7aW52ZXJ0ICZndDsgMSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCB0b3NfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwpAQCAtODIsNiAmIzQzOzkyLDcgQEAgc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBkc2NwX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJCS5uYW1lCQk9ICYjMzQ7dG9zJiMzNDssCiAJCS5yZXZpc2lvbgk9IDEsCiAJCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAomIzQzOwkJLmNoZWNrZW50cnkJPSB0b3NfbXRfY2hlY2ssCiAJCS5tYXRjaAkJPSB0b3NfbXQsCiAJCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvKSwKIAkJLm1lCQk9IFRISVNfTU9EVUxFLApAQCAtOTAsNiAmIzQzOzEwMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggZHNjcF9tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0gewogCQkubmFtZQkJPSAmIzM0O3RvcyYjMzQ7LAogCQkucmV2aXNpb24JPSAxLAogCQkuZmFtaWx5CQk9IE5GUFJPVE9fSVBWNiwKJiM0MzsJCS5jaGVja2VudHJ5CT0gdG9zX210X2NoZWNrLAogCQkubWF0Y2gJCT0gdG9zX210LAogCQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyksCiAJCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCmluZGV4IGY3Mjc1MmZhNDM3NGRhLi5kMzQ4MzFjZTNhZGZiYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCkBAIC00MDAsNyAmIzQzOzQwMCw3IEBAIHN0YXRpYyBpbnQgcmVjZW50X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLAogCXQtJmd0O25zdGFtcHNfbWF4X21hc2sgPSBuc3RhbXBfbWFzazsKIAogCW1lbWNweSgmYW1wO3QtJmd0O21hc2ssICZhbXA7aW5mby0mZ3Q7bWFzaywgc2l6ZW9mKHQtJmd0O21hc2spKTsKLQlzdHJjcHkodC0mZ3Q7bmFtZSwgaW5mby0mZ3Q7bmFtZSk7CiYjNDM7CXN0cnNjcHkodC0mZ3Q7bmFtZSwgaW5mby0mZ3Q7bmFtZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt0LSZndDtscnVfbGlzdCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGlwX2xpc3RfaGFzaF9zaXplOyBpJiM0MzsmIzQzOykKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDt0LSZndDtpcGhhc2hbaV0pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuYyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMKaW5kZXggYjlkYTgyNjkxNjFkOGYuLmIwOGIwNzdkN2YwYWRhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMKQEAgLTc4LDEwICYjNDM7NzgsMjMgQEAgdGNwbXNzX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRjcG1zc19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB4dF90Y3Btc3NfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwomIzQzOwomIzQzOwlpZiAoaW5mby0mZ3Q7bXNzX21pbiAmZ3Q7IGluZm8tJmd0O21zc19tYXgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGluZm8tJmd0O2ludmVydCAmZ3Q7IDEpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB0Y3Btc3NfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHsKIAl7CiAJCS5uYW1lCQk9ICYjMzQ7dGNwbXNzJiMzNDssCiAJCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAomIzQzOwkJLmNoZWNrZW50cnkJPSB0Y3Btc3NfbXRfY2hlY2ssCiAJCS5tYXRjaAkJPSB0Y3Btc3NfbXQsCiAJCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3RjcG1zc19tYXRjaF9pbmZvKSwKIAkJLnByb3RvCQk9IElQUFJPVE9fVENQLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9jdC5jIGIvbmV0L3NjaGVkL2FjdF9jdC5jCmluZGV4IGJlNTM1YTI2MWZhMDRhLi40Y2E3OTY0ZTgzYzg1NyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9jdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfY3QuYwpAQCAtMTUyNyw4ICYjNDM7MTUyNyw4IEBAIHN0YXRpYyBpbnQgdGNmX2N0X2R1bXBfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiAwOwogCiAJaWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgVENBX0NUX0hFTFBFUl9OQU1FLCBoZWxwZXItJmd0O25hbWUpIHx8Ci0JICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX0ZBTUlMWSwgaGVscGVyLSZndDt0dXBsZS5zcmMubDNudW0pIHx8Ci0JICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX1BST1RPLCBoZWxwZXItJmd0O3R1cGxlLmRzdC5wcm90b251bSkpCiYjNDM7CSAgICBubGFfcHV0X3U4KHNrYiwgVENBX0NUX0hFTFBFUl9GQU1JTFksIGhlbHBlci0mZ3Q7bmZwcm90bykgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX1BST1RPLCBoZWxwZXItJmd0O2w0cHJvdG8pKQogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSB0b3VjaGVzIG5ldGZpbHRlciBhbmQgcmVsYXRlZCBzdWJzeXN0ZW1zLiBTZWVtcyBsaWtlIGEgZGVjZW50IGFtb3VudCBvZiBjaHVybiBoZXJlLCBlbm91Z2ggdG8gd2FycmFudCBhIGZvY3VzZWQgcmV2aWV3IGFuZCBmdXp6aW5nLgoKRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgTkZfSE9PS19PUF9OQVRgIGFuZCBgc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2YCBpbiBgbmV0ZmlsdGVyLmhgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgbW9yZSByZWZpbmVkIGhhbmRsaW5nIG9mIE5BVC1zcGVjaWZpYyBob29rIG9wZXJhdGlvbnMuIFRoZSByZW1vdmFsIG9mIHNwZWNpZmljIHBvcnQgZGVmaW5pdGlvbnMgaW4gYG5mX2Nvbm50cmFja18qLmhgIGlzIGFsc28gbm90YWJsZS4gSXQgbG9va3MgbGlrZSB0aGUga2VybmVsIGlzIGJlY29taW5nIGxlc3MgcmVsaWFudCBvbiBoYXJkY29kZWQgcG9ydCBudW1iZXJzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLiBJbnN0ZWFkLCBpdCBzZWVtcyBsaWtlIG1vcmUgcHJvdG9jb2wtYWdub3N0aWMgbWV0aG9kcyBhcmUgYmVpbmcgYWRvcHRlZCwgd2hpY2ggaXMgYSBnb29kIGRpcmVjdGlvbi4KCkRpZ2dpbmcgaW50byBgaXBfdnMuaGAsIEkgc2VlIGEgc2ltcGxlIGNoYW5nZSBmcm9tIGB1X2ludDhfdGAgdG8gYHU4YCwgd2hpY2ggaXMgZmluZS4gQnV0LCBsb29raW5nIGZ1cnRoZXIgaW50byB0aGUgaGVscGVycywgSSYjMzk7bSBub3Rpbmcgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgaW4gYG5mX2Nvbm50cmFja19oZWxwZXJgLiBUaGUgcmVwbGFjZW1lbnQgb2YgdGhlIGB0dXBsZWAgc3RydWN0IHdpdGggYG5mcHJvdG9gIGFuZCBgbDRwcm90b2AgaW4gdGhlIGBoZWxwZXJgIHN0cnVjdHVyZSBpcyBhIG1ham9yIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIG1lYW5zIHRoYXQgd2UmIzM5O3JlIG1vdmluZyBhd2F5IGZyb20gcmVseWluZyBvbiB0aGUgdHVwbGUgZGlyZWN0bHkgZm9yIGhlbHBlciBpZGVudGlmaWNhdGlvbiwgZnVydGhlciBlbmZvcmNpbmcgYSBwcm90b2NvbC1hZ25vc3RpYyBzeXN0ZW0uIFRoZSBzaWduYXR1cmUgb2YgYG5mX2N0X2hlbHBlcl9pbml0YCBoYXMgYmVlbiBzaW1wbGlmaWVkLCB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHJlZmFjdG9yaW5nLiBUaGUgY2hhbmdlcyB0byB0aGUgaGVscGVyIGhhc2gsIHVzaW5nIGBuYW1lYCBhbmQgYHByb3RvbnVtYCBpbnN0ZWFkIG9mIGB0dXBsZWAsIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzIHNoaWZ0LiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGlzIGFmZmVjdHMgZXhpc3RpbmcgaGVscGVyIGltcGxlbWVudGF0aW9ucy4gT25lIGhlbHBlciBwZXIgcHJvdG9jb2wgcmF0aGVyIHRoYW4gbXVsdGlwbGUgaXMgYSBmaW5lIGlkZWEgYXMgaXQgc2VlbXMgbXVjaCBjbGVhbmVyLgoKVGhlIGZpeCBmb3IgdGhlIG92ZXJmbG93IGNoZWNrIGluIGBlYnRhYmxlcy5jYCBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgc2luY2UgZWJ0YWJsZXMgaXMgb2Z0ZW4gdXNlZCBmb3Igc2VjdXJpdHktcmVsYXRlZCBydWxlcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdXBkYXRlcyBjYWxscyB0byBgbmZfY3RfaGVscGVyX2luaXRgIGFuZCByZW1vdmVzIG1vZHVsZSBwYXJhbWV0ZXJzIGZvciBwb3J0cy4gVGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzIGluIGBuZl9jb25udHJhY2tfaGVscGVyYCBhbmQgYWxpZ25zIHdpdGggdGhlIGludGVudCB0byBtb3ZlIGF3YXkgZnJvbSBwb3J0LXNwZWNpZmljIGhlbHBlcnMuIFRoZSB1c2Ugb2YgYE5GUFJPVE9fVU5TUEVDYCBpcyBhcyBleHBlY3RlZCBmb3IgZ2VuZXJhbCBjYXNlcywgYW5kIGdvb2QgdG8gc2VlLiBUaGUgbW92ZW1lbnQgb2YgYHN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdmAgYW5kIHRoZSBzZXR0aW5nIG9mIGAuaG9va19vcHNfdHlwZSA9IE5GX0hPT0tfT1BfTkFUYCBsb29rIGxpa2UgdGhleSBhcmUgdHlpbmcgdXAgbG9vc2UgZW5kcyBmcm9tIHByZXZpb3VzIGNoYW5nZXMuCgpJbiB0aGUgbmV0bGluayBjb2RlLCB0aGUgY2hhbmdlcyBpbiBgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xgIGFuZCBvdGhlciBmdW5jdGlvbnMgdG8gdXNlIGBuZnByb3RvYCBhbmQgYGw0cHJvdG9gIGluc3RlYWQgb2YgYHR1cGxlYCBhcmUgYW5vdGhlciBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgdGhlIGhlbHBlciByZWZhY3RvcmluZy4gVGhlIHNhbWUgY2hhbmdlcyBpbiBgbmZuZXRsaW5rX2hvb2suY2AgdG8gaGFuZGxlIHRoZSBuZXcgTkFUIGhvb2sgdHlwZSBhbmQgZHVtcCBOQVQgaG9va3MgY29ycmVjdGx5IGFyZSBrZXkuIFRoZSBhZGRpdGlvbiBvZiBgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyYCB0byBgbmZ0X2N0LmNgIGlzIGludGVyZXN0aW5nLCBhbmQgd29ydGggaW52ZXN0aWdhdGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgZm9yIE5BVCB3aXRoaW4gbmZ0YWJsZXMuIFRoZSByZW1vdmFsIG9mIHRoZSByZWR1bmRhbnQgaWYgc3RhdGVtZW50IGluIGBuZnRfc2V0X3JidHJlZS5jYCBpcyBqdXN0IGhvdXNla2VlcGluZywgYnV0IGdvb2QgdG8gc2VlLgoKSSBzZWUgc29tZSBtaW5vciBjaGFuZ2VzIGluIGB4X3RhYmxlcy5jYCBhbmQgYHh0X1RDUE9QVFNUUklQLmNgIGZvciBzdHJpbmcgb3BlcmF0aW9ucyBhbmQgdHlwZSBkZWZpbml0aW9ucywgd2hpY2ggYXJlIGxpa2VseSBhaW1lZCBhdCBjb25zaXN0ZW5jeSBhbmQgcm9idXN0bmVzcy4gVGhlIG5ldyBjaGVja3MgZm9yIGB4dF9kc2NwLmNgIGFuZCBgeHRfdGNwbXNzLmNgIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiBwbGFjZSB0byBoYXJkZW4gdGhlIGNvZGUgYW5kIHByZXZlbnQgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4KCkZpbmFsbHksIGBhY3RfY3QuY2AgaGFzIGJlZW4gdXBkYXRlZCB0byB1c2UgYG5mcHJvdG9gIGFuZCBgbDRwcm90b2AuIE92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGFib3V0IG1ha2luZyB0aGUgbmV0ZmlsdGVyIG1vcmUgbW9kdWxhciwgY29uZmlndXJhYmxlLCBhbmQgcm9idXN0LiBJdCYjMzk7cyBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgc3RyZWFtbGluZWQgd2F5IG9mIGhhbmRsaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycy4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTttIGxhYmVsaW5nIHRoaXMgYXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyB3aXRob3V0IHF1ZXN0aW9uLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIHJlZmFjdG9yaW5nIGlzIGVub3VnaCB0byB3YXJyYW50IHRob3JvdWdoIHRlc3RpbmcuCgpJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBsaWtlbHkgY29uZmlncywgYW5kIHRoZXkgbG9vayBzb2xpZCB0byBtZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGV4YWN0IGNvbmZpZyBuYW1lcyB0byBtYWtlIHN1cmUuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB1c2UgdGhlc2UgdG8gcmVwcm9kdWNlIGEgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbmZpZ3VyYXRpb24gQXVkaXQgYW5kIERlcGVuZGVuY3kgUmV2aWV3KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBhZGRyZXNzZWQgdGhlIGNvcmUgaXNzdWUgaW4gdGhlIHByaW1hcnkgZmlsZS4gTm93LCBiZWZvcmUgd2UgY29uc2lkZXIgdGhpcyBmaXggY29tcGxldGUsIEkgbmVlZCB0byBwZXJmb3JtIGEgdGhvcm91Z2ggZGVwZW5kZW5jeSByZXZpZXcuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBzeXN0ZW1hdGljYWxseSBnbyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kaWZpZWQgb25lcyDigJMgdGhlICYjMzQ7b3RoZXIgbW9kaWZpZWQgZmlsZXMmIzM0OyByZWZlcnJlZCB0byBpbiB0aGUgY29udGV4dC4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGFueSBjYXNjYWRpbmcgZWZmZWN0cyBvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgbmVlZCBhZGp1c3RtZW50cyBhcyBhIHJlc3VsdCBvZiB0aGUgY2hhbmdlcyB3ZSYjMzk7dmUganVzdCBpbXBsZW1lbnRlZC4KClRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgc3ludGF4OyBpdCYjMzk7cyBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIGVudmlyb25tZW50IHZhcmlhYmxlcywgQVBJIGtleXMsIHNlcnZpY2UgZW5kcG9pbnRzLCBvciBldmVuIHJlc291cmNlIGxpbWl0cyBkZWZpbmVkIGluIHRob3NlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG5vdyBtaXNhbGlnbmVkPyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciB1bmludGVudGlvbmFsbHkgYnJlYWsgYSBmZWF0dXJlIGluIHNvbWUgZGVwZW5kZW50IHBhcnQgb2YgdGhlIHN5c3RlbS4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZGlkbiYjMzk7dCBpbnRyb2R1Y2UgYSByZWdyZXNzaW9uLiBBIGNoZWNrbGlzdCB0byBzdGVwIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb25zIGlzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX1hUX01BVENIXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTE0Nz1jb21tZW50IFwmIzM0O1h0YWJsZXMgbWF0Y2hlc1wmIzM0O1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNDgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0FERFJUWVBFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1MC1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7YWRkcnR5cGVcJiMzNDsgYWRkcmVzcyB0eXBlIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTU4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNTk6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9CUEZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTYwLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDticGZcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNjctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE2ODpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NHUk9VUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNjktXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2NvbnRyb2wgZ3JvdXBcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNzctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE3ODpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NMVVNURVJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTc5LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtjbHVzdGVyXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTkzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExOTQ6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE5NS1cdHRyaXN0YXRlICAmIzM5O1wmIzM0O2NvbW1lbnRcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIwNDpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMDUtXHR0cmlzdGF0ZSAgJiMzOTtcJiMzNDtjb25uYnl0ZXNcJiMzNDsgcGVyLWNvbm5lY3Rpb24gY291bnRlciBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIxNC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjE1OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxBQkVMXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIxNi1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7Y29ubmxhYmVsXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjI3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMjg6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjI5LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtjb25ubGltaXRcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzNzpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIzOC1cdHRyaXN0YXRlICAmIzM5O1wmIzM0O2Nvbm5tYXJrXCYjMzQ7IGNvbm5lY3Rpb24gbWFyayBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjQ3OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0OC1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7Y29ubnRyYWNrXCYjMzQ7IGNvbm5lY3Rpb24gdHJhY2tpbmcgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTI2MDpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NQVVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNjEtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2NwdVwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI2OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjY5OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfRENDUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNzAtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2RjY3BcJiMzNDsgcHJvdG9jb2wgbWF0Y2ggc3VwcG9ydCAoREVQUkVDQVRFRCkmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjgwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyODE6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9ERVZHUk9VUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyODItXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2Rldmdyb3VwXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjg5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyOTA6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9EU0NQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI5MS1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7ZHNjcFwmIzM0OyBhbmQgXCYjMzQ7dG9zXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzA0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzMDU6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9FQ05cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzA2LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtlY25cJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTMxNDpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0VTUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzMTUtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2VzcFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTMyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzIzOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTMyNC1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7aGFzaGxpbWl0XCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzM3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzMzg6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzM5LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtoZWxwZXJcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM0ODpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hMXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM0OS1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7aGxcJiMzNDsgaG9wbGltaXQvVFRMIG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzU1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNTY6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9JUENPTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzU3LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtpcGNvbXBcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNjQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2NTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0Vcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzY2LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtpcHJhbmdlXCYjMzQ7IGFkZHJlc3MgcmFuZ2UgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNzQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM3NTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0lQVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzc2LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtpcHZzXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzg0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzODU6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9MMlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM4Ni1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7bDJ0cFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzk1OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM5Ni1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7bGVuZ3RoXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0MDQ6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MDUtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O2xpbWl0XCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0MTQ6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9NQUNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDE1LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDttYWNcJiMzNDsgYWRkcmVzcyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDIzOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MjQtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O21hcmtcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MzEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQzMjpjb25maWcgTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MzMtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O211bHRpcG9ydFwmIzM0OyBNdWx0aXBsZSBwb3J0IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDQxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0NDI6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9ORkFDQ1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDQzLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtuZmFjY3RcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0NTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ1Mjpjb25maWcgTkVURklMVEVSX1hUX01BVENIX09TRlxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0NTMtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O29zZlwmIzM0OyBQYXNzaXZlIE9TIGZpbmdlcnByaW50IG1hdGNoJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ2NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDY2OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfT1dORVJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDY3LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtvd25lclwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDc0OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3NS1cdHRyaXN0YXRlICYjMzk7SVBzZWMgXCYjMzQ7cG9saWN5XCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDg0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODU6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ4Ni1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7cGh5c2RldlwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDk1OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OTYtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3BrdHR5cGVcJiMzNDsgcGFja2V0IHR5cGUgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MDYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTUwNzpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1FVT1RBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTUwOC1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7cXVvdGFcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTUxNzpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTE4LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtyYXRlZXN0XCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Mjc6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MjgtXHR0cmlzdGF0ZSAgJiMzOTtcJiMzNDtyZWFsbVwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU0MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTQxOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU0Mi1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7cmVjZW50XCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTUwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1NTE6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU1Mi1cdHRyaXN0YXRlICAmIzM5O1wmIzM0O3NjdHBcJiMzNDsgcHJvdG9jb2wgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1NjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU2Mzpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1NjQtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3NvY2tldFwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTgwOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgxLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtzdGF0ZVwmIzM0OyBtYXRjaCBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTkxOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU5Mi1cdHRyaXN0YXRlICYjMzk7XCYjMzQ7c3RhdGlzdGljXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTk5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2MDA6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkdcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjAxLVx0dHJpc3RhdGUgICYjMzk7XCYjMzQ7c3RyaW5nXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjEyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2MTM6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1Ncbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjE0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDt0Y3Btc3NcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2MjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTYyMzpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1RJTUVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjI0LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDt0aW1lXCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjM2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Mzc6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9VMzJcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjM4LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDt1MzJcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxMzcKCQkJCQkJCW91dHB1dDogNzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgTW9kdWxlIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIGEgY291cGxlIG9mIGtlcm5lbCBtb2R1bGUgY29uZmlndXJhdGlvbnMgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUGAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgcHJvcGVybHkgaGFuZGxpbmcgVENQIG9wdGlvbiBzdHJpcHBpbmcgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBhbmQgZGVwZW5kaW5nIG9uIHRoZSBzY2VuYXJpbywgSSBtaWdodCBuZWVkIGl0IGNvbmZpZ3VyZWQgaW4gYSBzcGVjaWZpYyB3YXkuIFRoZW4sIGZvciB0aGUgYnJpZGdpbmcgc2V0dXAgSSYjMzk7bSB3b3JraW5nIHdpdGgsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQlJJREdFX0VCVEFCTEVTYCBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBFbnN1cmluZyB0aGF0IHRoZSBlYnRhYmxlcyBtb2R1bGUgaXMgYXZhaWxhYmxlIGlzIGNyaXRpY2FsIGZvciBiZWluZyBhYmxlIHRvIGJ1aWxkIGZpbHRlcmluZyBydWxlcy4gSXQmIzM5O3MgYSBxdWljayBjaGVjayBidXQgSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgY2F1Z2h0IGRvd24gdGhlIGxpbmUgd2l0aCBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTExMTE9Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEzNzpjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMzgtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O1RDUE9QVFNUUklQXCYjMzQ7IHRhcmdldCBzdXBwb3J0JiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0VfRUJUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEVCVEFCTEVTIEludGVncmF0aW9uIHdpdGhpbiB0aGUgS2VybmVsIEJyaWRnZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYEJSSURHRV9FQlRBQkxFU2Agb3B0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGlzIHdpdGhpbiB0aGUgYnJpZGdlLXNwZWNpZmljIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdgIGZpcnN0LCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSBuZXRmaWx0ZXItcmVsYXRlZCBicmlkZ2Ugc2V0dGluZ3MgdG8gcmVzaWRlLiBUaGVuLCBpZiBpdCBpc24mIzM5O3QgdGhlcmUsIEkmIzM5O2xsIGJyYW5jaCBvdXQgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AsIHdoaWNoIGhvdXNlcyBnZW5lcmFsIGJyaWRnZSBvcHRpb25zLiBBbmQgaWYgZm9yIHNvbWUgcmVhc29uIHRoYXQgZmFpbHMsIEkgY2FuIGFsd2F5cyBsb29rIGZvciBpdCBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhcyBhIGxhc3QgcmVzb3J0LCBhcyB0aGUgZWJ0YWJsZXMgc2V0dXAgbWlnaHQgYmUgYXQgYSBoaWdoZXIgbGV2ZWwgdGhhbiBqdXN0IHRoZSBicmlkZ2UgaXRzZWxmLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgbG9jYXRpb24gZm9yIGEgY29uZmlnIHNldHRpbmcgcmVsYXRlZCB0byBlYnRhYmxlcyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBicmlkZ2UgY29udGV4dC4gVGhpcyB3aWxsIGltcGFjdCBteSBhcHByb2FjaCBtb3ZpbmcgZm9yd2FyZCwgd2hpY2ggY291bGQgaW5jbHVkZSBzb21lIHNvcnQgb2YgZGVwZW5kZW5jeSB0cmVlIGFuYWx5c2lzIG9mIHRoZSByZWxldmFudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0VfRUJUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4NTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRUJUQUJMRVMgQ29uc2lkZXJhdGlvbioqCgpIbW0sIHRoaW5raW5nIGFib3V0IHRoZSBpc3N1ZSBhdCBoYW5kLCB0aGVyZSYjMzk7cyBhIHBvc3NpYmlsaXR5LiBDb3VsZCBpdCBiZSBgQlJJREdFX05GX0VCVEFCTEVTYD8gSSYjMzk7bSBsZWFuaW5nIHRoYXQgd2F5LiBTZWVtcyBsaWtlIGEgbGlrZWx5IGN1bHByaXQgZ2l2ZW4gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBOZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIGJ1dCB0aGF0JiMzOTtzIG15IGluaXRpYWwgaW5zdGluY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0VfTkZfRUJUQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQyLSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTItXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjUzOm1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE5ldHdvcmsgQnJpZGdpbmcgd2l0aCBOZXRmaWx0ZXIqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvbmZpZ3VyaW5nIGEgYnJpZGdpbmcgc2V0dXAgdGhhdCBsZXZlcmFnZXMgTmV0ZmlsdGVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGVidGFibGVzIGludGVncmF0aW9uLiBUaGUgcHJpbWFyeSByZXF1aXJlbWVudCwgYXMgSSBzZWUgaXQsIGlzIGRlZmluaXRlbHkgYEJSSURHRV9ORl9FQlRBQkxFU2AuIFRoYXQgb25lJiMzOTtzIGZvdW5kYXRpb25hbC4gSXQmIzM5O3MgdGhlIGVuYWJsaW5nIHN3aXRjaCBmb3IgdXNpbmcgZWJ0YWJsZXMgd2l0aGluIGEgYnJpZGdlZCBlbnZpcm9ubWVudCwgc28gbmF0dXJhbGx5IGl0IHdvdWxkIGJlIHRoZSBzdGFydGluZyBwb2ludC4KCkJleW9uZCB0aGF0LCBpZiB3ZSB3YW50IGZ1bGwgY2FwYWJpbGl0aWVzIGZvciBtb3JlIGFkdmFuY2VkIG5ldHdvcmsgZnVuY3Rpb25zIGludm9sdmluZyBjb25uZWN0aW9uIHRyYWNraW5nLCB3ZSBzaG91bGQgYWxzbyB0aGluayBhYm91dCBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0NUSEVMUEVSYCBhbmQgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LYC4gVGhlIGZvcm1lciBwcm92aWRlcyBOZXRsaW5rIGludGVyZmFjZSB0byBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHdoaWxlIHRoZSBsYXR0ZXIgaW5jbHVkZXMgaG9va3MgdG8gZW5hYmxlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2Vyc3BhY2UgZm9yIG1hbmFnaW5nIE5ldGZpbHRlciBhc3BlY3RzLiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgbGlrZWx5IHJlcXVpcmVkIGlmIHdlJiMzOTtyZSBhbHNvIHVzaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWxvbmdzaWRlIHRoZSBicmlkZ2UuIFdlIHdvdWxkIG5lZWQgdG8gZW5hYmxlIHRoZXNlIGlmIHdlIHdhbnRlZCB0aGluZ3MgbGlrZSBjb25udHJhY2stYmFzZWQgZmlsdGVyaW5nIGluIHRoZSBicmlkZ2Ugb3Igd2FudGVkIHRvIGRvIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbiB3aXRoIE5ldGZpbHRlciB3aXRoaW4gdGhlIGJyaWRnZSBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzM9Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNjpjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTM3LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyOmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjc0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTM4NT1jb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzk3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM5ODpjb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5OS1cdGJvb2wgXCYjMzQ7TkZRVUVVRSBhbmQgTkZMT0cgaW50ZWdyYXRpb24gd2l0aCBDb25uZWN0aW9uIFRyYWNraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODk0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIGZvciBDb25udHJhY2sgSGVscGVyIGFuZCBUaW1lb3V0IE9wdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIEhtbW0sIG5vdCBgTkVURklMVEVSX05FVExJTktfQ1RIRUxQRVJgIHdoaWNoIEkgd2FzIGV4cGVjdGluZyB0byBzZWUuIE9rYXksIG5vIGJpZyBkZWFsLCBsZXQmIzM5O3Mga2VlcCBhbiBleWUgb3V0IGZvciBob3cgYE5GX0NUX05FVExJTktfSEVMUEVSYCByZWxhdGVzIHRvIHRoZSBleHBlY3RlZCBjb25udHJhY2sgaGVscGVyIGZ1bmN0aW9uYWxpdHkuCgpXaGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgdGltZW91dCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBMZXQgbWUgYWxzbyBpbnZlc3RpZ2F0ZSBgTkZfQ1RfTkVUTElOS19USU1FT1VUYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY2hhbmdlcyBvciBuYW1pbmcgZGlmZmVyZW5jZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBsb29rIGF0IHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaG93IGFsbCB0aGVzZSBuZXRsaW5rIGFuZCBjb25udHJhY2sgb3B0aW9ucyBhcmUgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NUX05FVExJTktfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNjY9Y29uZmlnIE5GX0NUX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM3Mzpjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzc0LVx0dHJpc3RhdGUgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluayYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozODU6Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzg2LVx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzM4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNvbnNpZGVyaW5nIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZyBjb25maWd1cmF0aW9uLCBhbmQgdHdvIGtleSBwYXJhbWV0ZXJzIGp1bXAgdG8gbWluZDogYE5GX0NUX05FVExJTktfVElNRU9VVGAgYW5kIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50IHRvIG1hbmFnaW5nIHRpbWVvdXRzIGFuZCBoZWxwZXIgaW50ZXJhY3Rpb25zLiBOb3csIHRvIGdldCBhIGJldHRlciBvdmVydmlldywgSSBuZWVkIHRvIHpvb20gb3V0IGFuZCBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUsIHNvIHRoZSBuZXh0IHRoaW5nIEkmIzM5O2QgY2hlY2sgd291bGQgdW5kb3VidGVkbHkgYmUgYE5GVF9DVGAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjE3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIChOQVQpIHdpdGggYE5GX05BVGAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgYXQgaGFuZCBsaWtlbHkgaW52b2x2ZXMgZXhhbWluaW5nIHRoZSBpbm5lciB3b3JraW5ncyBvZiBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFdoZW4gc29tZW9uZSBtZW50aW9ucyBOQVQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYE5GX05BVGAuIFRoYXQga2V5d29yZCwgYE5GX05BVGAsIGlzIHRoZSBrZXkuIEl0JiMzOTtzIHRoZSBOZXRmaWx0ZXIgbW9kdWxlIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBOQVQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3BlY3RzIGFyZSBiZWluZyBleHBsb3JlZC4gQXJlIHdlIGxvb2tpbmcgYXQgY29ubmVjdGlvbiB0cmFja2luZywgYWRkcmVzcyB0cmFuc2xhdGlvbiBydWxlcywgcG9ydCBtYXBwaW5nLCBvciBwZXJoYXBzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBUaGUgcG9zc2liaWxpdGllcyBhcmUgdmFzdC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGFuYWx5emluZyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIGRlYnVnZ2luZyBhIE5BVC1yZWxhdGVkIGlzc3VlLCBvciBkaWdnaW5nIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuIE15IHByb2Nlc3Mgd2lsbCBsaWtlbHkgaW52b2x2ZSBjaGVja2luZyB0aGUga2VybmVsIGRvY3VtZW50YXRpb24sIHNlYXJjaGluZyBmb3IgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMsIGFuZCBwb3RlbnRpYWxseSB1c2luZyB0b29scyBsaWtlIGBpcHRhYmxlc2AgYW5kIGBjb25udHJhY2tgIHRvIGluc3BlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBOQVQgbW9kdWxlIGluIGFjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIG9iamVjdGl2ZSBpcyB0byBmb2N1cyBvbiB0aGUgc3BlY2lmaWMgYXNwZWN0cyBvZiBgTkZfTkFUYCB0aGF0IGFyZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX05BVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzk4PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MDc6Y29uZmlnIE5GX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MTY6Y29uZmlnIE5GX05BVF9BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MTctXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDIxOmNvbmZpZyBORl9OQVRfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDIyLVx0dHJpc3RhdGVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDI1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQyNjpjb25maWcgTkZfTkFUX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQyNy1cdHRyaXN0YXRlXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MzE6Y29uZmlnIE5GX05BVF9TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzItXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDM2OmNvbmZpZyBORl9OQVRfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzNy1cdHRyaXN0YXRlXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NDE6Y29uZmlnIE5GX05BVF9SRURJUkVDVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0Mi1cdGJvb2xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDQ0OmNvbmZpZyBORl9OQVRfTUFTUVVFUkFERVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0NS1cdGJvb2xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDQ3OmNvbmZpZyBORl9OQVRfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQ4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzM5NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNOTVAgTkFUIE1vZHVsZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZG9lcyB0aGlzIGBORl9OQVRfU05NUF9CQVNJQ2AgbW9kdWxlIGxpdmUgaW4gdGhlIG5ldGZpbHRlciBjb2RlYmFzZT8mIzM0OyBSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NCBuZXRmaWx0ZXIgbW9kdWxlcywgYW5kIFNOTVAgTkFUIHdvdWxkIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoYXQgc2NvcGUuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHByZXNlbmNlLCBhbmQgaWYgaXQmIzM5O3MgdGhlcmUgSSBtaWdodCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBvdGhlciBtb2R1bGVzIGRlcGVuZCBvbiBpdCwgb3IgYXJlIGRlcGVuZGVudCBieSBpdCwgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb25zLiBUaGlzIG1pZ2h0IGFsc28gcHJvdmlkZSBjbHVlcyB0byBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gb3IgZXhhbXBsZXMuIEkmIzM5O20gYWZ0ZXIgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBuZXRmaWx0ZXIgb3B0aW9ucyB0byBwcmVwYXJlIGZvciBhbnkgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtCYXNpYyBTTk1QLUFMRyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBOZXRmaWx0ZXIgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgaW5pdGlhbCBsaXN0IG9mIE5ldGZpbHRlciBjb25maWd1cmF0aW9uczogYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS19GVFBgLCBhbmQgc28gb24sIGFsbCB0aGUgd2F5IHRvIGBORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQYC4gIFJpZ2h0LiBJIG5lZWQgdG8gZGlzdGlsbCB0aGlzIGRvd24gdG8gdGhlIG1vc3QgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIHNvIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBtb2RpZmllZCBvbmVzLiBMb29rcyBsaWtlIGEgYnVuY2ggaGF2ZSBiZWVuIHR3ZWFrZWQ6IGBORl9DT05OVFJBQ0tfQU1BTkRBYCB0aHJvdWdoIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9OQVRfU05NUF9CQVNJQ2AsIGBCUklER0VfTkZfRUJUQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktfSE9PS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORl9DVF9ORVRMSU5LX1RJTUVPVVRgLCBgTkZUX0NUYCwgYE5FVEZJTFRFUl9YVF9NQVRDSF9EU0NQYCwgYE5FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1NgLCBgTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVGAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUGAuIE5vdywgdGhhdCYjMzk7cyBtb3JlIG1hbmFnZWFibGUuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBOQVQgZnVuY3Rpb25hbGl0eSwgc28gbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gdGhpbmdzIGxpa2U6IGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCB0aG9zZSBhcmUgdGhlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZW4gdGhlcmUgYXJlIHNvbWUgTkFULXJlbGF0ZWQgZnVuY3Rpb25zOiBgbmZubF9ob29rX2R1bXBfbmF0YCwgYG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcmAsIGFuZCB0aGVuIHRoZXNlIG1hdGNoaW5nIGZ1bmN0aW9uczogYHRvc19tdF9jaGVja2AsIGB0Y3Btc3NfbXRfY2hlY2tgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGVidGFibGVzIGNoYW5nZXMsIHNvIEkmIzM5O2xsIGNoZWNrIG9uIGBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXJgIGFuZCBgZG9fcmVwbGFjZWAuIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGF0IGBuZm5sX2N0aGVscGVyX25ld2AsIGBuZm5sX2N0aGVscGVyX2dldGAsIGBuZm5sX2N0aGVscGVyX2RlbGAsIGFuZCBgY3R0aW1lb3V0X25ld190aW1lb3V0YC4gT2theSwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjbG9zZXIgbG9vayBhdCBgZG9fcmVwbGFjZWAgaW4gZWJ0YWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3JlcGxhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9ODcwPXN0YXRpYyBpbnQgdHJhbnNsYXRlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTkyMS1cdGlmICh1ZGNfY250KSB7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjkyMjpcdFx0LyogdGhpcyB3aWxsIGdldCBmcmVlJiMzOTtkIGluIGRvX3JlcGxhY2UoKS9lYnRfcmVnaXN0ZXJfdGFibGUoKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy05MjMtXHRcdCAqIGlmIGFuIGVycm9yIG9jY3Vyc1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9OTkwPXN0YXRpYyB2b2lkIGdldF9jb3VudGVycyhjb25zdCBzdHJ1Y3QgZWJ0X2NvdW50ZXIgKm9sZGNvdW50ZXJzLFxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTAxMC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTAxMTpzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEyLVx0XHRcdCAgICAgIHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbylcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExMTAtLyogcmVwbGFjZSB0aGUgdGFibGUgKi9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTExMTpzdGF0aWMgaW50IGRvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTEyLXtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExNTQtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjExNTU6XHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFx1MDAyNnRtcCwgbmV3aW5mbyk7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExNTYtXHRpZiAocmV0ID09IDApXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yMjUxPXN0YXRpYyBpbnQgY29tcGF0X2NvcHlfZWJ0X3JlcGxhY2VfZnJvbV91c2VyKHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyODUtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjIyODY6c3RhdGljIGludCBjb21wYXRfZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyODcte1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjI5Ni1cdFx0LyogdHJ5IHJlYWwgaGFuZGxlciBpbiBjYXNlIHVzZXJsYW5kIHN1cHBsaWVkIG5lZWRlZCBwYWRkaW5nICovXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjIyOTc6XHRcdGlmIChyZXQgPT0gLUVJTlZBTCBcdTAwMjZcdTAwMjYgZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKSA9PSAwKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjk4LVx0XHRcdHJldCA9IDA7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzczLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzc0Olx0cmV0ID0gZG9fcmVwbGFjZV9maW5pc2gobmV0LCBcdTAwMjZ0bXAsIG5ld2luZm8pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzc1LVx0aWYgKHJldCA9PSAwKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjU0Nz1zdGF0aWMgaW50IGRvX2VidF9zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IGFyZyxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjEtXHRcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTYyOlx0XHRcdHJldCA9IGNvbXBhdF9kb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTYzLVx0XHRlbHNlXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjQtI2VuZGlmXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1NjU6XHRcdFx0cmV0ID0gZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU2Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODQzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgY29uY2VwdHM6CgoqKkRlZXAgRGl2ZSBpbnRvIGBuZm5sX2hvb2tfZHVtcF9uYXRgKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgdG8gdW5kZXJzdGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YC4gIFRoaXMgaXMgbGlrZWx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byBOZXRmaWx0ZXIgKG9yIHBlcmhhcHMgdGhlIE5ldGxpbmsgaW50ZXJmYWNlIGludGVyYWN0aW5nIHdpdGggaXQpLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSAmIzM0O25hdCYjMzQ7IChOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24pIGFzcGVjdC4gJiMzNDtEdW1wJiMzNDsgc3VnZ2VzdHMgd2UmIzM5O3JlIHJldHJpZXZpbmcgaW5mb3JtYXRpb24sIHByb2JhYmx5IHN0YXRlIHRhYmxlcyBvciBydWxlIGNvbmZpZ3VyYXRpb25zLiAmIzM0O0hvb2smIzM0OyBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBhIGxhcmdlciBwcm9jZXNzOyBpdCYjMzk7cyBhIHBvaW50IHdoZXJlIHdlIGNhbiBpbnRlcmNlcHQgYW5kIHBvdGVudGlhbGx5IG1vZGlmeSBuZXR3b3JrIHRyYWZmaWMgdGhhdCBpcyBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqd2hhdCogaXQmIzM5O3MgZHVtcGluZywgd2hlcmUgaXQmIzM5O3MgY2FsbGVkLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBOQVQgaW1wbGVtZW50YXRpb24uIElzIHRoaXMgdXNlci1zcGFjZSBvciBrZXJuZWwtc3BhY2U/IFRoZSBuYW1lIHN1Z2dlc3RzIGtlcm5lbC1zcGFjZSwgaW50ZXJhY3Rpbmcgd2l0aCBOZXRmaWx0ZXImIzM5O3MgaW50ZXJuYWxzIGRpcmVjdGx5LCBidXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGltbWVkaWF0ZWx5LiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBOQVQgaXNzdWVzLCBhbmFseXppbmcgdHJhZmZpYyBmbG93cywgb3IgZXZlbiBwb3RlbnRpYWxseSBhdWRpdGluZyBOQVQgY29uZmlndXJhdGlvbnMgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgY29udGV4dCBhbmQgcHVycG9zZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyB1c2FnZSwgbG9va2luZyBmb3IgY2FsbCBzaXRlcyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5sX2hvb2tfZHVtcF9uYXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI3OT1uZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMzOS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozNDA6c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM0MS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0zNjQ9c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM5Mi1cdFx0aWYgKG9wc1tpXS1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjM5MzpcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzk0LVx0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0OTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipBbmFseXppbmcgYG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcmAqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBpcyBkb2luZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGBjdGApIGFuZCBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKGBuYXRgKS4gVGhlIHRlcm0gJiMzNDtmb2xsb3dfbWFzdGVyJiMzNDsgc3VnZ2VzdHMgYSBkZXBlbmRlbmN5IG9yIGEgYmVoYXZpb3IgYmFzZWQgb24gYSBwcmltYXJ5IG9yIHBhcmVudCBjb25uZWN0aW9uLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSBpbiBjb21wbGV4IHNjZW5hcmlvcyBpbnZvbHZpbmcgTkFUIGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIGluIGBuZnRhYmxlc2AgbWlnaHQgYmUgbWFuYWdpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpZmZlcmVudCBjb25uZWN0aW9ucyBhbmQgdGhlaXIgTkFUZWQgY291bnRlcnBhcnRzLiBJIHdhbnQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyB0YWJsZSBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhpcyBzcGVjaWZpYyAmIzM0O2ZvbGxvd19tYXN0ZXImIzM0OyBiZWhhdmlvciBoYXMgb24gdGhlIG92ZXJhbGwgcGFja2V0IGZsb3cuIElzIGl0IG1ha2luZyBOQVQgbW9yZSByb2J1c3Q/IERvZXMgaXQgbWVhbiB0aGUgc3Vic2VxdWVudCBjb25uZWN0aW9ucyBoYXZlIHNpbWlsYXIgTkFUIG1hcHBpbmdzIHRvIHRoZSBtYXN0ZXIgY29ubmVjdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBpbnRvIHRoZSBuZnRhYmxlcyBkb2N1bWVudGF0aW9uIGFuZCBzb21lIHJlbGF0ZWQgc291cmNlIGNvZGUsIGlmIHBvc3NpYmxlLCB0byBmdWxseSBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaW50ZW5kZWQgdXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jdF9uYXRfZm9sbG93X21hc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMjg1PXN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMwMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzAxOnN0YXRpYyB2b2lkIG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzAyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEzMTE9c3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM1OS1cdFx0ZXhwLVx1MDAzZWRpciA9ICFkaXI7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzNjA6XHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IG5mdF9jdF9uYXRfZm9sbG93X21hc3Rlcjtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM2MS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEzOTc9c3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gbmZ0X2N0X25hdCBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzk4LVx0Lm5hbWUgPSBcJiMzNDtuZnRfY3QtZm9sbG93LW1hc3RlclwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTM5OTpcdC5leHBlY3RmbiA9IG5mdF9jdF9uYXRfZm9sbG93X21hc3Rlcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQwMC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzE3OAoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBOZXR3b3JrIEhlYWRlciBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHRvc19tdF9jaGVja2AgYW5kIGB0Y3Btc3NfbXRfY2hlY2tgIHZhcmlhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzdGF0ZSB0aGV5JiMzOTtyZSBpbi4gQXJlIHRoZXkgZW5hYmxlZCwgZGlzYWJsZWQsIGNvbmZpZ3VyZWQgaW4gc29tZSBjdXN0b20gd2F5PyBXaGF0IGFyZSB0aGVpciB2YWx1ZXM/IFdoYXQgYXJlIHRoZXkgKnN1cHBvc2VkKiB0byBiZT8gQXJlIHRoZXNlIGV2ZW4gcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgaW52ZXN0aWdhdGlvbj8gT3Igc2hvdWxkIEkgbW92ZSBvbiB0byBvdGhlciBhcmVhcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgY2hlY2tpbmcgdGhlaXIgY3VycmVudCBzZXR0aW5ncyBhbmQgY29tcGFyaW5nIHRoZW0gdG8gdGhlIGJhc2VsaW5lIG9yIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb24uIERlcGVuZGluZyBvbiB0aGUgcmVzdWx0cywgdGhhdCB3aWxsIGRpcmVjdCBtZSwgZm9yIGluc3RhbmNlIGlmIGJvdGggYXJlIGNoZWNrZWQgYW5kIHRoZXkgc2hvdWxkbnQgYmUsIG9yIGlmIHRoZXkgYXJlIGNoZWNrZWQgYW5kIHRoZXkgc2hvdWxkIGJlLCBvciBpZiBvbmx5IG9uZSBpcyBlbmFibGVkIGV0Yy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IGNvbmZpZ3VyYXRpb24gYW5vbWFseSBoZXJlIGNhbiBleHBsYWluIHRoZSBwZXJmb3JtYW5jZSBiZWhhdmlvdXIgdGhhdCB0cmlnZ2VyZWQgdGhpcyBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0b3NfbXRfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYz00Mj1zdGF0aWMgaW50IGRzY3BfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4tLVxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtNTEtXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYzo1MjpzdGF0aWMgaW50IHRvc19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jLTUzLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYz03ND1zdGF0aWMgc3RydWN0IHh0X21hdGNoIGRzY3BfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy05NC1cdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNCxcbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jOjk1Olx0XHQuY2hlY2tlbnRyeVx0PSB0b3NfbXRfY2hlY2ssXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy05Ni1cdFx0Lm1hdGNoXHRcdD0gdG9zX210LFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jLTEwMy1cdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNixcbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jOjEwNDpcdFx0LmNoZWNrZW50cnlcdD0gdG9zX210X2NoZWNrLFxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtMTA1LVx0XHQubWF0Y2hcdFx0PSB0b3NfbXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcG1zc19tdF9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF90Y3Btc3MuYz0yNT10Y3Btc3NfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtODAtXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jOjgxOnN0YXRpYyBpbnQgdGNwbXNzX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYy04Mi17XG4tLVxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYz05Mz1zdGF0aWMgc3RydWN0IHh0X21hdGNoIHRjcG1zc19tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtOTYtXHRcdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jOjk3Olx0XHQuY2hlY2tlbnRyeVx0PSB0Y3Btc3NfbXRfY2hlY2ssXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jLTk4LVx0XHQubWF0Y2hcdFx0PSB0Y3Btc3NfbXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDM0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIGBuZm5sX2N0aGVscGVyX25ld2AqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiBgbmZubF9jdGhlbHBlcl9uZXdgLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBuYW1lLCBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgYSAqbmV3KiBvciBtb2RpZmllZCBoZWxwZXIgZnVuY3Rpb24gcmVsYXRlZCB0byBDVCAoY29udGV4dCB0cmFja2luZyksIHByZXN1bWFibHkgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW46CgoqICAgV2hhdCYjMzk7cyBjaGFuZ2VkIGluIGBuZm5sX2N0aGVscGVyX25ld2AgZnJvbSB0aGUgb2xkZXIgdmVyc2lvbnM/IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlLCBhIHJlZmFjdG9yaW5nLCBvciBqdXN0IGFuIGluY3JlbWVudGFsIGltcHJvdmVtZW50PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMuCiogICBXaGF0IHNwZWNpZmljIGNvbnRleHQocykgaXMgaXQgKmhlbHBpbmcqIHRvIHRyYWNrPyBJcyB0aGlzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLCBmbG93IHRyYWNraW5nLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYz8gV2hhdCBhcmUgdGhlIG5ldyBlZGdlLWNhc2VzPwoqICAgV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgaW50ZXJhY3Rpbmcgd2l0aD8gQXJlIHRoZXJlIGFueSBuZXcgc3RydWN0dXJlcyBhZGRlZD8gQW55IGNoYW5nZXMgdG8gZXhpc3Rpbmcgc3RydWN0dXJlcz8gV2hhdCBsb2NraW5nIGlzIGludm9sdmVkPyBJcyB0aGVyZSBhIHJpc2sgb2YgcmFjZSBjb25kaXRpb25zIHRoYXQgd2FycmFudCBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbj8KKiAgIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzPyBJcyBpdCB1cHN0cmVhbSwgZG93bnN0cmVhbSwgb3IgYSBkaXJlY3QgbGluaz8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIE5ldGZpbHRlciBob29rcyBvciBtb2R1bGVzLCBhbmQgYXJlIHRoZXkgd2VsbC1kZWZpbmVkPwoqICAgSXMgaXQgZ29pbmcgdG8gaGFuZGxlIG5ldyBwcm90b2NvbHM/IERvZXMgdGhpcyBpbnZvbHZlIFNJUCwgRlRQLCBvciBvdGhlciBhcHBsaWNhdGlvbiBsYXllciBwcm90b2NvbHM/IEhvdyBkbyB0aGUgbmV3IHByb3RvY29scyBpbXByb3ZlIHRoZSBleGlzdGluZyBvbmVzPwoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBtaW5vciB0d2Vhaywgb3IgZG9lcyBpdCByZXByZXNlbnQgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIENUPyBUaGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyBkZWVwIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkxPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI1LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0MjY6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjctXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9jdGhlbHBlcl9jYltORk5MX01TR19DVEhFTFBFUl9NQVhdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NDktXHRbTkZOTF9NU0dfQ1RIRUxQRVJfTkVXXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MDpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX25ldyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUxLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzYzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBjdHRpbWVvdXRfbmV3X3RpbWVvdXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgY3R0aW1lb3V0X25ld190aW1lb3V0YC4gUmlnaHQgYXdheSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGNhbGwgc3RhY2suLi4gd2hhdCBpbml0aWF0ZWQgdGhpcyBjYWxsPyBXaGF0IGNvbnRleHQgaXMgaXQgb3BlcmF0aW5nIHdpdGhpbj8gSXMgaXQgaGFuZGxpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBrZWVwLWFsaXZlcywgcmV0cmFuc21pc3Npb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8mIzM0OyBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IG1hcHBpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBjdHRpbWVvdXRgIHN0cnVjdHVyZSBpdHNlbGYg4oCTIHdoYXQgZmllbGRzIGFyZSByZWxldmFudCBoZXJlPyBUaW1lb3V0IHZhbHVlLCBhc3NvY2lhdGVkIGNhbGxiYWNrLCBjb250ZXh0IHBvaW50ZXIuLi4gR290dGEgY29uc2lkZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGludm9sdmVzIHRocmVhZGluZyBvciBpbnRlcnJ1cHRzLiBNZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uIOKAkyBhcmUgd2UgbGVha2luZyByZXNvdXJjZXMgYW55d2hlcmU/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIGh1Z2UuIElzIHRoZXJlIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIG9yIHRlc3QgY2FzZXMgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24/CkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gV2hhdCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gV2hhdCBpZiB0aGUgdGltZW91dCB2YWx1ZSBpcyBhYnN1cmRseSBsYXJnZSBvciBzbWFsbD8gSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmc/IENvdWxkIHRoaXMgYmUgYSBib3R0bGVuZWNrIHVuZGVyIGhlYXZ5IGxvYWQ/IEdvdHRhIGNoZWNrIGZvciB0aGF0LiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3R0aW1lb3V0X25ld190aW1lb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM9Njc9Y3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jLTkzLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM6OTQ6c3RhdGljIGludCBjdHRpbWVvdXRfbmV3X3RpbWVvdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jLTk1LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM9NTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBjdHRpbWVvdXRfY2JbSVBDVE5MX01TR19USU1FT1VUX01BWF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYy01MzEtXHRbSVBDVE5MX01TR19USU1FT1VUX05FV10gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYzo1MzI6XHRcdC5jYWxsXHRcdD0gY3R0aW1lb3V0X25ld190aW1lb3V0LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMtNTMzLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzQxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAuIE5hdHVyYWxseSwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgY3JpdGljYWwgcm9sZSB0aGlzIGZ1bmN0aW9uIHBsYXlzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhIGhlbHBlciBhY3R1YWxseSAmIzM0O3JlZ2lzdGVycyYjMzQ7IGl0c2VsZiwgYmV5b25kIHRoZSBvYnZpb3VzLiBJdCYjMzk7cyBub3QganVzdCBhIG1hdHRlciBvZiBtYWtpbmcgaXRzIHByZXNlbmNlIGtub3duLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ7IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlLCBvZiBjb3Vyc2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGF0dGFjaGluZyBhIHByb3RvY29sLXNwZWNpZmljIGhhbmRsZXIsIGEgcG9ydCByYW5nZSwgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gV2hhdCYjMzk7cyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgbG9vayBsaWtlIGluIHJlbGF0aW9uIHRvIE5BVCYjMzk7aW5nIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgY29ubnRyYWNrIHN0YXRlcz8gVGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBjb25jZXJuIGFib3V0IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyB3aGVuIG1vZGlmeWluZyBzaGFyZWQgc3RydWN0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgY2FsbCBzZXF1ZW5jZSBhbmQgd2hldGhlciB0aGlzIHJlZ2lzdHJhdGlvbiBpcyBhdG9taWMuIEkgc2hvdWxkIHByb2JhYmx5IGJydXNoIHVwIG9uIHRoZSByZWxldmFudCBSRkNzIGFuZCB0aGUgZXhhY3QgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGVpciBpbnRlcmFjdGlvbiBmb3IgdmFyaW91cyBwcm90b2NvbHMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgZmluZXIgcG9pbnRzIG9mIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBhcmNoaXRlY3R1cmUgYW5kIGl0cyB1c2UgYnkgYSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhlbHBzIGlkZW50aWZ5IGFuZCBoYW5kbGUgc3BlY2lmaWMgYXBwbGljYXRpb24tbGV2ZWwgcHJvdG9jb2xzIHRvIGZhY2lsaXRhdGUgcHJvcGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTM2Nj1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfbG9nKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTM2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjM2ODppbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTM2OS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDA2LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQwNzpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDA4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDA5PWludCBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0MjI6XHRlcnIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIobmV3X2hlbHBlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MjMtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTUwNj1pbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MjItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1MjM6XHRcdGVyciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihuZXdfaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUyNC1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDE1NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgc3BlY2lmaWMgdG9waWMsIGFpbWVkIGRpcmVjdGx5IGF0IGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgbmZfY3RfaGVscGVyX2luaXRgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHRoaW5raW5nIGlzLCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZl9jdF9oZWxwZXJfaW5pdGAuIE5vIGZsdWZmLCBubyBwcmVsaW1pbmFyaWVzLCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIFdoYXQgZG9lcyBpdCBpbml0aWFsaXplPyBIb3cgZG9lcyBpdCBpbnRlZ3JhdGUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgc3lzdGVtPyBJIG5lZWQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaXRzIGltcGFjdC4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9uczogSXMgdGhpcyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uPyBEb2VzIGl0IGRlYWwgd2l0aCBoZWxwZXIgbW9kdWxlcywgb3IgaXMgaXQgbW9yZSBvZiBhIGdlbmVyYWwgc2V0dXAgcm91dGluZT8gSXMgdGhpcyB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcgdG8gZ2V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgc2V0IHVwPyBJJiMzOTttIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiBhIG11bHRpLXRocmVhZGVkIG5ldHdvcmsgc3RhY2suIE9rYXksIGxldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2hlbHBlcl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDcxPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NzItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0NzM6dm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDc0LVx0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MDMtfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTA0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9pbml0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA2NTgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipBbmFseXppbmcgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvciBzaWduaWZpY2FuY2Ugb2YgdGhpcyBmdW5jdGlvbiwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQgZml0cyB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgY29ubnRyYWNrIHN5c3RlbS4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0cyByb2xlIGlzIHJlbGF0ZWQgdG8gZmluZGluZyBvciBsb2NhdGluZyBzb21ldGhpbmcg4oCTIGxpa2VseSBhICYjMzQ7aGVscGVyJiMzNDsgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gJiMzNDtIZWxwZXImIzM0OyBzdWdnZXN0cyBhIG1vZHVsZSB0aGF0IGFzc2lzdHMgdGhlIGNvbm50cmFjayBpbiB1bmRlcnN0YW5kaW5nIG9yIGRlYWxpbmcgd2l0aCBzcGVjaWZpYyBwcm90b2NvbHMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGNvbm50cmFjayBoZWxwZXJzIGFyZSB1c3VhbGx5IHVzZWQgdG8gaW5zcGVjdCBwYWNrZXQgcGF5bG9hZHMgdG8gZGVyaXZlIGluZm9ybWF0aW9uIHRoYXQgaGVscHMgdGhlIGNvbm50cmFjayBtb2R1bGUgbWFpbnRhaW4gY29ubmVjdGlvbiBzdGF0ZSBpbiBwcm90b2NvbHMgdGhhdCBkb24mIzM5O3QgZml0IHRoZSBub3JtYWwgVENQL1VEUCBwYXR0ZXJuIChsaWtlIEZUUCwgU0lQLCBldGMuKS4gTm93IEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgYW5kIGhvdyB0aGlzIGZpdHMgd2l0aGluIHRoZSBlbnRpcmUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0uLi4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIHJldmVhbHMgc29tZXRoaW5nIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz01NT1zdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo1NjpfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTc1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjc2OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTc3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTc5PW5mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy04NC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjg1Olx0aCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKG5hbWUsIGwzbnVtLCBwcm90b251bSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy04Ni0jaWZkZWYgQ09ORklHX01PRFVMRVNcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy05MC1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo5MTpcdFx0XHRoID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTkyLVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTEzND1uZl9uYXRfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTQxLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTQyOlx0aCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKG5hbWUsIGwzbnVtLCBwcm90b251bSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xNDMtXHRpZiAoIWgpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0OTQKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciYjMzk7cyBtb2R1bGUgZ2V0dGluZyBmdW5jdGlvbiwgYG5mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYnJvYWRlciBgbmV0ZmlsdGVyYCBmcmFtZXdvcmsuIFdoeSBhcmUgd2UgdGFyZ2V0aW5nIHRoaXM/IEFyZSB3ZSBsb29raW5nIGZvciBhIHJhY2UgY29uZGl0aW9uLCBhIHVzZS1hZnRlci1mcmVlLCBvciBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIHdpdGhpbiB0aGUgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZz8gSXMgdGhlcmUgc29tZSB1bmV4cGVjdGVkIG1vZHVsZSBsb2FkL3VubG9hZCBiZWhhdmlvciBpbiBhIHNwZWNpZmljIHVzZSBjYXNlPyBPciBhcmUgd2UgYXR0ZW1wdGluZyB0byB1bmRlcnN0YW5kIHRoZSBoZWxwZXIgbW9kdWxl4oCZcyByZWZlcmVuY2UgY291bnRzIGluIHJlbGF0aW9uIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmc/IFRoZSBjb250ZXh0IG9mIHdoeSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWNvbWUgdGhlIGZvY3VzIG9mIG15IGF0dGVudGlvbiB3aWxsIHNoYXBlIHRoZSBxdWVzdGlvbnMgSSBhc2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBmbG93IG9mIGNvbnRyb2wgdGhhdCBjYWxscyB0aGlzIG1vZHVsZSBhbmQgd2hpY2ggcGFydHMgYXJlIHVuZGVyIG91ciBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9Nzg9c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6Nzk6bmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtODAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTEwNy19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxMDg6RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xMDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTYzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5mX25hdF9oZWxwZXJfdHJ5X21vZHVsZV9nZXRgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBuZl9uYXRfaGVscGVyX3RyeV9tb2R1bGVfZ2V0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyByZWZyZXNoIG91ciB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoaXMgc2l0cyBpbiB0aGUgb3ZlcmFsbCBOQVQgaGVscGVyIGZyYW1ld29yay4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGggbW9kdWxlIGxvYWRpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY3ljbGluZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgZ290Y2hhczogcmFjZSBjb25kaXRpb25zLCBkb3VibGUtZnJlZXMgKG9yIHJhdGhlciwgdGhlIGxhY2sgdGhlcmVvZiB3aGVuIHRoaW5ncyBmYWlsKS4gSSYjMzk7bSBwcm9iYWJseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25udHJhY2ssIGFuZCBob3cgd2UmIzM5O3JlIGVuc3VyaW5nIHRoYXQgYSBoZWxwZXIgbW9kdWxlIHN0YXlzIGxvYWRlZCBsb25nIGVub3VnaCBmb3IgdGhlIGNvbm50cmFjayBlbnRyeSB0byBiZSBjbGVhbmVkIHVwIHdoZW4gaXQmIzM5O3Mgbm8gbG9uZ2VyIG5lZWRlZC4gV2Ugc2hvdWxkIHJlYWxseSBiZSBkaWdnaW5nIGludG8gaG93IHJvYnVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgaGVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIG1hbmFnZWQsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBhIG1vZHVsZSBjb3VsZCBiZSB1bmxvYWRlZCBwcmVtYXR1cmVseSwgbGVhdmluZyBkYW5nbGluZyBwb2ludGVycyBvciB1bmRlZmluZWQgYmVoYXZpb3IgaW4gdGhlIG5ldGZpbHRlciBzdGFjay4gQWxzbywgY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBjb250ZW50aW9uIHdoZW4gZ3JhYmJpbmcgYW5kIHJlbGVhc2luZyBtb2R1bGUgcmVmZXJlbmNlcyBpcyBhIG11c3QuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgd29ya3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX25hdF9oZWxwZXJfdHJ5X21vZHVsZV9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xMzM9aW50XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxMzQ6bmZfbmF0X2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTM1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xNjctfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MTY4OkVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9oZWxwZXJfdHJ5X21vZHVsZV9nZXQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ3MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIHNlY3VyaXR5IGNvbmNlcHRzOgoKKipEZWVwIERpdmUgaW50byBgbmZubF9ob29rX2R1bXBfbmF0YCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgYG5mbmxfaG9va19kdW1wX25hdGAuICBUaGlzIGlzIGxpa2VseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gTmV0ZmlsdGVyIChvciBwZXJoYXBzIHRoZSBOZXRsaW5rIGludGVyZmFjZSBpbnRlcmFjdGluZyB3aXRoIGl0KSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgJiMzNDtuYXQmIzM0OyAoTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uKSBhc3BlY3QuICYjMzQ7RHVtcCYjMzQ7IHN1Z2dlc3RzIHdlJiMzOTtyZSByZXRyaWV2aW5nIGluZm9ybWF0aW9uLCBwcm9iYWJseSBzdGF0ZSB0YWJsZXMgb3IgcnVsZSBjb25maWd1cmF0aW9ucy4gJiMzNDtIb29rJiMzNDsgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgYSBsYXJnZXIgcHJvY2VzczsgaXQmIzM5O3MgYSBwb2ludCB3aGVyZSB3ZSBjYW4gaW50ZXJjZXB0IGFuZCBwb3RlbnRpYWxseSBtb2RpZnkgbmV0d29yayB0cmFmZmljIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkIGJ5IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIGl0JiMzOTtzIGR1bXBpbmcsIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgTkFUIGltcGxlbWVudGF0aW9uLiBJcyB0aGlzIHVzZXItc3BhY2Ugb3Iga2VybmVsLXNwYWNlPyBUaGUgbmFtZSBzdWdnZXN0cyBrZXJuZWwtc3BhY2UsIGludGVyYWN0aW5nIHdpdGggTmV0ZmlsdGVyJiMzOTtzIGludGVybmFscyBkaXJlY3RseSwgYnV0IEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBpbW1lZGlhdGVseS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgTkFUIGlzc3VlcywgYW5hbHl6aW5nIHRyYWZmaWMgZmxvd3MsIG9yIGV2ZW4gcG90ZW50aWFsbHkgYXVkaXRpbmcgTkFUIGNvbmZpZ3VyYXRpb25zIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIHNwZWNpZmljIGNvbnRleHQgYW5kIHB1cnBvc2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UsIGxvb2tpbmcgZm9yIGNhbGwgc2l0ZXMgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0yNzk9bmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMzktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MzQwOnN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zNDEtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9MzY0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zOTItXHRcdGlmIChvcHNbaV0tXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozOTM6XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM5NC1cdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTE5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5mbmxfY3RoZWxwZXJfbmV3YCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5mbmxfY3RoZWxwZXJfbmV3YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBwdXJwb3NlLCB0aGUgY29yZSBsb2dpYywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiwgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGdpdmVuIHRoZSBuYW1pbmcsIGJ1dCBhIHF1aWNrIHNjYW4gd2lsbCBjb25maXJtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3Vlcz8gRG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5LCBvciBhcmUgdGhlcmUgb2J2aW91cyBwbGFjZXMgZm9yIHJlc291cmNlIGxlYWtzPyBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHdhdGNoaW5nIHRvIHNlZSBpZiBpdCYjMzk7cyB1c2luZyB0aGUgbmV3IGNvbm50cmFjayBBUEkgb3IgbGVnYWN5IG1lY2hhbmlzbXMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIHRvIHNlZSBpZiBpdCBtYWtlcyB1c2Ugb2YgYW55IG9mIHRoZSBwZXItQ1BVIGRhdGEgc3RydWN0dXJlcywgYW5kIHdoZXRoZXIgaXQgaGFuZGxlcyBDUFUgYWZmaW5pdHkgY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBhbnkgYXRvbWljIG9wZXJhdGlvbnMsIHNpbmNlIHRoaXMgaXMgaW4gdGhlIGtlcm5lbC4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgbW9yZSBnZW5lcmFsIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3Vic3lzdGVtcyB0byB2ZXJpZnkgdGhhdCBpdCBpbnRlcmFjdHMgd2l0aCB0aGVtIGluIGEgY29uc2lzdGVudCBhbmQgcm9idXN0IHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkxPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI1LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0MjY6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjctXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9jdGhlbHBlcl9jYltORk5MX01TR19DVEhFTFBFUl9NQVhdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NDktXHRbTkZOTF9NU0dfQ1RIRUxQRVJfTkVXXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MDpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX25ldyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUxLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzQxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBjdHRpbWVvdXRfbmV3X3RpbWVvdXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgY3R0aW1lb3V0X25ld190aW1lb3V0YC4gUmlnaHQgYXdheSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGNhbGwgc3RhY2suLi4gd2hhdCBpbml0aWF0ZWQgdGhpcyBjYWxsPyBXaGF0IGNvbnRleHQgaXMgaXQgb3BlcmF0aW5nIHdpdGhpbj8gSXMgaXQgaGFuZGxpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBrZWVwLWFsaXZlcywgcmV0cmFuc21pc3Npb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8mIzM0OyBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IG1hcHBpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBjdHRpbWVvdXRgIHN0cnVjdHVyZSBpdHNlbGYg4oCTIHdoYXQgZmllbGRzIGFyZSByZWxldmFudCBoZXJlPyBUaW1lb3V0IHZhbHVlLCBhc3NvY2lhdGVkIGNhbGxiYWNrLCBjb250ZXh0IHBvaW50ZXIuLi4gR290dGEgY29uc2lkZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGludm9sdmVzIHRocmVhZGluZyBvciBpbnRlcnJ1cHRzLiBNZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uIOKAkyBhcmUgd2UgbGVha2luZyByZXNvdXJjZXMgYW55d2hlcmU/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIGh1Z2UuIElzIHRoZXJlIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIG9yIHRlc3QgY2FzZXMgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24/CkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gV2hhdCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gV2hhdCBpZiB0aGUgdGltZW91dCB2YWx1ZSBpcyBhYnN1cmRseSBsYXJnZSBvciBzbWFsbD8gSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmc/IENvdWxkIHRoaXMgYmUgYSBib3R0bGVuZWNrIHVuZGVyIGhlYXZ5IGxvYWQ/IEdvdHRhIGNoZWNrIGZvciB0aGF0LiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3R0aW1lb3V0X25ld190aW1lb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM9Njc9Y3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jLTkzLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM6OTQ6c3RhdGljIGludCBjdHRpbWVvdXRfbmV3X3RpbWVvdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jLTk1LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM9NTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBjdHRpbWVvdXRfY2JbSVBDVE5MX01TR19USU1FT1VUX01BWF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYy01MzEtXHRbSVBDVE5MX01TR19USU1FT1VUX05FV10gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYzo1MzI6XHRcdC5jYWxsXHRcdD0gY3R0aW1lb3V0X25ld190aW1lb3V0LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMtNTMzLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzE5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgdG9zX210X2NoZWNrYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHRvc19tdF9jaGVja2AuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBwdXJwb3NlIGlzLiBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJltIGd1ZXNzaW5nIHRoaXMgaXMgbGlrZWx5IGEgbWVjaGFuaXNtIGZvciBjaGVja2luZyBzb21lIGtpbmQgb2YgdGVybXMgb2Ygc2VydmljZSByZWxhdGVkIHRvIG1hY2hpbmUgdHJhbnNsYXRpb24uIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgaXQgcHJvYmFibHkgZmxhZ3MgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY29udGVudCBiZWZvcmUgcHJvY2Vzc2luZy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIC0gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgYmxhY2tsaXN0LCBtYXliZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbi1iYXNlZCBmaWx0ZXIsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBhIG1vZGVsIHRyYWluZWQgb24gZmxhZ2dlZCB0ZXh0PyBJcyB0aGlzIGEgc3RhbmRhbG9uZSBtb2R1bGUsIG9yIGludGVncmF0ZWQgaW50byBhIGxhcmdlciBwaXBlbGluZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc2lnbnMgb2Ygc2Vuc2l0aXZpdHkgdG93YXJkcyBQSUksIGhhdGUgc3BlZWNoLCBvciBtYXliZSBldmVuIGNvcHlyaWdodCBpbmZyaW5nZW1lbnRzLCBhbGwgY29tbW9uIGNvbmNlcm5zIHdoZW4gZGVhbGluZyB3aXRoIE1ULiBBIGNydWNpYWwgYXNwZWN0IHdpbGwgYmUgdW5kZXJzdGFuZGluZyB0aGUgdHJhZGUtb2ZmcyBpbXBsZW1lbnRlZC4gSG93IHN0cmljdCBpcyB0aGlzIGNoZWNrPyBEb2VzIGl0IGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLCB3aGljaCBjb3VsZCBodXJ0IHBlcmZvcm1hbmNlLCBvciBpcyBpdCBtb3JlIGxlbmllbnQsIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIHJpc2s/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgZmxhZ2dpbmcgdGhlIGFwcHJvcHJpYXRlIHRleHRzLiBGaW5hbGx5LCBob3cgYXJlIHRoZSBsb2dzIGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgYWxlcnRzIGFzc29jaWF0ZWQgd2l0aCBoaWdoIHZvbHVtZXMgb2YgZmxhZ2dlZCBjb250ZW50PyBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dG9zX210X2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9kc2NwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9kc2NwLmM9NDI9c3RhdGljIGludCBkc2NwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jLTUxLVxubmV0L25ldGZpbHRlci94dF9kc2NwLmM6NTI6c3RhdGljIGludCB0b3NfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy01My17XG4tLVxubmV0L25ldGZpbHRlci94dF9kc2NwLmM9NzQ9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBkc2NwX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtOTQtXHRcdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYzo5NTpcdFx0LmNoZWNrZW50cnlcdD0gdG9zX210X2NoZWNrLFxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtOTYtXHRcdC5tYXRjaFx0XHQ9IHRvc19tdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy0xMDMtXHRcdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjYsXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYzoxMDQ6XHRcdC5jaGVja2VudHJ5XHQ9IHRvc19tdF9jaGVjayxcbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jLTEwNS1cdFx0Lm1hdGNoXHRcdD0gdG9zX210LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk2NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb3RvY29scyBhbmQgVENQIHBlcmZvcm1hbmNlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFRDUCBNU1MgYW5kIE1UVSBWYWxpZGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gJiMzNDtDaGVjayBgdGNwbXNzX210X2NoZWNrYCYjMzQ7LiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgSSYjMzk7bSBmb2N1c2luZyBvbiB2YWxpZGF0aW5nIHRoZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSB3aXRoaW4gYSBUQ1AgY29ubmVjdGlvbiwgbGlrZWx5IGluIHJlbGF0aW9uIHRvIHRoZSBNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0IChNVFUpIG9mIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgcGF0aC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gZW5zdXJpbmcgZWZmaWNpZW50IGFuZCByZWxpYWJsZSBkYXRhIHRyYW5zbWlzc2lvbi4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgY2hlY2sgaXRzZWxmIGlzIHN0cnVjdHVyZWQuIElzIGl0IGEgdmFsaWRhdGlvbiBvZiBuZWdvdGlhdGVkIE1TUyB2YWx1ZXMgYWdhaW5zdCB0aGUgcGF0aCBNVFU/IElzIGl0IHZlcmlmeWluZyB0aGUgTVNTIHZhbHVlcyBvZmZlcmVkIGluIHRoZSBTWU4gcGFja2V0cz8gSXMgaXQgaGFuZGxpbmcgUE1UVUQgKFBhdGggTVRVIERpc2NvdmVyeSkgY29ycmVjdGx5PyBUaGUgY29udGV4dCBpcyB3aGF0IG1hdHRlcnMgaGVyZS4gSSB3aWxsIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXBwcm9hY2ggdGFrZW4gdG8gZGlzY292ZXIgYW5kIHZhbGlkYXRlIFRDUCBNU1MuIFRoaXMgbWF0dGVycyBzaW5jZSBmcmFnbWVudGluZyBwYWNrZXRzIGlzIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgb3ZlcmhlYWQsIHdoaWNoIGNhbiBzZXZlcmVseSBpbXBhY3QgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgb24gcGF0aHMgd2l0aCB2YXJ5aW5nIE1UVSBzaXplcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2YWxpZGF0aW9uIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcG1zc19tdF9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF90Y3Btc3MuYz0yNT10Y3Btc3NfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtODAtXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jOjgxOnN0YXRpYyBpbnQgdGNwbXNzX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYy04Mi17XG4tLVxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYz05Mz1zdGF0aWMgc3RydWN0IHh0X21hdGNoIHRjcG1zc19tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtOTYtXHRcdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jOjk3Olx0XHQuY2hlY2tlbnRyeVx0PSB0Y3Btc3NfbXRfY2hlY2ssXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jLTk4LVx0XHQubWF0Y2hcdFx0PSB0Y3Btc3NfbXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTEyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnRlcm5hbCBBdWRpdCAtIENoZWNraW5nIGBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXJgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyYCBydWxlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgb3ZlcmFsbCBOQVQgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RyYXRlZ3k/IERvZXMgaXQgYmVoYXZlIGFzIGV4cGVjdGVkLCBjb25zaWRlcmluZyB0aGUgbnVhbmNlcyBvZiBzdGF0ZWZ1bCBmaXJld2FsbHMgYW5kIE5BVCBjb25maWd1cmF0aW9ucyBJJiMzOTt2ZSBzZWVuIGluIHRoZSBwYXN0PyBNeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlOiB3aGF0JiMzOTtzIHRoZSB1c2UtY2FzZSBmb3IgdGhpcyBydWxlPyBJcyB0aGVyZSBhIHBlcmZvcm1hbmNlIGltcGFjdCB0byB1c2luZyB0aGlzIHBhcnRpY3VsYXIgcnVsZT8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aWVkIHRvIGl0PwoKVGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTI4NT1zdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzMDAtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTMwMTpzdGF0aWMgdm9pZCBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqdGhpcylcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMwMi17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzExPXN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzNTktXHRcdGV4cC1cdTAwM2VkaXIgPSAhZGlyO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzYwOlx0XHRleHAtXHUwMDNlZXhwZWN0Zm4gPSBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXI7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzNjEtXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzk3PXN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIG5mdF9jdF9uYXQgX19yZWFkX21vc3RseSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM5OC1cdC5uYW1lID0gXCYjMzQ7bmZ0X2N0LWZvbGxvdy1tYXN0ZXJcJiMzNDssXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzOTk6XHQuZXhwZWN0Zm4gPSBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXIsXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MDAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYxMTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBlYnRhYmxlcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyByZXBsYWNlbWVudCBmdW5jdGlvbmFsaXR5IHdvcmtzIHdpdGhpbiB0aGUgZWJ0YWJsZXMgZnJhbWV3b3JrLiBUaGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBpcyB0aGUgYGRvX3JlcGxhY2VgIGZ1bmN0aW9uIGluIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYC4gSXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSByZXBsYWNlbWVudCBsb2dpYyB3b3VsZCByZXNpZGUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGl0LCB3aGF0IGNoZWNrcyB0aGV5JiMzOTtyZSBwZXJmb3JtaW5nLCBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9uIG9mIHRoZSB0YWJsZSBlbnRyaWVzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGdpdmVuIHRoaXMgaXMgcGFja2V0IGZpbHRlcmluZy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fcmVwbGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz04NzA9c3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtOTIxLVx0aWYgKHVkY19jbnQpIHtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6OTIyOlx0XHQvKiB0aGlzIHdpbGwgZ2V0IGZyZWUmIzM5O2QgaW4gZG9fcmVwbGFjZSgpL2VidF9yZWdpc3Rlcl90YWJsZSgpXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTkyMy1cdFx0ICogaWYgYW4gZXJyb3Igb2NjdXJzXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz05OTA9c3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEwLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMDExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTItXHRcdFx0ICAgICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTExMC0vKiByZXBsYWNlIHRoZSB0YWJsZSAqL1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMTExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExMTIte1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1NC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTE1NTpcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXHUwMDI2dG1wLCBuZXdpbmZvKTtcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1Ni1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTIyNTE9c3RhdGljIGludCBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjI4NS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjI4NjpzdGF0aWMgaW50IGNvbXBhdF9kb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjI4Ny17XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjk2LVx0XHQvKiB0cnkgcmVhbCBoYW5kbGVyIGluIGNhc2UgdXNlcmxhbmQgc3VwcGxpZWQgbmVlZGVkIHBhZGRpbmcgKi9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjI5NzpcdFx0aWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBkb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pID09IDApXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyOTgtXHRcdFx0cmV0ID0gMDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzNzMtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjIzNzQ6XHRyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsIFx1MDAyNnRtcCwgbmV3aW5mbyk7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzNzUtXHRpZiAocmV0ID09IDApXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTQ3PXN0YXRpYyBpbnQgZG9fZWJ0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU2MS1cdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1NjI6XHRcdFx0cmV0ID0gY29tcGF0X2RvX3JlcGxhY2UobmV0LCBhcmcsIGxlbik7XG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjMtXHRcdGVsc2Vcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU2NC0jZW5kaWZcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU2NTpcdFx0XHRyZXQgPSBkb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pO1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTY2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyMzgKCQkJCQkJCW91dHB1dDogNDg5CgkJCQkJCQl0aG91Z2h0czogMTE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgYW5kIGVidGFibGVzIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmRhbWVudGFsIGNoYW5nZXMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBOQVQgaG9va3MsIGFuZCBlYnRhYmxlcy4gVGhpcyBpcyBhIGZlcnRpbGUgZ3JvdW5kIGZvciBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMgdG8gZm9jdXMgb24gYSBzZXQgb2YgY29yZSBmdW5jdGlvbnMgd2hpY2ggYXJlIGxpa2VseSB0byBiZSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gVGhlc2UgYXJlOiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2N0X2hlbHBlcl9pbml0YCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZm5sX2N0aGVscGVyX25ld2AsIGBjdHRpbWVvdXRfbmV3X3RpbWVvdXRgLCBgdG9zX210X2NoZWNrYCwgYHRjcG1zc19tdF9jaGVja2AsIGBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXJgLCBgZG9fcmVwbGFjZWAsIGFuZCBgY29tcGF0X2NvcHlfZWJ0X3JlcGxhY2VfZnJvbV91c2VyYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgY29tcGF0X2NvcHlfZWJ0X3JlcGxhY2VfZnJvbV91c2VyYDsgaXQgYXBwZWFycyB0byBiZSBjYWxsZWQgZnJvbSBgY29tcGF0X2RvX3JlcGxhY2VgLgoKVGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhcmU6IG1vZGlmaWNhdGlvbnMgdG8gaG93IGNvbm50cmFjayBoZWxwZXJzIGFyZSBoYW5kbGVkIChlc3BlY2lhbGx5IHJlbW92aW5nIHBvcnQtc3BlY2lmaWMgZGVmYXVsdHMpLCBhZGRpdGlvbnMgb2YgYSBuZXcgYE5GX0hPT0tfT1BfTkFUYCB0eXBlLCBjb3JyZWN0aW9ucyB0byBOQVQgaG9vayBkdW1waW5nLCBhIE5BVCBmb2xsb3cgbWFzdGVyIGV4cGVjdGZuIGZvciBgbmZ0X2N0YCwgYW5kIGEgY3JpdGljYWwgZml4IGZvciBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGVidGFibGVzJiMzOTsgYGRvX3JlcGxhY2VgLiBBZGRpdGlvbmFsbHksIG5ldyB2YWxpZGF0aW9uIGNoZWNrcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgZm9yIGB4dF9kc2NwYCBhbmQgYHh0X3RjcG1zc2AgbWF0Y2hlcy4gVGhlc2UgYWxsIHJlcHJlc2VudCBzaWduaWZpY2FudCBjb3JlIGtlcm5lbCBjaGFuZ2VzIGFuZCBuZXRmaWx0ZXIgbG9naWMsIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBjb25maWdzIGVuYWJsZWQuIFdlJiMzOTtyZSBsb29raW5nIGF0OgoqICAgYE5GX0NPTk5UUkFDS2AKKiAgIGBORl9OQVRgCiogICBgQlJJREdFX05GX0VCVEFCTEVTYAoqICAgYE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tgCiogICBgTkZfQ1RfTkVUTElOS19IRUxQRVJgCiogICBgTkZfQ1RfTkVUTElOS19USU1FT1VUYAoqICAgYE5GVF9DVGAKKiAgIGBORVRGSUxURVJfWFRfTUFUQ0hfRFNDUGAKKiAgIGBORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTYAoqICAgYE5FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRgCiogICBgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUGAKKiAgIGBORl9DT05OVFJBQ0tfQU1BTkRBYAoqICAgYE5GX0NPTk5UUkFDS19GVFBgCiogICBgTkZfQ09OTlRSQUNLX0gzMjNgCiogICBgTkZfQ09OTlRSQUNLX0lSQ2AKKiAgIGBORl9DT05OVFJBQ0tfTkVUQklPU19OU2AKKiAgIGBORl9DT05OVFJBQ0tfU05NUGAKKiAgIGBORl9DT05OVFJBQ0tfUFBUUGAKKiAgIGBORl9DT05OVFJBQ0tfU0FORWAKKiAgIGBORl9DT05OVFJBQ0tfU0lQYAoqICAgYE5GX0NPTk5UUkFDS19URlRQYAoqICAgYE5GX05BVF9TTk1QX0JBU0lDYAoKSSYjMzk7bSB2ZXJpZnlpbmcgYGRvX3JlcGxhY2VgIGluIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYC4gSXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24uCgpSaWdodCwgSSBhbSByZWFkeSB0byBzdWJtaXQgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9OQVQmIzM0OywKICAgICYjMzQ7QlJJREdFX05GX0VCVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0hPT0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19USU1FT1VUJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfQU1BTkRBJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19GVFAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0lSQyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfTkVUQklPU19OUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU05NUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfUFBUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0FORSYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19URlRQJiMzNDssCiAgICAmIzM0O05GX05BVF9TTk1QX0JBU0lDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O25mX2N0X2hlbHBlcl9pbml0JiMzNDssCiAgICAmIzM0O19fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX25ldyYjMzQ7LAogICAgJiMzNDtjdHRpbWVvdXRfbmV3X3RpbWVvdXQmIzM0OywKICAgICYjMzQ7dG9zX210X2NoZWNrJiMzNDssCiAgICAmIzM0O3RjcG1zc19tdF9jaGVjayYjMzQ7LAogICAgJiMzNDtuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXImIzM0OywKICAgICYjMzQ7ZG9fcmVwbGFjZSYjMzQ7LAogICAgJiMzNDtjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBOQVQgaG9va3MsIGFuZCBlYnRhYmxlcy4gSXQgY2hhbmdlcyBob3cgY29ubnRyYWNrIGhlbHBlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIGxvb2tlZCB1cCAocmVtb3ZpbmcgcG9ydC1zcGVjaWZpYyBkZWZhdWx0cyksIGFkZHMgYSBuZXcgTkZfSE9PS19PUF9OQVQgdHlwZSBhbmQgZml4ZXMgTkFUIGhvb2sgZHVtcGluZywgYWRkcyBhIE5BVCBmb2xsb3cgbWFzdGVyIGV4cGVjdGZuIGZvciBuZnRfY3QsIGFuZCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGVidGFibGVzIGRvX3JlcGxhY2UuIEl0IGFsc28gYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgeHRfZHNjcCBhbmQgeHRfdGNwbXNzIG1hdGNoZXMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIG5ldGZpbHRlciBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7LAogICAgJiMzNDtCUklER0VfTkZfRUJUQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfSE9PSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LX0hFTFBFUiYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LX1RJTUVPVVQmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0ZUUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSVJDJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19ORVRCSU9TX05TJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TTk1QJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19QUFRQJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TQU5FJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1RGVFAmIzM0OywKICAgICYjMzQ7TkZfTkFUX1NOTVBfQkFTSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bmZfY3RfaGVscGVyX2luaXQmIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfbmV3JiMzNDssCiAgICAmIzM0O2N0dGltZW91dF9uZXdfdGltZW91dCYjMzQ7LAogICAgJiMzNDt0b3NfbXRfY2hlY2smIzM0OywKICAgICYjMzQ7dGNwbXNzX210X2NoZWNrJiMzNDssCiAgICAmIzM0O25mdF9jdF9uYXRfZm9sbG93X21hc3RlciYjMzQ7LAogICAgJiMzNDtkb19yZXBsYWNlJiMzNDssCiAgICAmIzM0O2NvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIE5BVCBob29rcywgYW5kIGVidGFibGVzLiBJdCBjaGFuZ2VzIGhvdyBjb25udHJhY2sgaGVscGVycyBhcmUgcmVnaXN0ZXJlZCBhbmQgbG9va2VkIHVwIChyZW1vdmluZyBwb3J0LXNwZWNpZmljIGRlZmF1bHRzKSwgYWRkcyBhIG5ldyBORl9IT09LX09QX05BVCB0eXBlIGFuZCBmaXhlcyBOQVQgaG9vayBkdW1waW5nLCBhZGRzIGEgTkFUIGZvbGxvdyBtYXN0ZXIgZXhwZWN0Zm4gZm9yIG5mdF9jdCwgYW5kIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gZWJ0YWJsZXMgZG9fcmVwbGFjZS4gSXQgYWxzbyBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIGZvciB4dF9kc2NwIGFuZCB4dF90Y3Btc3MgbWF0Y2hlcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgbmV0ZmlsdGVyIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjA6MDQuNDgyNTEwMjg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMjU0ODcwMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJCUklER0VfTkZfRUJUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX1RJTUVPVVRcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0RTQ1BcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1NcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19BTUFOREFcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSVJDXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTkVUQklPU19OU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NOTVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19QUFRQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0FORVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NJUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1RGVFBcIixcbiAgICBcIk5GX05BVF9TTk1QX0JBU0lDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfaW5pdFwiLFxuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRcIixcbiAgICBcIm5mbmxfaG9va19kdW1wX25hdFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIixcbiAgICBcImN0dGltZW91dF9uZXdfdGltZW91dFwiLFxuICAgIFwidG9zX210X2NoZWNrXCIsXG4gICAgXCJ0Y3Btc3NfbXRfY2hlY2tcIixcbiAgICBcIm5mdF9jdF9uYXRfZm9sbG93X21hc3RlclwiLFxuICAgIFwiZG9fcmVwbGFjZVwiLFxuICAgIFwiY29tcGF0X2NvcHlfZWJ0X3JlcGxhY2VfZnJvbV91c2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBOQVQgaG9va3MsIGFuZCBlYnRhYmxlcy4gSXQgY2hhbmdlcyBob3cgY29ubnRyYWNrIGhlbHBlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIGxvb2tlZCB1cCAocmVtb3ZpbmcgcG9ydC1zcGVjaWZpYyBkZWZhdWx0cyksIGFkZHMgYSBuZXcgTkZfSE9PS19PUF9OQVQgdHlwZSBhbmQgZml4ZXMgTkFUIGhvb2sgZHVtcGluZywgYWRkcyBhIE5BVCBmb2xsb3cgbWFzdGVyIGV4cGVjdGZuIGZvciBuZnRfY3QsIGFuZCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGVidGFibGVzIGRvX3JlcGxhY2UuIEl0IGFsc28gYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgeHRfZHNjcCBhbmQgeHRfdGNwbXNzIG1hdGNoZXMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIG5ldGZpbHRlciBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjA6MDQuNDgyNTE0NzE5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODAyMjYwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzY2UxMjZiMjRmM2NiYzBmODQ5OGNmN2JmZjg5MDVhOGQ2ZjNkMDE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTU6MjA6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmhcXG5pbmRleCBlZmJiZmE3NzBkNjYxNy4uZTk5YWZjMTQxNGNkMzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmhcXG5AQCAtOTMsNiArOTMsNyBAQCBlbnVtIG5mX2hvb2tfb3BzX3R5cGUge1xcbiBcXHRORl9IT09LX09QX05GX1RBQkxFUyxcXG4gXFx0TkZfSE9PS19PUF9CUEYsXFxuIFxcdE5GX0hPT0tfT1BfTkZUX0ZULFxcbitcXHRORl9IT09LX09QX05BVCxcXG4gfTtcXG4gXFxuIHN0cnVjdCBuZl9ob29rX29wcyB7XFxuQEAgLTE0MCw2ICsxNDEsMTIgQEAgc3RydWN0IG5mX2hvb2tfZW50cmllcyB7XFxuIFxcdCAqL1xcbiB9O1xcbiBcXG4rc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2IHtcXG4rXFx0c3RydWN0IG5mX2hvb2tfZW50cmllcyBfX3JjdSAqZW50cmllcztcXG4rXFxuK1xcdHN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDtcXG4rfTtcXG4rXFxuICNpZmRlZiBDT05GSUdfTkVURklMVEVSXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2hvb2tfb3BzICoqbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oXFxuaW5kZXggODEyODZjNDk5MzI1MjEuLmIxNWYzNzYwNGNkZTRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oXFxuQEAgLTksOCArOSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgUkFTX1BPUlQgMTcxOVxcbi0jZGVmaW5lIFE5MzFfUE9SVCAxNzIwXFxuICNkZWZpbmUgSDMyM19SVFBfQ0hBTk5FTF9NQVggNFxcdC8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqL1xcbiBcXG4gLyogVGhpcyBzdHJ1Y3R1cmUgZXhpc3RzIG9ubHkgb25jZSBwZXIgbWFzdGVyICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXFxuaW5kZXggYzNiZGI0MzcwOTM4NGQuLmMwYjMwNWNlN2MzYzZiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oXFxuQEAgLTUwLDggKzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHtcXG4gXFx0X19iZTE2IHBhY19jYWxsX2lkO1xcdFxcdFxcdC8qIE5BVCdlZCBQQUMgY2FsbCBpZCAqL1xcbiB9O1xcbiBcXG4tI2RlZmluZSBQUFRQX0NPTlRST0xfUE9SVFxcdDE3MjNcXG4tXFxuICNkZWZpbmUgUFBUUF9QQUNLRVRfQ09OVFJPTFxcdDFcXG4gI2RlZmluZSBQUFRQX1BBQ0tFVF9NR01UXFx0MlxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcXG5pbmRleCA0NmM3YWNkMWI0YTcwZi4uODUwMTAzNWQ3MzM1NTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmhcXG5AQCAtMyw4ICszLDYgQEBcXG4gI2RlZmluZSBfTkZfQ09OTlRSQUNLX1NBTkVfSFxcbiAvKiBTQU5FIHRyYWNraW5nLiAqL1xcbiBcXG4tI2RlZmluZSBTQU5FX1BPUlRcXHQ2NTY2XFxuLVxcbiBlbnVtIHNhbmVfc3RhdGUge1xcbiBcXHRTQU5FX1NUQVRFX05PUk1BTCxcXG4gXFx0U0FORV9TVEFURV9TVEFSVF9SRVFVRVNURUQsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXFxuaW5kZXggOTBiMzM0YmJjZTNjZTYuLmUzZDE3MzljNTU3ZDE1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oXFxuQEAgLTIsOCArMiw2IEBAXFxuICNpZm5kZWYgX05GX0NPTk5UUkFDS19URlRQX0hcXG4gI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RGVFBfSFxcbiBcXG4tI2RlZmluZSBURlRQX1BPUlQgNjlcXG4tXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5pbmRleCA0OTI5N2ZlYzQ0OGE4Mi4uZWQyZTliYzFiYjRlOTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG5AQCAtMjEyMyw3ICsyMTIzLDcgQEAgdm9pZCBpcF92c191cGRhdGVfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0XFx0ICAgIGludCBvdXRpbik7XFxuIGludCBpcF92c19jb25maXJtX2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gdm9pZCBpcF92c19uZmN0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdV9pbnQ4X3QgcHJvdG8sXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHU4IHByb3RvLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3QgX19iZTE2IHBvcnQsIGludCBmcm9tX3JzKTtcXG4gdm9pZCBpcF92c19jb25uX2Ryb3BfY29ubnRyYWNrKHN0cnVjdCBpcF92c19jb25uICpjcCk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbmluZGV4IGM3NjFjZDgxNThiMjUzLi5iYzU0MjdkMjM5ZjRjMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbkBAIC00MywxMSArNDMsMTAgQEAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIge1xcbiBcXG4gXFx0cmVmY291bnRfdCBjdF9yZWZjbnQ7XFxuIFxcbi1cXHQvKiBUdXBsZSBvZiB0aGluZ3Mgd2Ugd2lsbCBoZWxwIChjb21wYXJlZCBhZ2FpbnN0IHNlcnZlciByZXNwb25zZSkgKi9cXG4tXFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcXG4rXFx0dTggbmZwcm90bztcXHQvKiBORlBST1RPXyosIGNhbiBiZSBORlBST1RPX1VOU1BFQyAqL1xcbitcXHR1OCBsNHByb3RvO1xcdC8qIElQUFJPVE9fVURQL1RDUCAqL1xcbiBcXG4tXFx0LyogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRhdGEgcGFzc2VzOyByZXR1cm4gdmVyZGljdCwgb3IgLTEgdG9cXG4tICAgICAgICAgICBpbnZhbGlkYXRlLiAqL1xcbitcXHQvKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gZGF0YSBwYXNzZXM7IHJldHVybiB2ZXJkaWN0ICovXFxuIFxcdGludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0ICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pO1xcbkBAIC05NCw4ICs5Myw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcik7XFxuIFxcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLVxcdFxcdCAgICAgICB1MTYgbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcXG4tXFx0XFx0ICAgICAgIHUxNiBkZWZhdWx0X3BvcnQsIHUxNiBzcGVjX3BvcnQsIHUzMiBpZCxcXG4rXFx0XFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsXFxuIFxcdFxcdCAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCxcXG4gXFx0XFx0ICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbmluZGV4IGYyMGMwMzllNDRjOGQ3Li4wNDJkMzEyNzg3MTNkZiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXFxuKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1xcbkBAIC0zOSw2ICszOSw4IEBAXFxuICNkZWZpbmUgQ09VTlRFUl9PRkZTRVQobikgKFNNUF9BTElHTihuICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKVxcbiAjZGVmaW5lIENPVU5URVJfQkFTRShjLCBuLCBjcHUpICgoc3RydWN0IGVidF9jb3VudGVyICopKCgoY2hhciAqKWMpICsgXFxcXFxcbiBcXHRcXHRcXHRcXHQgQ09VTlRFUl9PRkZTRVQobikgKiBjcHUpKVxcbisjZGVmaW5lIE1BWF9FQlRfRU5UUklFUyAoKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC8gXFxcXFxcbitcXHRcXHRcXHQgTlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcXG4gXFxuIHN0cnVjdCBlYnRfcGVybmV0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCB0YWJsZXM7XFxuQEAgLTExMjQsMTAgKzExMjYsOSBAQCBzdGF0aWMgaW50IGRvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qIG92ZXJmbG93IGNoZWNrICovXFxuLVxcdGlmICh0bXAubmVudHJpZXMgXFx1MDAzZT0gKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC9cXG4tXFx0XFx0XFx0TlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcXG4rXFx0aWYgKHRtcC5uZW50cmllcyBcXHUwMDNlPSBNQVhfRUJUX0VOVFJJRVMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRpZiAodG1wLm51bV9jb3VudGVycyBcXHUwMDNlPSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpXFxuK1xcdGlmICh0bXAubnVtX2NvdW50ZXJzIFxcdTAwM2U9IE1BWF9FQlRfRU5UUklFUylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHR0bXAubmFtZVtzaXplb2YodG1wLm5hbWUpIC0gMV0gPSAwO1xcbkBAIC0yMjY1LDEwICsyMjY2LDkgQEAgc3RhdGljIGludCBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLFxcbiBcXHRpZiAodG1wLmVudHJpZXNfc2l6ZSA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlmICh0bXAubmVudHJpZXMgXFx1MDAzZT0gKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC9cXG4tXFx0XFx0XFx0TlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcXG4rXFx0aWYgKHRtcC5uZW50cmllcyBcXHUwMDNlPSBNQVhfRUJUX0VOVFJJRVMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRpZiAodG1wLm51bV9jb3VudGVycyBcXHUwMDNlPSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpXFxuK1xcdGlmICh0bXAubnVtX2NvdW50ZXJzIFxcdTAwM2U9IE1BWF9FQlRfRU5UUklFUylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRtZW1jcHkocmVwbCwgXFx1MDAyNnRtcCwgb2Zmc2V0b2Yoc3RydWN0IGVidF9yZXBsYWNlLCBob29rX2VudHJ5KSk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jXFxuaW5kZXggMGVkZTEzOGRmZDI5ZTcuLmU1NDBiODZiZDE1YjZiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWNfbWFpbi5jXFxuQEAgLTIxMyw3ICsyMTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfc25tcF9iYXNpY19pbml0KHZvaWQpXFxuIFxcdFJDVV9JTklUX1BPSU5URVIobmZfbmF0X3NubXBfaG9vaywgaGVscCk7XFxuIFxcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c25tcF90cmFwX2hlbHBlciwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdCAgXFxcInNubXBfdHJhcFxcXCIsIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCwgU05NUF9UUkFQX1BPUlQsXFxuK1xcdFxcdFxcdCAgXFxcInNubXBfdHJhcFxcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnNubXBfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4gXFx0ZXJyID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2c25tcF90cmFwX2hlbHBlciwgXFx1MDAyNnNubXBfdHJhcF9oZWxwZXJfcHRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmNcXG5pbmRleCA4MTk3NGY2OWU1YmI0ZS4uMzQ3MTg1ZmQwYzhjNmYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmNcXG5AQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX25mY3RfZXhwZWN0X2NhbGxiYWNrKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gICogVXNlIHBvcnQgMCB0byBleHBlY3QgY29ubmVjdGlvbiBmcm9tIGFueSBwb3J0LlxcbiAgKi9cXG4gdm9pZCBpcF92c19uZmN0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgdV9pbnQ4X3QgcHJvdG8sXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHU4IHByb3RvLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3QgX19iZTE2IHBvcnQsIGludCBmcm9tX3JzKVxcbiB7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG5pbmRleCBkZGFmYmRmYzk2ZGMzNS4uMDZkNmVjMTJjODZkZmEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xcbkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGU7XFxuIFxcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xcbiBcXHRjaGFyIHBidWZbc2l6ZW9mKFxcXCI2NTUzNVxcXCIpXSwgKnRtcDtcXG4tXFx0dV9pbnQxNl90IGxlbjtcXG4rXFx0dTE2IGxlbjtcXG4gXFx0X19iZTE2IHBvcnQ7XFxuIFxcdGludCByZXQgPSBORl9BQ0NFUFQ7XFxuIFxcdG5mX25hdF9hbWFuZGFfaG9va19mbiAqbmZfbmF0X2FtYW5kYTtcXG5AQCAtMTk5LDEwICsxOTksMTAgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpXFxuIFxcdH1cXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZhbWFuZGFfaGVscGVyWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcXG4rXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4gXFx0XFx0XFx0ICBcXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZhbWFuZGFfaGVscGVyWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIDEwMDgwLCAxMDA4MCwgMTAwODAsXFxuK1xcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNmFtYW5kYV9leHBfcG9saWN5LCAwLCBhbWFuZGFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4gXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoYW1hbmRhX2hlbHBlcixcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xcbmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXFxuQEAgLTY2LDggKzY2LDYgQEAgaW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRleHAtXFx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xcbiBcXG4gXFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXFx1MDAzZWhlbHBlcik7XFxuLVxcdGlmIChoZWxwZXIpXFxuLVxcdFxcdGV4cC1cXHUwMDNldHVwbGUuc3JjLnUudWRwLnBvcnQgPSBoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy51LnVkcC5wb3J0O1xcbiBcXG4gXFx0ZXhwLVxcdTAwM2VtYXNrLnNyYy51My5pcCAgICAgICA9IG1hc2s7XFxuIFxcdGV4cC1cXHUwMDNlbWFzay5zcmMudS51ZHAucG9ydCAgPSBodG9ucygweEZGRkYpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXFxuaW5kZXggMDg0N2Y4NDU2MTNkNmEuLmYzOTQ0NTk4YzE3MjZmIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcXG5AQCAtMzUsMTEgKzM1LDYgQEAgTU9EVUxFX0FMSUFTKFxcXCJpcF9jb25udHJhY2tfZnRwXFxcIik7XFxuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfZnRwX2xvY2spO1xcbiBcXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFxcdTAwMjZwb3J0c19jLCAwNDAwKTtcXG4tXFxuIHN0YXRpYyBib29sIGxvb3NlO1xcbiBtb2R1bGVfcGFyYW0obG9vc2UsIGJvb2wsIDA2MDApO1xcbiBcXG5AQCAtNTYwLDggKzU1NSw4IEBAIHN0YXRpYyBpbnQgbmZfY3RfZnRwX2Zyb21fbmxhdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHBbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHAgX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpmdHBfcHRyIF9fcmVhZF9tb3N0bHk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGZ0cF9leHBfcG9saWN5ID0ge1xcbiBcXHQubWF4X2V4cGVjdGVkXFx0PSAxLFxcbkBAIC01NzAsMzIgKzU2NSwyMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGZ0cF9leHBfcG9saWN5ID0ge1xcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19mdHBfZmluaSh2b2lkKVxcbiB7XFxuLVxcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoZnRwX3B0ciwgcG9ydHNfYyAqIDIpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoZnRwX3B0cik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19mdHBfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyKSk7XFxuIFxcbi1cXHRpZiAocG9ydHNfYyA9PSAwKVxcbi1cXHRcXHRwb3J0c1twb3J0c19jKytdID0gRlRQX1BPUlQ7XFxuLVxcbiBcXHQvKiBGSVhNRSBzaG91bGQgYmUgY29uZmlndXJhYmxlIHdoZXRoZXIgSVB2NCBhbmQgSVB2NiBGVFAgY29ubmVjdGlvbnNcXG4gXFx0XFx0IGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwb3J0c19jOyBpKyspIHtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmZ0cFsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxcbi1cXHRcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCBGVFBfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcXG4tXFx0XFx0XFx0XFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNmZ0cFsyICogaSArIDFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxcbi1cXHRcXHRcXHRcXHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xcbi1cXHR9XFxuK1xcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcXG4rXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2ZnRwX2V4cF9wb2xpY3ksIDAsIGhlbHAsXFxuK1xcdFxcdFxcdCAgbmZfY3RfZnRwX2Zyb21fbmxhdHRyLCBUSElTX01PRFVMRSk7XFxuIFxcbi1cXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihmdHAsIHBvcnRzX2MgKiAyLCBmdHBfcHRyKTtcXG4rXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2ZnRwLCBcXHUwMDI2ZnRwX3B0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGhlbHBlcnNcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXFxuaW5kZXggMjQ5MzFlMzc5OTg1YmIuLjRjYjE2NjViYmEwMjE0IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcXG5AQCAtNjcxLDcgKzY3MSw3IEBAIHN0YXRpYyBpbnQgZXhwZWN0X2gyNDUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBzdGF0aWMgaW50IGNhbGxmb3J3YXJkX2RvX2ZpbHRlcihzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNyYyxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqZHN0LFxcbi1cXHRcXHRcXHRcXHQgdV9pbnQ4X3QgZmFtaWx5KVxcbitcXHRcXHRcXHRcXHQgdTggZmFtaWx5KVxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG5AQCAtMTcxMywxOSArMTcxMywxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBoMzIzX2hlbHBlcl9pbml0KHZvaWQpXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIFxcXCJSQVNcXFwiLCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJSQVNcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdCAgXFxcIlJBU1xcXCIsIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsXFxuK1xcdFxcdFxcdCAgXFxcIlJBU1xcXCIsXFxuIFxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LCBBRl9VTlNQRUMsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHQgIFxcXCJILjI0NVxcXCIsIDAsIDAsIDAsXFxuK1xcdFxcdFxcdCAgXFxcIkguMjQ1XFxcIixcXG4gXFx0XFx0XFx0ICBcXHUwMDI2aDI0NV9leHBfcG9saWN5LCAwLCBoMjQ1X2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdCAgXFxcIlEuOTMxXFxcIiwgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCxcXG4rXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdCAgXFxcIlEuOTMxXFxcIiwgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCxcXG4rXFx0XFx0XFx0ICBcXFwiUS45MzFcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4gXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1LFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuaW5kZXggNTAwNTA5YjE3NjYzZWQuLjUwNmM1ODAzNDc2MTU1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcXG5AQCAtNDAsMTIgKzQwLDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfaGVscGVyX2NvdW50IF9fcmVhZF9tb3N0bHk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgobmZfY3RfbmF0X2hlbHBlcnNfbXV0ZXgpO1xcbiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xcbiBcXG4tLyogU3R1cGlkIGhhc2gsIGJ1dCBjb2xsaXNpb24gZnJlZSBmb3IgdGhlIGRlZmF1bHQgcmVnaXN0cmF0aW9ucyBvZiB0aGVcXG4tICogaGVscGVycyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBoZWxwZXJfaGFzaChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSlcXG4rc3RhdGljIHVuc2lnbmVkIGludCBoZWxwZXJfaGFzaChjb25zdCBjaGFyICpuYW1lLCB1OCBwcm90b251bSlcXG4ge1xcbi1cXHRyZXR1cm4gKCgodHVwbGUtXFx1MDAzZXNyYy5sM251bSBcXHUwMDNjXFx1MDAzYyA4KSB8IHR1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0pIF5cXG4tXFx0XFx0KF9fZm9yY2UgX191MTYpdHVwbGUtXFx1MDAzZXNyYy51LmFsbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XFxuK1xcdHN0YXRpYyB1MzIgc2VlZDtcXG4rXFx0dTMyIGluaXR2YWw7XFxuK1xcbitcXHRnZXRfcmFuZG9tX29uY2UoXFx1MDAyNnNlZWQsIHNpemVvZihzZWVkKSk7XFxuK1xcbitcXHRpbml0dmFsID0gc2VlZCBeIHByb3RvbnVtO1xcbitcXG4rXFx0cmV0dXJuIGpoYXNoKG5hbWUsIHN0cmxlbihuYW1lKSwgaW5pdHZhbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XFxuIH1cXG4gXFxuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpcXG5AQCAtNTQsMTggKzU4LDE4IEBAIF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZl9jdF9oZWxwZXJfaHNpemU7IGkrKykge1xcbi1cXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xcbi1cXHRcXHRcXHRpZiAoc3RyY21wKGgtXFx1MDAzZW5hbWUsIG5hbWUpKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRcXHRcXHRpZiAoaC1cXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IE5GUFJPVE9fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBoLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gbDNudW0pXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRpID0gaGVscGVyX2hhc2gobmFtZSwgcHJvdG9udW0pO1xcbiBcXG4tXFx0XFx0XFx0aWYgKGgtXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBwcm90b251bSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGg7XFxuLVxcdFxcdH1cXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIFxcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHtcXG4rXFx0XFx0aWYgKHN0cmNtcChoLVxcdTAwM2VuYW1lLCBuYW1lKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChoLVxcdTAwM2VuZnByb3RvICE9IE5GUFJPVE9fVU5TUEVDIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZW5mcHJvdG8gIT0gbDNudW0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaC1cXHUwMDNlbDRwcm90byA9PSBwcm90b251bSlcXG4rXFx0XFx0XFx0cmV0dXJuIGg7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMzYzLDkgKzM2Nyw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xcbiBcXG4gaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuIHtcXG4tXFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9tYXNrIG1hc2sgPSB7IC5zcmMudS5hbGwgPSBodG9ucygweEZGRkYpIH07XFxuLVxcdHVuc2lnbmVkIGludCBoID0gaGVscGVyX2hhc2goXFx1MDAyNm1lLVxcdTAwM2V0dXBsZSk7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpjdXI7XFxuK1xcdHVuc2lnbmVkIGludCBoO1xcbiBcXHRpbnQgcmV0ID0gMCwgaTtcXG4gXFxuIFxcdEJVR19PTihtZS1cXHUwMDNlZXhwZWN0X2NsYXNzX21heCBcXHUwMDNlPSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpO1xcbkBAIC0zODIsMjkgKzM4NSwxOCBAQCBpbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGggPSBoZWxwZXJfaGFzaChtZS1cXHUwMDNlbmFtZSwgbWUtXFx1MDAzZWw0cHJvdG8pO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpKyspIHtcXG4tXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XFxuLVxcdFxcdFxcdGlmICghc3RyY21wKGN1ci1cXHUwMDNlbmFtZSwgbWUtXFx1MDAzZW5hbWUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAoY3VyLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gPT0gTkZQUk9UT19VTlNQRUMgfHxcXG4tXFx0XFx0XFx0ICAgICBjdXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSA9PSBtZS1cXHUwMDNldHVwbGUuc3JjLmwzbnVtKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgY3VyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPT0gbWUtXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2hdLCBobm9kZSkge1xcbitcXHRcXHRpZiAoIXN0cmNtcChjdXItXFx1MDAzZW5hbWUsIG1lLVxcdTAwM2VuYW1lKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGN1ci1cXHUwMDNlbmZwcm90byA9PSBORlBST1RPX1VOU1BFQyB8fFxcbitcXHRcXHQgICAgIGN1ci1cXHUwMDNlbmZwcm90byA9PSBtZS1cXHUwMDNlbmZwcm90bykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGN1ci1cXHUwMDNlbDRwcm90byA9PSBtZS1cXHUwMDNlbDRwcm90bykge1xcbitcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGF2b2lkIHVucHJlZGljdGFibGUgYmVoYXZpb3VyIGZvciBhdXRvX2Fzc2lnbl9oZWxwZXIgKi9cXG4tXFx0aWYgKCEobWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFKSkge1xcbi1cXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFxcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHtcXG4tXFx0XFx0XFx0aWYgKG5mX2N0X3R1cGxlX3NyY19tYXNrX2NtcChcXHUwMDI2Y3VyLVxcdTAwM2V0dXBsZSwgXFx1MDAyNm1lLVxcdTAwM2V0dXBsZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWFzaykpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZtZS1cXHUwMDNlY3RfcmVmY250LCAxKTtcXG4gXFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZtZS1cXHUwMDNlaG5vZGUsIFxcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSk7XFxuIFxcdG5mX2N0X2hlbHBlcl9jb3VudCsrO1xcbkBAIC00NzksOCArNDcxLDcgQEAgdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xcbiBcXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbi1cXHRcXHQgICAgICAgdTE2IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXFxuLVxcdFxcdCAgICAgICB1MTYgZGVmYXVsdF9wb3J0LCB1MTYgc3BlY19wb3J0LCB1MzIgaWQsXFxuK1xcdFxcdCAgICAgICB1OCBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBfcG9sLFxcbiBcXHRcXHQgICAgICAgdTMyIGV4cGVjdF9jbGFzc19tYXgsXFxuIFxcdFxcdCAgICAgICBpbnQgKCpoZWxwKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG5AQCAtNDkyLDkgKzQ4Myw4IEBAIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcXG4ge1xcbiBcXHRtZW1zZXQoaGVscGVyLCAwLCBzaXplb2YoKmhlbHBlcikpO1xcbiBcXG4tXFx0aGVscGVyLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gPSBsM251bTtcXG4tXFx0aGVscGVyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0gPSBwcm90b251bTtcXG4tXFx0aGVscGVyLVxcdTAwM2V0dXBsZS5zcmMudS5hbGwgPSBodG9ucyhzcGVjX3BvcnQpO1xcbitcXHRoZWxwZXItXFx1MDAzZW5mcHJvdG8gPSBsM251bTtcXG4rXFx0aGVscGVyLVxcdTAwM2VsNHByb3RvID0gcHJvdG9udW07XFxuIFxcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVscGVyLVxcdTAwM2VoZWxwLCBoZWxwKTtcXG4gXFx0aGVscGVyLVxcdTAwM2Vmcm9tX25sYXR0ciA9IGZyb21fbmxhdHRyO1xcbkBAIC01MDIsMTAgKzQ5Miw3IEBAIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcXG4gXFx0c25wcmludGYoaGVscGVyLVxcdTAwM2VuYXRfbW9kX25hbWUsIHNpemVvZihoZWxwZXItXFx1MDAzZW5hdF9tb2RfbmFtZSksXFxuIFxcdFxcdCBORl9OQVRfSEVMUEVSX1BSRUZJWCBcXFwiJXNcXFwiLCBuYW1lKTtcXG4gXFxuLVxcdGlmIChzcGVjX3BvcnQgPT0gZGVmYXVsdF9wb3J0KVxcbi1cXHRcXHRzbnByaW50ZihoZWxwZXItXFx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXFx1MDAzZW5hbWUpLCBcXFwiJXNcXFwiLCBuYW1lKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRzbnByaW50ZihoZWxwZXItXFx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXFx1MDAzZW5hbWUpLCBcXFwiJXMtJXVcXFwiLCBuYW1lLCBpZCk7XFxuK1xcdHNucHJpbnRmKGhlbHBlci1cXHUwMDNlbmFtZSwgc2l6ZW9mKGhlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsIG5hbWUpO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRShleHBlY3RfY2xhc3NfbWF4IFxcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUykpXFxuIFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xcbmluZGV4IDE5M2FiMzRkYjc5NWY5Li40ZTZiYWZlNDE0Mzc1MiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXFxuQEAgLTIxLDkgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcXG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydHNfYztcXG4gc3RhdGljIHVuc2lnbmVkIGludCBtYXhfZGNjX2NoYW5uZWxzID0gODtcXG4gc3RhdGljIHVuc2lnbmVkIGludCBkY2NfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAwO1xcbiAvKiBUaGlzIGlzIHNsb3csIGJ1dCBpdCdzIHNpbXBsZS4gLS1SUiAqL1xcbkBAIC00Miw4ICszOSw2IEBAIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gTU9EVUxFX0FMSUFTKFxcXCJpcF9jb25udHJhY2tfaXJjXFxcIik7XFxuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XFxuIFxcbi1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgXFx1MDAyNnBvcnRzX2MsIDA0MDApO1xcbi1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcXFwicG9ydCBudW1iZXJzIG9mIElSQyBzZXJ2ZXJzXFxcIik7XFxuIG1vZHVsZV9wYXJhbShtYXhfZGNjX2NoYW5uZWxzLCB1aW50LCAwNDAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfZGNjX2NoYW5uZWxzLCBcXFwibWF4IG51bWJlciBvZiBleHBlY3RlZCBEQ0MgY2hhbm5lbHMgcGVyIFxcXCJcXG4gXFx0XFx0XFx0XFx0ICAgXFxcIklSQyBzZXNzaW9uXFxcIik7XFxuQEAgLTI1NCwxMyArMjQ5LDEzIEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyY1tNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaXJjX3B0cltNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmMgX19yZWFkX21vc3RseTtcXG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICppcmNfcHRyIF9fcmVhZF9tb3N0bHk7XFxuIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaXJjX2V4cF9wb2xpY3k7XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcXG4ge1xcbi1cXHRpbnQgaSwgcmV0O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0bmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTtcXG4gXFxuQEAgLTI4MiwxNyArMjc3LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIWlyY19idWZmZXIpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0LyogSWYgbm8gcG9ydCBnaXZlbiwgZGVmYXVsdCB0byBzdGFuZGFyZCBpcmMgcG9ydCAqL1xcbi1cXHRpZiAocG9ydHNfYyA9PSAwKVxcbi1cXHRcXHRwb3J0c1twb3J0c19jKytdID0gSVJDX1BPUlQ7XFxuK1xcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZpcmMsIEFGX0lORVQsIElQUFJPVE9fVENQLCBIRUxQRVJfTkFNRSxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXJjX2V4cF9wb2xpY3ksXFxuK1xcdFxcdFxcdCAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBvcnRzX2M7IGkrKykge1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2aXJjW2ldLCBBRl9JTkVULCBJUFBST1RPX1RDUCwgSEVMUEVSX05BTUUsXFxuLVxcdFxcdFxcdFxcdCAgSVJDX1BPUlQsIHBvcnRzW2ldLCBpLCBcXHUwMDI2aXJjX2V4cF9wb2xpY3ksXFxuLVxcdFxcdFxcdFxcdCAgMCwgaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihcXHUwMDI2aXJjWzBdLCBwb3J0c19jLCBpcmNfcHRyKTtcXG4rXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2aXJjLCBcXHUwMDI2aXJjX3B0cik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcXFxuXFxcIik7XFxuIFxcdFxcdGtmcmVlKGlyY19idWZmZXIpO1xcbkBAIC0zMDQsNyArMjkzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2lyY19maW5pKHZvaWQpXFxuIHtcXG4tXFx0bmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihpcmNfcHRyLCBwb3J0c19jKTtcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGlyY19wdHIpO1xcbiBcXHRrZnJlZShpcmNfYnVmZmVyKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXFxuaW5kZXggODlkMWNmN2Q2NTEyZTcuLmNhYTJiMTAxZmE5ZTVlIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgSEVMUEVSX05BTUVcXHRcXFwibmV0Ymlvcy1uc1xcXCJcXG4tI2RlZmluZSBOTUJEX1BPUlRcXHQxMzdcXG4gXFxuIE1PRFVMRV9BVVRIT1IoXFxcIlBhdHJpY2sgTWNIYXJkeSBcXHUwMDNja2FiZXJAdHJhc2gubmV0XFx1MDAzZVxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclxcXCIpO1xcbkBAIC01NCw3ICs1Myw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcXG4gXFx0ZXhwX3BvbGljeS50aW1lb3V0ID0gdGltZW91dDtcXG4gXFxuIFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSxcXG4tXFx0XFx0XFx0ICBOTUJEX1BPUlQsIE5NQkRfUE9SVCwgTk1CRF9QT1JULFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZleHBfcG9saWN5LCAwLCBuZXRiaW9zX25zX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFxuIFxcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZoZWxwZXIsIFxcdTAwMjZoZWxwZXJfcHRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xcbmluZGV4IDQ5ZDE1MTFlOTkyMTg1Li5iNDA4NWFmM2FkMWNlMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXFxuQEAgLTMxLDggKzMxLDggQEAgaW50IG5mX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdGlmICghaGVscGVyKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4tXFx0aWYgKGhlbHBlci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IE5GUFJPVE9fVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBwcm90bylcXG4rXFx0aWYgKGhlbHBlci1cXHUwMDNlbmZwcm90byAhPSBORlBST1RPX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaGVscGVyLVxcdTAwM2VuZnByb3RvICE9IHByb3RvKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0c3dpdGNoIChwcm90bykge1xcbkBAIC02MCw3ICs2MCw3IEBAIGludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGhlbHBlci1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtICE9IHByb3RvKVxcbitcXHRpZiAoaGVscGVyLVxcdTAwM2VsNHByb3RvICE9IHByb3RvKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0aGVscGVyX2NiID0gcmN1X2RlcmVmZXJlbmNlKGhlbHBlci1cXHUwMDNlaGVscCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xcbmluZGV4IDgwZmMxNGM4N2RkYzRiLi5jYmYzMmEzY2IxZjYxMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcXG5AQCAtNTQwLDcgKzU0MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19wcHRwX2luaXQodm9pZClcXG4gXFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyKSk7XFxuIFxcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2cHB0cCwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdCAgXFxcInBwdHBcXFwiLCBQUFRQX0NPTlRST0xfUE9SVCwgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULFxcbitcXHRcXHRcXHQgIFxcXCJwcHRwXFxcIixcXG4gXFx0XFx0XFx0ICBcXHUwMDI2cHB0cF9leHBfcG9saWN5LCAwLCBjb25udHJhY2tfcHB0cF9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRwcHRwLmRlc3Ryb3kgPSBncmVfcHB0cF9kZXN0cm95X3NpYmxpbmdzO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcXG5pbmRleCAzOTA4NWFjZjdhNzE4NS4uYTA2NThmNjlkNzhmYmIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXFxuQEAgLTM0LDExICszNCw2IEBAIE1PRFVMRV9BVVRIT1IoXFxcIk1pY2hhbCBTY2htaWR0IFxcdTAwM2Ntc2NobWlkdEByZWRoYXQuY29tXFx1MDAzZVxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNBTkUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcXFwiKTtcXG4gTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKEhFTFBFUl9OQU1FKTtcXG4gXFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcXG4tc3RhdGljIHVfaW50MTZfdCBwb3J0c1tNQVhfUE9SVFNdO1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XFxuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcXHUwMDI2cG9ydHNfYywgMDQwMCk7XFxuLVxcbiBzdHJ1Y3Qgc2FuZV9yZXF1ZXN0IHtcXG4gXFx0X19iZTMyIFJQQ19jb2RlO1xcbiAjZGVmaW5lIFNBTkVfTkVUX1NUQVJUICAgICAgNyAgIC8qIFJQQyBjb2RlICovXFxuQEAgLTE2OSw4ICsxNjQsOCBAQCBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNhbmVbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzYW5lX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZSBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNhbmVfcHRyIF9fcmVhZF9tb3N0bHk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNhbmVfZXhwX3BvbGljeSA9IHtcXG4gXFx0Lm1heF9leHBlY3RlZFxcdD0gMSxcXG5AQCAtMTc5LDMyICsxNzQsMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzYW5lX2V4cF9wb2xpY3kgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NhbmVfZmluaSh2b2lkKVxcbiB7XFxuLVxcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2FuZV9wdHIsIHBvcnRzX2MgKiAyKTtcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHNhbmVfcHRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3NhbmVfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGludCBpLCByZXQgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9zYW5lX21hc3RlcikpO1xcbiBcXG4tXFx0aWYgKHBvcnRzX2MgPT0gMClcXG4tXFx0XFx0cG9ydHNbcG9ydHNfYysrXSA9IFNBTkVfUE9SVDtcXG4tXFxuLVxcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IGNvbm5lY3Rpb25zXFxuLVxcdFxcdCBhcmUgdHJhY2tlZCBvciBub3QgLSBZSyAqL1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcG9ydHNfYzsgaSsrKSB7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzYW5lWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2FuZVsyICogaSArIDFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbi1cXHR9XFxuK1xcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZzYW5lLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXFxuK1xcdFxcdFxcdCAgSEVMUEVSX05BTUUsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcXG4rXFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuIFxcbi1cXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzYW5lLCBwb3J0c19jICogMiwgc2FuZV9wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZzYW5lLCBcXHUwMDI2c2FuZV9wdHIpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbmluZGV4IDVlYzNhNGE0YmJkNzA3Li5kMGI4NWI4YWQxZTZkOCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXFxuQEAgLTM1LDEyICszNSw2IEBAIE1PRFVMRV9ERVNDUklQVElPTihcXFwiU0lQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXFxcIik7XFxuIE1PRFVMRV9BTElBUyhcXFwiaXBfY29ubnRyYWNrX3NpcFxcXCIpO1xcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xcbiBcXG4tI2RlZmluZSBNQVhfUE9SVFNcXHQ4XFxuLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdO1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XFxuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcXHUwMDI2cG9ydHNfYywgMDQwMCk7XFxuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFxcXCJwb3J0IG51bWJlcnMgb2YgU0lQIHNlcnZlcnNcXFwiKTtcXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IFNJUF9USU1FT1VUO1xcbiBtb2R1bGVfcGFyYW0oc2lwX3RpbWVvdXQsIHVpbnQsIDA2MDApO1xcbiBNT0RVTEVfUEFSTV9ERVNDKHNpcF90aW1lb3V0LCBcXFwidGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvblxcXCIpO1xcbkBAIC0xNzY0LDggKzE3NTgsOCBAQCBzdGF0aWMgaW50IHNpcF9oZWxwX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0cmV0dXJuIHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBwcm90b2ZmLCBkYXRhb2ZmLCBcXHUwMDI2ZHB0ciwgXFx1MDAyNmRhdGFsZW4pO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwW01BWF9QT1JUUyAqIDRdIF9fcmVhZF9tb3N0bHk7XFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0cltNQVhfUE9SVFMgKiA0XSBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwWzJdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2lwX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzaXBfZXhwX3BvbGljeVtTSVBfRVhQRUNUX01BWCArIDFdID0ge1xcbiBcXHRbU0lQX0VYUEVDVF9TSUdOQUxMSU5HXSA9IHtcXG5AQCAtMTc5MiwzOCArMTc4NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICsgMVxcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19zaXBfZmluaSh2b2lkKVxcbiB7XFxuLVxcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2lwX3B0ciwgcG9ydHNfYyAqIDQpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHNpcF9wdHIsIDIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc2lwX2luaXQodm9pZClcXG4ge1xcbi1cXHRpbnQgaSwgcmV0O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NpcF9tYXN0ZXIpKTtcXG4gXFxuLVxcdGlmIChwb3J0c19jID09IDApXFxuLVxcdFxcdHBvcnRzW3BvcnRzX2MrK10gPSBTSVBfUE9SVDtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwb3J0c19jOyBpKyspIHtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNpcFs0ICogaV0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXFxuLVxcdFxcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXFxuLVxcdFxcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzQgKiBpICsgMV0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxcbi1cXHRcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCBTSVBfUE9SVCwgcG9ydHNbaV0sIGksXFxuLVxcdFxcdFxcdFxcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF90Y3AsXFxuLVxcdFxcdFxcdFxcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2c2lwWzQgKiBpICsgMl0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0XFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxcbi1cXHRcXHRcXHRcXHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxcbi1cXHRcXHRcXHRcXHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNpcFs0ICogaSArIDNdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcXG4tXFx0XFx0XFx0XFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3RjcCxcXG4tXFx0XFx0XFx0XFx0ICBOVUxMLCBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNpcFswXSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVURQLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxcbitcXHRcXHRcXHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnNpcFsxXSwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxcbitcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLFxcbitcXHRcXHRcXHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxcbitcXHRcXHRcXHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4gXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHNpcCwgcG9ydHNfYyAqIDQsIHNpcF9wdHIpO1xcbitcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzaXAsIDIsIHNpcF9wdHIpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXFxuaW5kZXggYjZmY2U1NzAzZmNlNzcuLjEwOTk4NmQ1ZDU1ZTY5IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xcbkBAIC0xNCw4ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5oXFx1MDAzZVxcbiBcXG4tI2RlZmluZSBTTk1QX1BPUlRcXHQxNjFcXG4tXFxuIE1PRFVMRV9BVVRIT1IoXFxcIkppcmkgT2xzYSBcXHUwMDNjam9sc2FAcmVkaGF0LmNvbVxcdTAwM2VcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJTTk1QIHNlcnZpY2UgYnJvYWRjYXN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5AQCAtNTUsNyArNTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc25tcF9pbml0KHZvaWQpXFxuIFxcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XFxuIFxcbiBcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2aGVscGVyLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG4tXFx0XFx0XFx0ICBcXFwic25tcFxcXCIsIFNOTVBfUE9SVCwgU05NUF9QT1JULCBTTk1QX1BPUlQsXFxuK1xcdFxcdFxcdCAgXFxcInNubXBcXFwiLFxcbiBcXHRcXHRcXHQgIFxcdTAwMjZleHBfcG9saWN5LCAwLCBzbm1wX2Nvbm50cmFja19oZWxwLCBOVUxMLFxcbiBcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xcbmluZGV4IDQzOTNjNDM1YWEzNTQ5Li5hNjk1NTllZGY5YjM2MyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcXG5AQCAtMjYsMTIgKzI2LDYgQEAgTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfQUxJQVMoXFxcImlwX2Nvbm50cmFja190ZnRwXFxcIik7XFxuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XFxuIFxcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XFxuLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdO1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XFxuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcXHUwMDI2cG9ydHNfYywgMDQwMCk7XFxuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFxcXCJQb3J0IG51bWJlcnMgb2YgVEZUUCBzZXJ2ZXJzXFxcIik7XFxuLVxcbiBuZl9uYXRfdGZ0cF9ob29rX2ZuIF9fcmN1ICpuZl9uYXRfdGZ0cF9ob29rIF9fcmVhZF9tb3N0bHk7XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF90ZnRwX2hvb2spO1xcbiBcXG5AQCAtOTUsOCArODksOCBAQCBzdGF0aWMgaW50IHRmdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgdGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwIF9fcmVhZF9tb3N0bHk7XFxuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqdGZ0cF9wdHIgX19yZWFkX21vc3RseTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgdGZ0cF9leHBfcG9saWN5ID0ge1xcbiBcXHQubWF4X2V4cGVjdGVkXFx0PSAxLFxcbkBAIC0xMDUsMzAgKzk5LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgdGZ0cF9leHBfcG9saWN5ID0ge1xcbiBcXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja190ZnRwX2Zpbmkodm9pZClcXG4ge1xcbi1cXHRuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHRmdHBfcHRyLCBwb3J0c19jICogMik7XFxuK1xcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcih0ZnRwX3B0cik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja190ZnRwX2luaXQodm9pZClcXG4ge1xcbi1cXHRpbnQgaSwgcmV0O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTigwKTtcXG4gXFxuLVxcdGlmIChwb3J0c19jID09IDApXFxuLVxcdFxcdHBvcnRzW3BvcnRzX2MrK10gPSBURlRQX1BPUlQ7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcG9ydHNfYzsgaSsrKSB7XFxuLVxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZ0ZnRwWzIgKiBpXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXFxuLVxcdFxcdFxcdFxcdCAgXFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHQgIFRISVNfTU9EVUxFKTtcXG4tXFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnRmdHBbMiAqIGkgKyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxcbi1cXHRcXHRcXHRcXHQgIEhFTFBFUl9OQU1FLCBURlRQX1BPUlQsIHBvcnRzW2ldLCBpLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZ0ZnRwX2V4cF9wb2xpY3ksIDAsIHRmdHBfaGVscCwgTlVMTCxcXG4tXFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuLVxcdH1cXG4rXFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNnRmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcXG4rXFx0XFx0XFx0ICBIRUxQRVJfTkFNRSxcXG4rXFx0XFx0XFx0ICBcXHUwMDI2dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsXFxuK1xcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbiBcXG4tXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIodGZ0cCwgcG9ydHNfYyAqIDIsIHRmdHBfcHRyKTtcXG4rXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2dGZ0cCwgXFx1MDAyNnRmdHBfcHRyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbmluZGV4IDYzZmY2YjRkNWQyMTRhLi44YWMzMjZlMWViNWJhOSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG5AQCAtMzksMTIgKzM5LDYgQEAgc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpuZl9uYXRfYnlzb3VyY2UgX19yZWFkX21vc3RseTtcXG4gc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfaHRhYmxlX3NpemUgX19yZWFkX21vc3RseTtcXG4gc3RhdGljIHNpcGhhc2hfYWxpZ25lZF9rZXlfdCBuZl9uYXRfaGFzaF9ybmQ7XFxuIFxcbi1zdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYge1xcbi1cXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzIF9fcmN1ICplbnRyaWVzO1xcbi1cXG4tXFx0c3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkO1xcbi19O1xcbi1cXG4gc3RydWN0IG5mX25hdF9ob29rc19uZXQge1xcbiBcXHRzdHJ1Y3QgbmZfaG9va19vcHMgKm5hdF9ob29rX29wcztcXG4gXFx0dW5zaWduZWQgaW50IHVzZXJzO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xcbmluZGV4IDA3ZjUxZmU3NWZiZTQzLi42NGI5YmFjMjI4ZWFlOCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xcbkBAIC03NzAsNiArNzcwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2NF9vcHNbXSA9IHtcXG4gXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjQsXFxuIFxcdFxcdC5ob29rbnVtXFx0PSBORl9JTkVUX1BSRV9ST1VUSU5HLFxcbiBcXHRcXHQucHJpb3JpdHlcXHQ9IE5GX0lQX1BSSV9OQVRfRFNULFxcbitcXHRcXHQuaG9va19vcHNfdHlwZVxcdD0gTkZfSE9PS19PUF9OQVQsXFxuIFxcdH0sXFxuIFxcdC8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBzb3VyY2UgKi9cXG4gXFx0e1xcbkBAIC03NzcsNiArNzc4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2NF9vcHNbXSA9IHtcXG4gXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjQsXFxuIFxcdFxcdC5ob29rbnVtXFx0PSBORl9JTkVUX1BPU1RfUk9VVElORyxcXG4gXFx0XFx0LnByaW9yaXR5XFx0PSBORl9JUF9QUklfTkFUX1NSQyxcXG4rXFx0XFx0Lmhvb2tfb3BzX3R5cGVcXHQ9IE5GX0hPT0tfT1BfTkFULFxcbiBcXHR9LFxcbiBcXHQvKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovXFxuIFxcdHtcXG5AQCAtNzg0LDYgKzc4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjRfb3BzW10gPSB7XFxuIFxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbiBcXHRcXHQuaG9va251bVxcdD0gTkZfSU5FVF9MT0NBTF9PVVQsXFxuIFxcdFxcdC5wcmlvcml0eVxcdD0gTkZfSVBfUFJJX05BVF9EU1QsXFxuK1xcdFxcdC5ob29rX29wc190eXBlXFx0PSBORl9IT09LX09QX05BVCxcXG4gXFx0fSxcXG4gXFx0LyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqL1xcbiBcXHR7XFxuQEAgLTc5MSw2ICs3OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY0X29wc1tdID0ge1xcbiBcXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4gXFx0XFx0Lmhvb2tudW1cXHQ9IE5GX0lORVRfTE9DQUxfSU4sXFxuIFxcdFxcdC5wcmlvcml0eVxcdD0gTkZfSVBfUFJJX05BVF9TUkMsXFxuK1xcdFxcdC5ob29rX29wc190eXBlXFx0PSBORl9IT09LX09QX05BVCxcXG4gXFx0fSxcXG4gfTtcXG4gXFxuQEAgLTEwMzEsNiArMTAzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7XFxuIFxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbiBcXHRcXHQuaG9va251bVxcdD0gTkZfSU5FVF9QUkVfUk9VVElORyxcXG4gXFx0XFx0LnByaW9yaXR5XFx0PSBORl9JUDZfUFJJX05BVF9EU1QsXFxuK1xcdFxcdC5ob29rX29wc190eXBlXFx0PSBORl9IT09LX09QX05BVCxcXG4gXFx0fSxcXG4gXFx0LyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqL1xcbiBcXHR7XFxuQEAgLTEwMzgsNiArMTA0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7XFxuIFxcdFxcdC5wZlxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbiBcXHRcXHQuaG9va251bVxcdD0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsXFxuIFxcdFxcdC5wcmlvcml0eVxcdD0gTkZfSVA2X1BSSV9OQVRfU1JDLFxcbitcXHRcXHQuaG9va19vcHNfdHlwZVxcdD0gTkZfSE9PS19PUF9OQVQsXFxuIFxcdH0sXFxuIFxcdC8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi9cXG4gXFx0e1xcbkBAIC0xMDQ1LDYgKzEwNTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY2X29wc1tdID0ge1xcbiBcXHRcXHQucGZcXHRcXHQ9IE5GUFJPVE9fSVBWNixcXG4gXFx0XFx0Lmhvb2tudW1cXHQ9IE5GX0lORVRfTE9DQUxfT1VULFxcbiBcXHRcXHQucHJpb3JpdHlcXHQ9IE5GX0lQNl9QUklfTkFUX0RTVCxcXG4rXFx0XFx0Lmhvb2tfb3BzX3R5cGVcXHQ9IE5GX0hPT0tfT1BfTkFULFxcbiBcXHR9LFxcbiBcXHQvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovXFxuIFxcdHtcXG5AQCAtMTA1Miw2ICsxMDU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2Nl9vcHNbXSA9IHtcXG4gXFx0XFx0LnBmXFx0XFx0PSBORlBST1RPX0lQVjYsXFxuIFxcdFxcdC5ob29rbnVtXFx0PSBORl9JTkVUX0xPQ0FMX0lOLFxcbiBcXHRcXHQucHJpb3JpdHlcXHQ9IE5GX0lQNl9QUklfTkFUX1NSQyxcXG4rXFx0XFx0Lmhvb2tfb3BzX3R5cGVcXHQ9IE5GX0hPT0tfT1BfTkFULFxcbiBcXHR9LFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uNTY2NTVjYjdmZTJhZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5AQCAtNjcsNyArNjcsNyBAQCBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sW05GQ1RIX1RVUExFX01BWCsxXSA9IHtcXG4tXFx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sXFxuK1xcdFtORkNUSF9UVVBMRV9MM1BST1RPTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTE2LCBORlBST1RPX0lQVjYpLFxcbiBcXHRbTkZDVEhfVFVQTEVfTDRQUk9UT05VTV0gPSB7IC50eXBlID0gTkxBX1U4LCB9LFxcbiB9O1xcbiBcXG5AQCAtMjU0LDcgKzI1NCw4IEBAIG5mbmxfY3RoZWxwZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiBcXHRoZWxwZXItXFx1MDAzZWRhdGFfbGVuID0gc2l6ZTtcXG4gXFxuIFxcdGhlbHBlci1cXHUwMDNlZmxhZ3MgfD0gTkZfQ1RfSEVMUEVSX0ZfVVNFUlNQQUNFO1xcbi1cXHRtZW1jcHkoXFx1MDAyNmhlbHBlci1cXHUwMDNldHVwbGUsIHR1cGxlLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSkpO1xcbitcXHRoZWxwZXItXFx1MDAzZW5mcHJvdG8gPSB0dXBsZS1cXHUwMDNlc3JjLmwzbnVtO1xcbitcXHRoZWxwZXItXFx1MDAzZWw0cHJvdG8gPSB0dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtO1xcbiBcXG4gXFx0aGVscGVyLVxcdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xcbiBcXHRoZWxwZXItXFx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcXG5AQCAtNDQ5LDggKzQ1MCw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0aWYgKHN0cm5jbXAoY3VyLVxcdTAwM2VuYW1lLCBoZWxwZXJfbmFtZSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSB8fFxcbi1cXHRcXHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXFxuK1xcdFxcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cXHUwMDNlbmZwcm90byB8fFxcbitcXHRcXHQgICAgIHR1cGxlLmRzdC5wcm90b251bSAhPSBjdXItXFx1MDAzZWw0cHJvdG8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX2ZsYWdzIFxcdTAwMjYgTkxNX0ZfRVhDTClcXG5AQCAtNDc5LDEwICs0ODAsMTAgQEAgbmZubF9jdGhlbHBlcl9kdW1wX3R1cGxlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4gXFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIE5GQ1RIX1RVUExFX0wzUFJPVE9OVU0sXFxuLVxcdFxcdFxcdCBodG9ucyhoZWxwZXItXFx1MDAzZXR1cGxlLnNyYy5sM251bSkpKVxcbitcXHRcXHRcXHQgaHRvbnMoaGVscGVyLVxcdTAwM2VuZnByb3RvKSkpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4tXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXFxuK1xcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVxcdTAwM2VsNHByb3RvKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRubGFfbmVzdF9lbmQoc2tiLCBuZXN0X3Bhcm1zKTtcXG5AQCAtNjYxLDggKzY2Miw4IEBAIHN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAodHVwbGVfc2V0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtIHx8XFxuLVxcdFxcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcXG4rXFx0XFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVxcdTAwM2VuZnByb3RvIHx8XFxuK1xcdFxcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cXHUwMDNlbDRwcm90bykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbkBAIC03MjEsOCArNzIyLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmICh0dXBsZV9zZXQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICh0dXBsZS5zcmMubDNudW0gIT0gY3VyLVxcdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcXG4tXFx0XFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVxcdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pKVxcbitcXHRcXHQgICAgKHR1cGxlLnNyYy5sM251bSAhPSBjdXItXFx1MDAzZW5mcHJvdG8gfHxcXG4rXFx0XFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVxcdTAwM2VsNHByb3RvKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRmb3VuZCA9IHRydWU7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmNcXG5pbmRleCAxNzBkM2RiODYwYzU2NC4uNjZjMjAxNmY2MDQ5ZDcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xcbkBAIC0xNjgsNyArMTY4LDcgQEAgc3RhdGljIGludCBjdHRpbWVvdXRfbmV3X3RpbWVvdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfdGltZW91dF9wb2xpY3k7XFxuIFxcbi1cXHRzdHJjcHkodGltZW91dC1cXHUwMDNlbmFtZSwgbmxhX2RhdGEoY2RhW0NUQV9USU1FT1VUX05BTUVdKSk7XFxuK1xcdG5sYV9zdHJzY3B5KHRpbWVvdXQtXFx1MDAzZW5hbWUsIGNkYVtDVEFfVElNRU9VVF9OQU1FXSwgc2l6ZW9mKHRpbWVvdXQtXFx1MDAzZW5hbWUpKTtcXG4gXFx0dGltZW91dC1cXHUwMDNldGltZW91dC1cXHUwMDNlbDNudW0gPSBsM251bTtcXG4gXFx0dGltZW91dC1cXHUwMDNldGltZW91dC1cXHUwMDNlbDRwcm90byA9IGw0cHJvdG87XFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2dGltZW91dC1cXHUwMDNldGltZW91dC1cXHUwMDNlcmVmY250LCAxKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXFxuaW5kZXggNTYyM2MxOGZjZDEyZjAuLjk1MDA1ZTlhNjA2Njg4IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfcHV0X25mdF9mdF9pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcXG4gXFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcXG4gXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcXG4tXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgcHJpb3JpdHksXFxuIFxcdFxcdFxcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXFxuIHtcXG4gXFx0dTE2IGV2ZW50ID0gbmZubF9tc2dfdHlwZShORk5MX1NVQlNZU19IT09LLCBORk5MX01TR19IT09LX0dFVCk7XFxuQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4tXFx0cmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX1BSSU9SSVRZLCBodG9ubChvcHMtXFx1MDAzZXByaW9yaXR5KSk7XFxuK1xcdHJldCA9IG5sYV9wdXRfYmUzMihubHNrYiwgTkZOTEFfSE9PS19QUklPUklUWSwgaHRvbmwocHJpb3JpdHkpKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC0zMzcsNiArMzM3LDMwIEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlXFxuIFxcdHJldHVybiBob29rX2hlYWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuK1xcdFxcdFxcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXFxuK3tcXG4rXFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXFx1MDAzZWVudHJpZXMpO1xcbitcXHRzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0aWYgKCFlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5hdF9vcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSxcXG4rXFx0XFx0XFx0XFx0XFx0IG9wcy1cXHUwMDNlcHJpb3JpdHksIGZhbWlseSwgc2VxKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiB7XFxuQEAgLTM2NSw4ICszODksMTMgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuIFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIFxcbiBcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbi1cXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXFxuLVxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbitcXHRcXHRpZiAob3BzW2ldLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBvcHNbaV0tXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbmluZGV4IDAzYTg4Yzc3ZTBmMDI4Li4zNThiOTI4N2UxMmU4NyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbkBAIC0xMjk3LDYgKzEyOTcsMTcgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbitzdGF0aWMgdm9pZCBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqdGhpcylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuICpleHBmbjtcXG4rXFxuK1xcdGV4cGZuID0gbmZfY3RfaGVscGVyX2V4cGVjdGZuX2ZpbmRfYnlfbmFtZShcXFwibmF0LWZvbGxvdy1tYXN0ZXJcXFwiKTtcXG4rXFx0aWYgKGV4cGZuKVxcbitcXHRcXHRleHBmbi1cXHUwMDNlZXhwZWN0Zm4oY3QsIHRoaXMpO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbkBAIC0xMzQyLDYgKzEzNTMsMTMgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbiBcXHRcXHQgICAgICAgICAgcHJpdi1cXHUwMDNlbDRwcm90bywgTlVMTCwgXFx1MDAyNnByaXYtXFx1MDAzZWRwb3J0KTtcXG4gXFx0ZXhwLVxcdTAwM2V0aW1lb3V0ICs9IHByaXYtXFx1MDAzZXRpbWVvdXQ7XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbitcXHRpZiAoY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19OQVRfTUFTSykge1xcbitcXHRcXHRleHAtXFx1MDAzZXNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gcHJpdi1cXHUwMDNlZHBvcnQ7XFxuK1xcdFxcdGV4cC1cXHUwMDNlZGlyID0gIWRpcjtcXG4rXFx0XFx0ZXhwLVxcdTAwM2VleHBlY3RmbiA9IG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcjtcXG4rXFx0fVxcbisjZW5kaWZcXG4gXFx0aWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMClcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gXFxuQEAgLTEzNzUsNiArMTM5MywxMyBAQCBzdGF0aWMgc3RydWN0IG5mdF9vYmplY3RfdHlwZSBuZnRfY3RfZXhwZWN0X29ial90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuIFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIH07XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbitzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBuZnRfY3RfbmF0IF9fcmVhZF9tb3N0bHkgPSB7XFxuK1xcdC5uYW1lID0gXFxcIm5mdF9jdC1mb2xsb3ctbWFzdGVyXFxcIixcXG4rXFx0LmV4cGVjdGZuID0gbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyLFxcbit9O1xcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IG5mdF9jdF9tb2R1bGVfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuQEAgLTE0MDAsNiArMTQyNSw5IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mdF9jdF9tb2R1bGVfaW5pdCh2b2lkKVxcbiBcXHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfY3RfdGltZW91dF9vYmpfdHlwZSk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycjQ7XFxuKyNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbitcXHRuZl9jdF9oZWxwZXJfZXhwZWN0Zm5fcmVnaXN0ZXIoXFx1MDAyNm5mdF9jdF9uYXQpO1xcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xNDI1LDYgKzE0NTMsMTMgQEAgc3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKVxcbiBcXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9jdF9oZWxwZXJfb2JqX3R5cGUpO1xcbiBcXHRuZnRfdW5yZWdpc3Rlcl9leHByKFxcdTAwMjZuZnRfbm90cmFja190eXBlKTtcXG4gXFx0bmZ0X3VucmVnaXN0ZXJfZXhwcihcXHUwMDI2bmZ0X2N0X3R5cGUpO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcXG4rXFx0bmZfY3RfaGVscGVyX2V4cGVjdGZuX3VucmVnaXN0ZXIoXFx1MDAyNm5mdF9jdF9uYXQpO1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0bmZfY3RfaGVscGVyX2V4cGVjdGZuX2Rlc3Ryb3koXFx1MDAyNm5mdF9jdF9uYXQpO1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rI2VuZGlmXFxuIH1cXG4gXFxuIG1vZHVsZV9pbml0KG5mdF9jdF9tb2R1bGVfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xcbmluZGV4IDAxOGJiYjZkZjRjZTQzLi5lZmMyNWU3ODhhMWM1MiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcXG5AQCAtNTQ0LDggKzU0NCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FycmF5X2ludGVydmFsc19hbGxvYyhzdHJ1Y3QgbmZ0X2FycmF5ICphcnJheSwgdTMyIG1heF9pbnRlcnZhbHMpXFxuIFxcdGlmICghaW50ZXJ2YWxzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGlmIChhcnJheS1cXHUwMDNlaW50ZXJ2YWxzKVxcbi1cXHRcXHRrdmZyZWUoYXJyYXktXFx1MDAzZWludGVydmFscyk7XFxuK1xcdGt2ZnJlZShhcnJheS1cXHUwMDNlaW50ZXJ2YWxzKTtcXG4gXFxuIFxcdGFycmF5LVxcdTAwM2VpbnRlcnZhbHMgPSBpbnRlcnZhbHM7XFxuIFxcdGFycmF5LVxcdTAwM2VtYXhfaW50ZXJ2YWxzID0gbWF4X2ludGVydmFscztcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jXFxuaW5kZXggNGU2NzA4YzIzOTIyYjkuLmU2NDExNmJmMjYzNzg2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuY1xcbkBAIC0xOTIwLDkgKzE5MjAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHh0X3RhcmdldF9zZXFfb3BzID0ge1xcbiBcXHQuc2hvd1xcdD0geHRfdGFyZ2V0X3NlcV9zaG93LFxcbiB9O1xcbiBcXG4tI2RlZmluZSBGT1JNQVRfVEFCTEVTXFx0XFxcIl90YWJsZXNfbmFtZXNcXFwiXFxuLSNkZWZpbmVcXHRGT1JNQVRfTUFUQ0hFU1xcdFxcXCJfdGFibGVzX21hdGNoZXNcXFwiXFxuLSNkZWZpbmUgRk9STUFUX1RBUkdFVFMgXFx0XFxcIl90YWJsZXNfdGFyZ2V0c1xcXCJcXG4rI2RlZmluZSBGT1JNQVRfVEFCTEVTXFx0XFxcIiVzX3RhYmxlc19uYW1lc1xcXCJcXG4rI2RlZmluZVxcdEZPUk1BVF9NQVRDSEVTXFx0XFxcIiVzX3RhYmxlc19tYXRjaGVzXFxcIlxcbisjZGVmaW5lIEZPUk1BVF9UQVJHRVRTXFx0XFxcIiVzX3RhYmxlc190YXJnZXRzXFxcIlxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovXFxuIFxcbkBAIC0yMDMzLDggKzIwMzMsNyBAQCBpbnQgeHRfcHJvdG9faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKVxcbiBcXHRyb290X3VpZCA9IG1ha2Vfa3VpZChuZXQtXFx1MDAzZXVzZXJfbnMsIDApO1xcbiBcXHRyb290X2dpZCA9IG1ha2Vfa2dpZChuZXQtXFx1MDAzZXVzZXJfbnMsIDApO1xcbiBcXG4tXFx0c3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTtcXG4tXFx0c3RybGNhdChidWYsIEZPUk1BVF9UQUJMRVMsIHNpemVvZihidWYpKTtcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBQkxFUywgeHRfcHJlZml4W2FmXSk7XFxuIFxcdHByb2MgPSBwcm9jX2NyZWF0ZV9uZXRfZGF0YShidWYsIDA0NDAsIG5ldC1cXHUwMDNlcHJvY19uZXQsIFxcdTAwMjZ4dF90YWJsZV9zZXFfb3BzLFxcbiBcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSksXFxuIFxcdFxcdFxcdCh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWYpO1xcbkBAIC0yMDQzLDggKzIwNDIsNyBAQCBpbnQgeHRfcHJvdG9faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKVxcbiBcXHRpZiAodWlkX3ZhbGlkKHJvb3RfdWlkKSBcXHUwMDI2XFx1MDAyNiBnaWRfdmFsaWQocm9vdF9naWQpKVxcbiBcXHRcXHRwcm9jX3NldF91c2VyKHByb2MsIHJvb3RfdWlkLCByb290X2dpZCk7XFxuIFxcbi1cXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xcbi1cXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX01BVENIRVMsIHNpemVvZihidWYpKTtcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX01BVENIRVMsIHh0X3ByZWZpeFthZl0pO1xcbiBcXHRwcm9jID0gcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoYnVmLCAwNDQwLCBuZXQtXFx1MDAzZXByb2NfbmV0LFxcbiBcXHRcXHRcXHRcXHUwMDI2eHRfbWF0Y2hfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBuZl9tdHRnX3RyYXYpLFxcbiBcXHRcXHRcXHQodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFmKTtcXG5AQCAtMjA1Myw4ICsyMDUxLDcgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZilcXG4gXFx0aWYgKHVpZF92YWxpZChyb290X3VpZCkgXFx1MDAyNlxcdTAwMjYgZ2lkX3ZhbGlkKHJvb3RfZ2lkKSlcXG4gXFx0XFx0cHJvY19zZXRfdXNlcihwcm9jLCByb290X3VpZCwgcm9vdF9naWQpO1xcbiBcXG4tXFx0c3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTtcXG4tXFx0c3RybGNhdChidWYsIEZPUk1BVF9UQVJHRVRTLCBzaXplb2YoYnVmKSk7XFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEZPUk1BVF9UQVJHRVRTLCB4dF9wcmVmaXhbYWZdKTtcXG4gXFx0cHJvYyA9IHByb2NfY3JlYXRlX3NlcV9wcml2YXRlKGJ1ZiwgMDQ0MCwgbmV0LVxcdTAwM2Vwcm9jX25ldCxcXG4gXFx0XFx0XFx0IFxcdTAwMjZ4dF90YXJnZXRfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBuZl9tdHRnX3RyYXYpLFxcbiBcXHRcXHRcXHQgKHZvaWQgKikodW5zaWduZWQgbG9uZylhZik7XFxuQEAgLTIwNjgsMTMgKzIwNjUsMTEgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZilcXG4gXFxuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbiBvdXRfcmVtb3ZlX21hdGNoZXM6XFxuLVxcdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XFxuLVxcdHN0cmxjYXQoYnVmLCBGT1JNQVRfTUFUQ0hFUywgc2l6ZW9mKGJ1ZikpO1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfTUFUQ0hFUywgeHRfcHJlZml4W2FmXSk7XFxuIFxcdHJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LVxcdTAwM2Vwcm9jX25ldCk7XFxuIFxcbiBvdXRfcmVtb3ZlX3RhYmxlczpcXG4tXFx0c3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTtcXG4tXFx0c3RybGNhdChidWYsIEZPUk1BVF9UQUJMRVMsIHNpemVvZihidWYpKTtcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBQkxFUywgeHRfcHJlZml4W2FmXSk7XFxuIFxcdHJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LVxcdTAwM2Vwcm9jX25ldCk7XFxuIG91dDpcXG4gXFx0cmV0dXJuIC0xO1xcbkBAIC0yMDg3LDE2ICsyMDgyLDEzIEBAIHZvaWQgeHRfcHJvdG9fZmluaShzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKVxcbiAjaWZkZWYgQ09ORklHX1BST0NfRlNcXG4gXFx0Y2hhciBidWZbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTl07XFxuIFxcbi1cXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xcbi1cXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBQkxFUywgc2l6ZW9mKGJ1ZikpO1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfVEFCTEVTLCB4dF9wcmVmaXhbYWZdKTtcXG4gXFx0cmVtb3ZlX3Byb2NfZW50cnkoYnVmLCBuZXQtXFx1MDAzZXByb2NfbmV0KTtcXG4gXFxuLVxcdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XFxuLVxcdHN0cmxjYXQoYnVmLCBGT1JNQVRfVEFSR0VUUywgc2l6ZW9mKGJ1ZikpO1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfVEFSR0VUUywgeHRfcHJlZml4W2FmXSk7XFxuIFxcdHJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LVxcdTAwM2Vwcm9jX25ldCk7XFxuIFxcbi1cXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xcbi1cXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX01BVENIRVMsIHNpemVvZihidWYpKTtcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX01BVENIRVMsIHh0X3ByZWZpeFthZl0pO1xcbiBcXHRyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC1cXHUwMDNlcHJvY19uZXQpO1xcbiAjZW5kaWYgLypDT05GSUdfUFJPQ19GUyovXFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5jIGIvbmV0L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5jXFxuaW5kZXggOTNmMDY0MzA2OTAxYzAuLjI2NWQyMTY5Nzg0N2JkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVENQT1BUU1RSSVAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVENQT1BUU1RSSVAuY1xcbkBAIC0xNiw3ICsxNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5oXFx1MDAzZVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb3B0bGVuKGNvbnN0IHVfaW50OF90ICpvcHQsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9wdGxlbihjb25zdCB1OCAqb3B0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxcbiB7XFxuIFxcdC8qIEJld2FyZSB6ZXJvLWxlbmd0aCBvcHRpb25zOiBtYWtlIGZpbml0ZSBwcm9ncmVzcyAqL1xcbiBcXHRpZiAob3B0W29mZnNldF0gXFx1MDAzYz0gVENQT1BUX05PUCB8fCBvcHRbb2Zmc2V0KzFdID09IDApXFxuQEAgLTMzLDggKzMzLDggQEAgdGNwb3B0c3RyaXBfbWFuZ2xlX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRjb25zdCBzdHJ1Y3QgeHRfdGNwb3B0c3RyaXBfdGFyZ2V0X2luZm8gKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbiBcXHRzdHJ1Y3QgdGNwaGRyICp0Y3BoLCBfdGg7XFxuIFxcdHVuc2lnbmVkIGludCBvcHRsLCBpLCBqO1xcbi1cXHR1X2ludDE2X3QgbiwgbztcXG4tXFx0dV9pbnQ4X3QgKm9wdDtcXG4rXFx0dTE2IG4sIG87XFxuK1xcdHU4ICpvcHQ7XFxuIFxcdGludCB0Y3BfaGRybGVuO1xcbiBcXG4gXFx0LyogVGhpcyBpcyBhIGZyYWdtZW50LCBubyBUQ1AgaGVhZGVyIGlzIGF2YWlsYWJsZSAqL1xcbkBAIC05Nyw3ICs5Nyw3IEBAIHRjcG9wdHN0cmlwX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIHtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwdjZoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFx0aW50IHRjcGhvZmY7XFxuLVxcdHVfaW50OF90IG5leHRoZHI7XFxuK1xcdHU4IG5leHRoZHI7XFxuIFxcdF9fYmUxNiBmcmFnX29mZjtcXG4gXFxuIFxcdG5leHRoZHIgPSBpcHY2aC1cXHUwMDNlbmV4dGhkcjtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9kc2NwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuY1xcbmluZGV4IGZiMDE2OWE4ZjliYmQzLi44NzhmMjcwMTZlOTk4OCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfZHNjcC5jXFxuQEAgLTQ5LDYgKzQ5LDE2IEBAIHN0YXRpYyBpbnQgZHNjcF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdG9zX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbitcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWludmVydCBcXHUwMDNlIDEpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIHRvc19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvICppbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuQEAgLTgyLDYgKzkyLDcgQEAgc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBkc2NwX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XFxuIFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwidG9zXFxcIixcXG4gXFx0XFx0LnJldmlzaW9uXFx0PSAxLFxcbiBcXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjQsXFxuK1xcdFxcdC5jaGVja2VudHJ5XFx0PSB0b3NfbXRfY2hlY2ssXFxuIFxcdFxcdC5tYXRjaFxcdFxcdD0gdG9zX210LFxcbiBcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvKSxcXG4gXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG5AQCAtOTAsNiArMTAxLDcgQEAgc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBkc2NwX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XFxuIFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwidG9zXFxcIixcXG4gXFx0XFx0LnJldmlzaW9uXFx0PSAxLFxcbiBcXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxuK1xcdFxcdC5jaGVja2VudHJ5XFx0PSB0b3NfbXRfY2hlY2ssXFxuIFxcdFxcdC5tYXRjaFxcdFxcdD0gdG9zX210LFxcbiBcXHRcXHQubWF0Y2hzaXplXFx0PSBzaXplb2Yoc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvKSxcXG4gXFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmNcXG5pbmRleCBmNzI3NTJmYTQzNzRkYS4uZDM0ODMxY2UzYWRmYmIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmNcXG5AQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBpbnQgcmVjZW50X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLFxcbiBcXHR0LVxcdTAwM2Vuc3RhbXBzX21heF9tYXNrID0gbnN0YW1wX21hc2s7XFxuIFxcbiBcXHRtZW1jcHkoXFx1MDAyNnQtXFx1MDAzZW1hc2ssIFxcdTAwMjZpbmZvLVxcdTAwM2VtYXNrLCBzaXplb2YodC1cXHUwMDNlbWFzaykpO1xcbi1cXHRzdHJjcHkodC1cXHUwMDNlbmFtZSwgaW5mby1cXHUwMDNlbmFtZSk7XFxuK1xcdHN0cnNjcHkodC1cXHUwMDNlbmFtZSwgaW5mby1cXHUwMDNlbmFtZSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ0LVxcdTAwM2VscnVfbGlzdCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpcF9saXN0X2hhc2hfc2l6ZTsgaSsrKVxcbiBcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dC1cXHUwMDNlaXBoYXNoW2ldKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuYyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmNcXG5pbmRleCBiOWRhODI2OTE2MWQ4Zi4uYjA4YjA3N2Q3ZjBhZGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmNcXG5AQCAtNzgsMTAgKzc4LDIzIEBAIHRjcG1zc19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB0Y3Btc3NfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHh0X3RjcG1zc19tYXRjaF9pbmZvICppbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuK1xcbitcXHRpZiAoaW5mby1cXHUwMDNlbXNzX21pbiBcXHUwMDNlIGluZm8tXFx1MDAzZW1zc19tYXgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlaW52ZXJ0IFxcdTAwM2UgMSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB0Y3Btc3NfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQubmFtZVxcdFxcdD0gXFxcInRjcG1zc1xcXCIsXFxuIFxcdFxcdC5mYW1pbHlcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4rXFx0XFx0LmNoZWNrZW50cnlcXHQ9IHRjcG1zc19tdF9jaGVjayxcXG4gXFx0XFx0Lm1hdGNoXFx0XFx0PSB0Y3Btc3NfbXQsXFxuIFxcdFxcdC5tYXRjaHNpemVcXHQ9IHNpemVvZihzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8pLFxcbiBcXHRcXHQucHJvdG9cXHRcXHQ9IElQUFJPVE9fVENQLFxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcXG5pbmRleCBiZTUzNWEyNjFmYTA0YS4uNGNhNzk2NGU4M2M4NTcgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9jdC5jXFxuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXFxuQEAgLTE1MjcsOCArMTUyNyw4IEBAIHN0YXRpYyBpbnQgdGNmX2N0X2R1bXBfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgVENBX0NUX0hFTFBFUl9OQU1FLCBoZWxwZXItXFx1MDAzZW5hbWUpIHx8XFxuLVxcdCAgICBubGFfcHV0X3U4KHNrYiwgVENBX0NUX0hFTFBFUl9GQU1JTFksIGhlbHBlci1cXHUwMDNldHVwbGUuc3JjLmwzbnVtKSB8fFxcbi1cXHQgICAgbmxhX3B1dF91OChza2IsIFRDQV9DVF9IRUxQRVJfUFJPVE8sIGhlbHBlci1cXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcXG4rXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX0ZBTUlMWSwgaGVscGVyLVxcdTAwM2VuZnByb3RvKSB8fFxcbitcXHQgICAgbmxhX3B1dF91OChza2IsIFRDQV9DVF9IRUxQRVJfUFJPVE8sIGhlbHBlci1cXHUwMDNlbDRwcm90bykpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDowNS4zNjM0MzQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDIzNzM5MzY3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIixcbiAgICBcIkJSSURHRV9ORl9FQlRBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfSE9PS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgICBcIk5GX0NUX05FVExJTktfVElNRU9VVFwiLFxuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfTUFUQ0hfRFNDUFwiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX1RDUE1TU1wiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19JUkNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19ORVRCSU9TX05TXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU05NUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1BQVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TQU5FXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfVEZUUFwiLFxuICAgIFwiTkZfTkFUX1NOTVBfQkFTSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgICBcIm5mX2N0X2hlbHBlcl9pbml0XCIsXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX25ld1wiLFxuICAgIFwiY3R0aW1lb3V0X25ld190aW1lb3V0XCIsXG4gICAgXCJ0b3NfbXRfY2hlY2tcIixcbiAgICBcInRjcG1zc19tdF9jaGVja1wiLFxuICAgIFwibmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyXCIsXG4gICAgXCJkb19yZXBsYWNlXCIsXG4gICAgXCJjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIE5BVCBob29rcywgYW5kIGVidGFibGVzLiBJdCBjaGFuZ2VzIGhvdyBjb25udHJhY2sgaGVscGVycyBhcmUgcmVnaXN0ZXJlZCBhbmQgbG9va2VkIHVwIChyZW1vdmluZyBwb3J0LXNwZWNpZmljIGRlZmF1bHRzKSwgYWRkcyBhIG5ldyBORl9IT09LX09QX05BVCB0eXBlIGFuZCBmaXhlcyBOQVQgaG9vayBkdW1waW5nLCBhZGRzIGEgTkFUIGZvbGxvdyBtYXN0ZXIgZXhwZWN0Zm4gZm9yIG5mdF9jdCwgYW5kIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gZWJ0YWJsZXMgZG9fcmVwbGFjZS4gSXQgYWxzbyBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIGZvciB4dF9kc2NwIGFuZCB4dF90Y3Btc3MgbWF0Y2hlcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBhbmQgbmV0ZmlsdGVyIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNjZTEyNmIyNGYzY2JjMGY4NDk4Y2Y3YmZmODkwNWE4ZDZmM2QwMTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE1OjIwOjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmhcbmluZGV4IGVmYmJmYTc3MGQ2NjE3Li5lOTlhZmMxNDE0Y2QzOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmhcbkBAIC05Myw2ICs5Myw3IEBAIGVudW0gbmZfaG9va19vcHNfdHlwZSB7XG4gXHRORl9IT09LX09QX05GX1RBQkxFUyxcbiBcdE5GX0hPT0tfT1BfQlBGLFxuIFx0TkZfSE9PS19PUF9ORlRfRlQsXG4rXHRORl9IT09LX09QX05BVCxcbiB9O1xuIFxuIHN0cnVjdCBuZl9ob29rX29wcyB7XG5AQCAtMTQwLDYgKzE0MSwxMiBAQCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzIHtcbiBcdCAqL1xuIH07XG4gXG4rc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2IHtcbitcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgX19yY3UgKmVudHJpZXM7XG4rXG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XG4rfTtcbitcbiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUlxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2hvb2tfb3BzICoqbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplKVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuaW5kZXggODEyODZjNDk5MzI1MjEuLmIxNWYzNzYwNGNkZTRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaFxuQEAgLTksOCArOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmhcdTAwM2VcbiBcbi0jZGVmaW5lIFJBU19QT1JUIDE3MTlcbi0jZGVmaW5lIFE5MzFfUE9SVCAxNzIwXG4gI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0XHQvKiBBdWRpbywgdmlkZW8sIEZBWCBhbmQgb3RoZXIgKi9cbiBcbiAvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuaW5kZXggYzNiZGI0MzcwOTM4NGQuLmMwYjMwNWNlN2MzYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaFxuQEAgLTUwLDggKzUwLDYgQEAgc3RydWN0IG5mX25hdF9wcHRwIHtcbiBcdF9fYmUxNiBwYWNfY2FsbF9pZDtcdFx0XHQvKiBOQVQnZWQgUEFDIGNhbGwgaWQgKi9cbiB9O1xuIFxuLSNkZWZpbmUgUFBUUF9DT05UUk9MX1BPUlRcdDE3MjNcbi1cbiAjZGVmaW5lIFBQVFBfUEFDS0VUX0NPTlRST0xcdDFcbiAjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVRcdDJcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuaW5kZXggNDZjN2FjZDFiNGE3MGYuLjg1MDEwMzVkNzMzNTU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuaFxuQEAgLTMsOCArMyw2IEBAXG4gI2RlZmluZSBfTkZfQ09OTlRSQUNLX1NBTkVfSFxuIC8qIFNBTkUgdHJhY2tpbmcuICovXG4gXG4tI2RlZmluZSBTQU5FX1BPUlRcdDY1NjZcbi1cbiBlbnVtIHNhbmVfc3RhdGUge1xuIFx0U0FORV9TVEFURV9OT1JNQUwsXG4gXHRTQU5FX1NUQVRFX1NUQVJUX1JFUVVFU1RFRCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuaW5kZXggOTBiMzM0YmJjZTNjZTYuLmUzZDE3MzljNTU3ZDE1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaFxuQEAgLTIsOCArMiw2IEBAXG4gI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSFxuICNkZWZpbmUgX05GX0NPTk5UUkFDS19URlRQX0hcbiBcbi0jZGVmaW5lIFRGVFBfUE9SVCA2OVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDQ5Mjk3ZmVjNDQ4YTgyLi5lZDJlOWJjMWJiNGU5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0yMTIzLDcgKzIxMjMsNyBAQCB2b2lkIGlwX3ZzX3VwZGF0ZV9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRcdCAgICBpbnQgb3V0aW4pO1xuIGludCBpcF92c19jb25maXJtX2Nvbm50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGlwX3ZzX25mY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHVfaW50OF90IHByb3RvLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHU4IHByb3RvLFxuIFx0XHRcdCAgICAgICBjb25zdCBfX2JlMTYgcG9ydCwgaW50IGZyb21fcnMpO1xuIHZvaWQgaXBfdnNfY29ubl9kcm9wX2Nvbm50cmFjayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5pbmRleCBjNzYxY2Q4MTU4YjI1My4uYmM1NDI3ZDIzOWY0YzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5AQCAtNDMsMTEgKzQzLDEwIEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHtcbiBcbiBcdHJlZmNvdW50X3QgY3RfcmVmY250O1xuIFxuLVx0LyogVHVwbGUgb2YgdGhpbmdzIHdlIHdpbGwgaGVscCAoY29tcGFyZWQgYWdhaW5zdCBzZXJ2ZXIgcmVzcG9uc2UpICovXG4tXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlO1xuK1x0dTggbmZwcm90bztcdC8qIE5GUFJPVE9fKiwgY2FuIGJlIE5GUFJPVE9fVU5TUEVDICovXG4rXHR1OCBsNHByb3RvO1x0LyogSVBQUk9UT19VRFAvVENQICovXG4gXG4tXHQvKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gZGF0YSBwYXNzZXM7IHJldHVybiB2ZXJkaWN0LCBvciAtMSB0b1xuLSAgICAgICAgICAgaW52YWxpZGF0ZS4gKi9cbitcdC8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QgKi9cbiBcdGludCBfX3JjdSAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdCAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjb25udHJhY2tpbmZvKTtcbkBAIC05NCw4ICs5Myw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsXG4gdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKTtcbiBcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4tXHRcdCAgICAgICB1MTYgbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbi1cdFx0ICAgICAgIHUxNiBkZWZhdWx0X3BvcnQsIHUxNiBzcGVjX3BvcnQsIHUzMiBpZCxcbitcdFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cF9wb2wsXG4gXHRcdCAgICAgICB1MzIgZXhwZWN0X2NsYXNzX21heCxcbiBcdFx0ICAgICAgIGludCAoKmhlbHApKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG5pbmRleCBmMjBjMDM5ZTQ0YzhkNy4uMDQyZDMxMjc4NzEzZGYgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG4rKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXG5AQCAtMzksNiArMzksOCBAQFxuICNkZWZpbmUgQ09VTlRFUl9PRkZTRVQobikgKFNNUF9BTElHTihuICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKVxuICNkZWZpbmUgQ09VTlRFUl9CQVNFKGMsIG4sIGNwdSkgKChzdHJ1Y3QgZWJ0X2NvdW50ZXIgKikoKChjaGFyICopYykgKyBcXFxuIFx0XHRcdFx0IENPVU5URVJfT0ZGU0VUKG4pICogY3B1KSlcbisjZGVmaW5lIE1BWF9FQlRfRU5UUklFUyAoKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC8gXFxcbitcdFx0XHQgTlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcbiBcbiBzdHJ1Y3QgZWJ0X3Blcm5ldCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHRhYmxlcztcbkBAIC0xMTI0LDEwICsxMTI2LDkgQEAgc3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBvdmVyZmxvdyBjaGVjayAqL1xuLVx0aWYgKHRtcC5uZW50cmllcyBcdTAwM2U9ICgoSU5UX01BWCAtIHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pKSAvXG4tXHRcdFx0TlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSlcbitcdGlmICh0bXAubmVudHJpZXMgXHUwMDNlPSBNQVhfRUJUX0VOVFJJRVMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0aWYgKHRtcC5udW1fY291bnRlcnMgXHUwMDNlPSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpXG4rXHRpZiAodG1wLm51bV9jb3VudGVycyBcdTAwM2U9IE1BWF9FQlRfRU5UUklFUylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHR0bXAubmFtZVtzaXplb2YodG1wLm5hbWUpIC0gMV0gPSAwO1xuQEAgLTIyNjUsMTAgKzIyNjYsOSBAQCBzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlcihzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXG4gXHRpZiAodG1wLmVudHJpZXNfc2l6ZSA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmICh0bXAubmVudHJpZXMgXHUwMDNlPSAoKElOVF9NQVggLSBzaXplb2Yoc3RydWN0IGVidF90YWJsZV9pbmZvKSkgL1xuLVx0XHRcdE5SX0NQVVMgLSBTTVBfQ0FDSEVfQllURVMpIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpXG4rXHRpZiAodG1wLm5lbnRyaWVzIFx1MDAzZT0gTUFYX0VCVF9FTlRSSUVTKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdGlmICh0bXAubnVtX2NvdW50ZXJzIFx1MDAzZT0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKVxuK1x0aWYgKHRtcC5udW1fY291bnRlcnMgXHUwMDNlPSBNQVhfRUJUX0VOVFJJRVMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0bWVtY3B5KHJlcGwsIFx1MDAyNnRtcCwgb2Zmc2V0b2Yoc3RydWN0IGVidF9yZXBsYWNlLCBob29rX2VudHJ5KSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljX21haW4uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbmluZGV4IDBlZGUxMzhkZmQyOWU3Li5lNTQwYjg2YmQxNWI2YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpY19tYWluLmNcbkBAIC0yMTMsNyArMjEzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3NubXBfYmFzaWNfaW5pdCh2b2lkKVxuIFx0UkNVX0lOSVRfUE9JTlRFUihuZl9uYXRfc25tcF9ob29rLCBoZWxwKTtcbiBcbiBcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNubXBfdHJhcF9oZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLFxuLVx0XHRcdCAgXCJzbm1wX3RyYXBcIiwgU05NUF9UUkFQX1BPUlQsIFNOTVBfVFJBUF9QT1JULCBTTk1QX1RSQVBfUE9SVCxcbitcdFx0XHQgIFwic25tcF90cmFwXCIsXG4gXHRcdFx0ICBcdTAwMjZzbm1wX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdGVyciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c25tcF90cmFwX2hlbHBlciwgXHUwMDI2c25tcF90cmFwX2hlbHBlcl9wdHIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jXG5pbmRleCA4MTk3NGY2OWU1YmI0ZS4uMzQ3MTg1ZmQwYzhjNmYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jXG5AQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIGlwX3ZzX25mY3RfZXhwZWN0X2NhbGxiYWNrKHN0cnVjdCBuZl9jb25uICpjdCxcbiAgKiBVc2UgcG9ydCAwIHRvIGV4cGVjdCBjb25uZWN0aW9uIGZyb20gYW55IHBvcnQuXG4gICovXG4gdm9pZCBpcF92c19uZmN0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1X2ludDhfdCBwcm90byxcbitcdFx0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1OCBwcm90byxcbiBcdFx0XHQgICAgICAgY29uc3QgX19iZTE2IHBvcnQsIGludCBmcm9tX3JzKVxuIHtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuaW5kZXggZGRhZmJkZmM5NmRjMzUuLjA2ZDZlYzEyYzg2ZGZhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG5AQCAtODksNyArODksNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbiBcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xuIFx0Y2hhciBwYnVmW3NpemVvZihcIjY1NTM1XCIpXSwgKnRtcDtcbi1cdHVfaW50MTZfdCBsZW47XG4rXHR1MTYgbGVuO1xuIFx0X19iZTE2IHBvcnQ7XG4gXHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuIFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xuQEAgLTE5OSwxMCArMTk5LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxuIFx0fVxuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2YW1hbmRhX2hlbHBlclswXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZhbWFuZGFfaGVscGVyWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBIRUxQRVJfTkFNRSwgMTAwODAsIDEwMDgwLCAxMDA4MCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuIFx0XHRcdCAgXHUwMDI2YW1hbmRhX2V4cF9wb2xpY3ksIDAsIGFtYW5kYV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihhbWFuZGFfaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IGJmNzg4MjhjNzU0OWQ0Li42ZmY5NTRmMWJmYjg3YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTY2LDggKzY2LDYgQEAgaW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZXhwLVx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XG4gXG4gXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuLVx0aWYgKGhlbHBlcilcbi1cdFx0ZXhwLVx1MDAzZXR1cGxlLnNyYy51LnVkcC5wb3J0ID0gaGVscGVyLVx1MDAzZXR1cGxlLnNyYy51LnVkcC5wb3J0O1xuIFxuIFx0ZXhwLVx1MDAzZW1hc2suc3JjLnUzLmlwICAgICAgID0gbWFzaztcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51LnVkcC5wb3J0ICA9IGh0b25zKDB4RkZGRik7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuY1xuaW5kZXggMDg0N2Y4NDU2MTNkNmEuLmYzOTQ0NTk4YzE3MjZmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jXG5AQCAtMzUsMTEgKzM1LDYgQEAgTU9EVUxFX0FMSUFTKFwiaXBfY29ubnRyYWNrX2Z0cFwiKTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfZnRwX2xvY2spO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1cbiBzdGF0aWMgYm9vbCBsb29zZTtcbiBtb2R1bGVfcGFyYW0obG9vc2UsIGJvb2wsIDA2MDApO1xuIFxuQEAgLTU2MCw4ICs1NTUsOCBAQCBzdGF0aWMgaW50IG5mX2N0X2Z0cF9mcm9tX25sYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cFtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqZnRwX3B0cltNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHAgX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmZ0cF9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGZ0cF9leHBfcG9saWN5ID0ge1xuIFx0Lm1heF9leHBlY3RlZFx0PSAxLFxuQEAgLTU3MCwzMiArNTY1LDIzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZnRwX2V4cF9wb2xpY3kgPSB7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19mdHBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoZnRwX3B0ciwgcG9ydHNfYyAqIDIpO1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKGZ0cF9wdHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfZnRwX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBGVFBfUE9SVDtcbi1cbiBcdC8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9uc1xuIFx0XHQgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi9cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2ZnRwWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIEZUUF9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNmZ0cF9leHBfcG9saWN5LCAwLCBoZWxwLFxuLVx0XHRcdFx0ICBuZl9jdF9mdHBfZnJvbV9ubGF0dHIsIFRISVNfTU9EVUxFKTtcbi1cdH1cbitcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmZ0cCwgTkZQUk9UT19VTlNQRUMsIElQUFJPVE9fVENQLFxuK1x0XHRcdCAgSEVMUEVSX05BTUUsXG4rXHRcdFx0ICBcdTAwMjZmdHBfZXhwX3BvbGljeSwgMCwgaGVscCxcbitcdFx0XHQgIG5mX2N0X2Z0cF9mcm9tX25sYXR0ciwgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoZnRwLCBwb3J0c19jICogMiwgZnRwX3B0cik7XG4rXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmZ0cCwgXHUwMDI2ZnRwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcbmluZGV4IDI0OTMxZTM3OTk4NWJiLi40Y2IxNjY1YmJhMDIxNCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1xuQEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0aWMgaW50IGV4cGVjdF9oMjQ1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbiBzdGF0aWMgaW50IGNhbGxmb3J3YXJkX2RvX2ZpbHRlcihzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpzcmMsXG4gXHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkc3QsXG4tXHRcdFx0XHQgdV9pbnQ4X3QgZmFtaWx5KVxuK1x0XHRcdFx0IHU4IGZhbWlseSlcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC0xNzEzLDE5ICsxNzEzLDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcbiBcdGludCByZXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1swXSwgQUZfSU5FVCwgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBcIlJBU1wiLCBSQVNfUE9SVCwgUkFTX1BPUlQsIFJBU19QT1JULFxuK1x0XHRcdCAgXCJSQVNcIixcbiBcdFx0XHQgIFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwiUkFTXCIsIFJBU19QT1JULCBSQVNfUE9SVCwgUkFTX1BPUlQsXG4rXHRcdFx0ICBcIlJBU1wiLFxuIFx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsIEFGX1VOU1BFQywgSVBQUk9UT19VRFAsXG4tXHRcdFx0ICBcIkguMjQ1XCIsIDAsIDAsIDAsXG4rXHRcdFx0ICBcIkguMjQ1XCIsXG4gXHRcdFx0ICBcdTAwMjZoMjQ1X2V4cF9wb2xpY3ksIDAsIGgyNDVfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcbi1cdFx0XHQgIFwiUS45MzFcIiwgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCxcbitcdFx0XHQgIFwiUS45MzFcIixcbiBcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHQgIFwiUS45MzFcIiwgUTkzMV9QT1JULCBROTMxX1BPUlQsIFE5MzFfUE9SVCxcbitcdFx0XHQgIFwiUS45MzFcIixcbiBcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5pbmRleCA1MDA1MDliMTc2NjNlZC4uNTA2YzU4MDM0NzYxNTUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbkBAIC00MCwxMiArNDAsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9oZWxwZXJfY291bnQgX19yZWFkX21vc3RseTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKG5mX2N0X25hdF9oZWxwZXJzX211dGV4KTtcbiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBuZl9jdF9uYXRfaGVscGVycyBfX3JlYWRfbW9zdGx5O1xuIFxuLS8qIFN0dXBpZCBoYXNoLCBidXQgY29sbGlzaW9uIGZyZWUgZm9yIHRoZSBkZWZhdWx0IHJlZ2lzdHJhdGlvbnMgb2YgdGhlXG4tICogaGVscGVycyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGhlbHBlcl9oYXNoKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKVxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGVscGVyX2hhc2goY29uc3QgY2hhciAqbmFtZSwgdTggcHJvdG9udW0pXG4ge1xuLVx0cmV0dXJuICgoKHR1cGxlLVx1MDAzZXNyYy5sM251bSBcdTAwM2NcdTAwM2MgOCkgfCB0dXBsZS1cdTAwM2Vkc3QucHJvdG9udW0pIF5cbi1cdFx0KF9fZm9yY2UgX191MTYpdHVwbGUtXHUwMDNlc3JjLnUuYWxsKSAlIG5mX2N0X2hlbHBlcl9oc2l6ZTtcbitcdHN0YXRpYyB1MzIgc2VlZDtcbitcdHUzMiBpbml0dmFsO1xuK1xuK1x0Z2V0X3JhbmRvbV9vbmNlKFx1MDAyNnNlZWQsIHNpemVvZihzZWVkKSk7XG4rXG4rXHRpbml0dmFsID0gc2VlZCBeIHByb3RvbnVtO1xuK1xuK1x0cmV0dXJuIGpoYXNoKG5hbWUsIHN0cmxlbihuYW1lKSwgaW5pdHZhbCkgJSBuZl9jdF9oZWxwZXJfaHNpemU7XG4gfVxuIFxuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpcbkBAIC01NCwxOCArNTgsMTggQEAgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZl9jdF9oZWxwZXJfaHNpemU7IGkrKykge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG4tXHRcdFx0aWYgKHN0cmNtcChoLVx1MDAzZW5hbWUsIG5hbWUpKVxuLVx0XHRcdFx0Y29udGludWU7XG4rXHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRpZiAoaC1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gTkZQUk9UT19VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGgtXHUwMDNldHVwbGUuc3JjLmwzbnVtICE9IGwzbnVtKVxuLVx0XHRcdFx0Y29udGludWU7XG4rXHRpID0gaGVscGVyX2hhc2gobmFtZSwgcHJvdG9udW0pO1xuIFxuLVx0XHRcdGlmIChoLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBwcm90b251bSlcbi1cdFx0XHRcdHJldHVybiBoO1xuLVx0XHR9XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaCwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaV0sIGhub2RlKSB7XG4rXHRcdGlmIChzdHJjbXAoaC1cdTAwM2VuYW1lLCBuYW1lKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGgtXHUwMDNlbmZwcm90byAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjYgaC1cdTAwM2VuZnByb3RvICE9IGwzbnVtKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoaC1cdTAwM2VsNHByb3RvID09IHByb3RvbnVtKVxuK1x0XHRcdHJldHVybiBoO1xuIFx0fVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTM2Myw5ICszNjcsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfbG9nKTtcbiBcbiBpbnQgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiB7XG4tXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgbWFzayA9IHsgLnNyYy51LmFsbCA9IGh0b25zKDB4RkZGRikgfTtcbi1cdHVuc2lnbmVkIGludCBoID0gaGVscGVyX2hhc2goXHUwMDI2bWUtXHUwMDNldHVwbGUpO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmN1cjtcbitcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IHJldCA9IDAsIGk7XG4gXG4gXHRCVUdfT04obWUtXHUwMDNlZXhwZWN0X2NsYXNzX21heCBcdTAwM2U9IE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyk7XG5AQCAtMzgyLDI5ICszODUsMTggQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRoID0gaGVscGVyX2hhc2gobWUtXHUwMDNlbmFtZSwgbWUtXHUwMDNlbDRwcm90byk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZl9jdF9oZWxwZXJfaHNpemU7IGkrKykge1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNm5mX2N0X2hlbHBlcl9oYXNoW2ldLCBobm9kZSkge1xuLVx0XHRcdGlmICghc3RyY21wKGN1ci1cdTAwM2VuYW1lLCBtZS1cdTAwM2VuYW1lKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gPT0gTkZQUk9UT19VTlNQRUMgfHxcbi1cdFx0XHQgICAgIGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gPT0gbWUtXHUwMDNldHVwbGUuc3JjLmwzbnVtKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9PSBtZS1cdTAwM2V0dXBsZS5kc3QucHJvdG9udW0pIHtcbi1cdFx0XHRcdHJldCA9IC1FQlVTWTtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaF0sIGhub2RlKSB7XG4rXHRcdGlmICghc3RyY21wKGN1ci1cdTAwM2VuYW1lLCBtZS1cdTAwM2VuYW1lKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChjdXItXHUwMDNlbmZwcm90byA9PSBORlBST1RPX1VOU1BFQyB8fFxuK1x0XHQgICAgIGN1ci1cdTAwM2VuZnByb3RvID09IG1lLVx1MDAzZW5mcHJvdG8pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY3VyLVx1MDAzZWw0cHJvdG8gPT0gbWUtXHUwMDNlbDRwcm90bykge1xuK1x0XHRcdHJldCA9IC1FQlVTWTtcbitcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0LyogYXZvaWQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIgZm9yIGF1dG9fYXNzaWduX2hlbHBlciAqL1xuLVx0aWYgKCEobWUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0NUX0hFTFBFUl9GX1VTRVJTUEFDRSkpIHtcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZuZl9jdF9oZWxwZXJfaGFzaFtoXSwgaG5vZGUpIHtcbi1cdFx0XHRpZiAobmZfY3RfdHVwbGVfc3JjX21hc2tfY21wKFx1MDAyNmN1ci1cdTAwM2V0dXBsZSwgXHUwMDI2bWUtXHUwMDNldHVwbGUsXG4tXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZtYXNrKSkge1xuLVx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2bWUtXHUwMDNlY3RfcmVmY250LCAxKTtcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZtZS1cdTAwM2Vobm9kZSwgXHUwMDI2bmZfY3RfaGVscGVyX2hhc2hbaF0pO1xuIFx0bmZfY3RfaGVscGVyX2NvdW50Kys7XG5AQCAtNDc5LDggKzQ3MSw3IEBAIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xuIFxuIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbi1cdFx0ICAgICAgIHUxNiBsM251bSwgdTE2IHByb3RvbnVtLCBjb25zdCBjaGFyICpuYW1lLFxuLVx0XHQgICAgICAgdTE2IGRlZmF1bHRfcG9ydCwgdTE2IHNwZWNfcG9ydCwgdTMyIGlkLFxuK1x0XHQgICAgICAgdTggbDNudW0sIHUxNiBwcm90b251bSwgY29uc3QgY2hhciAqbmFtZSxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwX3BvbCxcbiBcdFx0ICAgICAgIHUzMiBleHBlY3RfY2xhc3NfbWF4LFxuIFx0XHQgICAgICAgaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG5AQCAtNDkyLDkgKzQ4Myw4IEBAIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbiB7XG4gXHRtZW1zZXQoaGVscGVyLCAwLCBzaXplb2YoKmhlbHBlcikpO1xuIFxuLVx0aGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSA9IGwzbnVtO1xuLVx0aGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9IHByb3RvbnVtO1xuLVx0aGVscGVyLVx1MDAzZXR1cGxlLnNyYy51LmFsbCA9IGh0b25zKHNwZWNfcG9ydCk7XG4rXHRoZWxwZXItXHUwMDNlbmZwcm90byA9IGwzbnVtO1xuK1x0aGVscGVyLVx1MDAzZWw0cHJvdG8gPSBwcm90b251bTtcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwZXItXHUwMDNlaGVscCwgaGVscCk7XG4gXHRoZWxwZXItXHUwMDNlZnJvbV9ubGF0dHIgPSBmcm9tX25sYXR0cjtcbkBAIC01MDIsMTAgKzQ5Miw3IEBAIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcbiBcdHNucHJpbnRmKGhlbHBlci1cdTAwM2VuYXRfbW9kX25hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmF0X21vZF9uYW1lKSxcbiBcdFx0IE5GX05BVF9IRUxQRVJfUFJFRklYIFwiJXNcIiwgbmFtZSk7XG4gXG4tXHRpZiAoc3BlY19wb3J0ID09IGRlZmF1bHRfcG9ydClcbi1cdFx0c25wcmludGYoaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihoZWxwZXItXHUwMDNlbmFtZSksIFwiJXNcIiwgbmFtZSk7XG4tXHRlbHNlXG4tXHRcdHNucHJpbnRmKGhlbHBlci1cdTAwM2VuYW1lLCBzaXplb2YoaGVscGVyLVx1MDAzZW5hbWUpLCBcIiVzLSV1XCIsIG5hbWUsIGlkKTtcbitcdHNucHJpbnRmKGhlbHBlci1cdTAwM2VuYW1lLCBzaXplb2YoaGVscGVyLVx1MDAzZW5hbWUpLCBcIiVzXCIsIG5hbWUpO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRShleHBlY3RfY2xhc3NfbWF4IFx1MDAzZT0gTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbmluZGV4IDE5M2FiMzRkYjc5NWY5Li40ZTZiYWZlNDE0Mzc1MiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuQEAgLTIxLDkgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmhcdTAwM2VcbiBcbi0jZGVmaW5lIE1BWF9QT1JUUyA4XG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2RjY19jaGFubmVscyA9IDg7XG4gc3RhdGljIHVuc2lnbmVkIGludCBkY2NfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAwO1xuIC8qIFRoaXMgaXMgc2xvdywgYnV0IGl0J3Mgc2ltcGxlLiAtLVJSICovXG5AQCAtNDIsOCArMzksNiBAQCBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfQUxJQVMoXCJpcF9jb25udHJhY2tfaXJjXCIpO1xuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XG4gXG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFwicG9ydCBudW1iZXJzIG9mIElSQyBzZXJ2ZXJzXCIpO1xuIG1vZHVsZV9wYXJhbShtYXhfZGNjX2NoYW5uZWxzLCB1aW50LCAwNDAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9kY2NfY2hhbm5lbHMsIFwibWF4IG51bWJlciBvZiBleHBlY3RlZCBEQ0MgY2hhbm5lbHMgcGVyIFwiXG4gXHRcdFx0XHQgICBcIklSQyBzZXNzaW9uXCIpO1xuQEAgLTI1NCwxMyArMjQ5LDEzIEBAIHN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBpcmNbTUFYX1BPUlRTXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaXJjX3B0cltNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7XG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyYyBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaXJjX3B0ciBfX3JlYWRfbW9zdGx5O1xuIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaXJjX2V4cF9wb2xpY3k7XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4ge1xuLVx0aW50IGksIHJldDtcbitcdGludCByZXQ7XG4gXG4gXHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xuIFxuQEAgLTI4MiwxNyArMjc3LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKVxuIFx0aWYgKCFpcmNfYnVmZmVyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIElmIG5vIHBvcnQgZ2l2ZW4sIGRlZmF1bHQgdG8gc3RhbmRhcmQgaXJjIHBvcnQgKi9cbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBJUkNfUE9SVDtcbitcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNmlyYywgQUZfSU5FVCwgSVBQUk9UT19UQ1AsIEhFTFBFUl9OQU1FLFxuK1x0XHRcdCAgXHUwMDI2aXJjX2V4cF9wb2xpY3ksXG4rXHRcdFx0ICAwLCBoZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpKyspIHtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2aXJjW2ldLCBBRl9JTkVULCBJUFBST1RPX1RDUCwgSEVMUEVSX05BTUUsXG4tXHRcdFx0XHQgIElSQ19QT1JULCBwb3J0c1tpXSwgaSwgXHUwMDI2aXJjX2V4cF9wb2xpY3ksXG4tXHRcdFx0XHQgIDAsIGhlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbi1cdH1cbi1cbi1cdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKFx1MDAyNmlyY1swXSwgcG9ydHNfYywgaXJjX3B0cik7XG4rXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmlyYywgXHUwMDI2aXJjX3B0cik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRrZnJlZShpcmNfYnVmZmVyKTtcbkBAIC0zMDQsNyArMjkzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19pcmNfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoaXJjX3B0ciwgcG9ydHNfYyk7XG4rXHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoaXJjX3B0cik7XG4gXHRrZnJlZShpcmNfYnVmZmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jXG5pbmRleCA4OWQxY2Y3ZDY1MTJlNy4uY2FhMmIxMDFmYTllNWUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFx1MDAzZVxuIFxuICNkZWZpbmUgSEVMUEVSX05BTUVcdFwibmV0Ymlvcy1uc1wiXG4tI2RlZmluZSBOTUJEX1BPUlRcdDEzN1xuIFxuIE1PRFVMRV9BVVRIT1IoXCJQYXRyaWNrIE1jSGFyZHkgXHUwMDNja2FiZXJAdHJhc2gubmV0XHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlclwiKTtcbkBAIC01NCw3ICs1Myw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZClcbiBcdGV4cF9wb2xpY3kudGltZW91dCA9IHRpbWVvdXQ7XG4gXG4gXHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZoZWxwZXIsIEFGX0lORVQsIElQUFJPVE9fVURQLCBIRUxQRVJfTkFNRSxcbi1cdFx0XHQgIE5NQkRfUE9SVCwgTk1CRF9QT1JULCBOTUJEX1BPUlQsXG4gXHRcdFx0ICBcdTAwMjZleHBfcG9saWN5LCAwLCBuZXRiaW9zX25zX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcbiBcbiBcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNmhlbHBlciwgXHUwMDI2aGVscGVyX3B0cik7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuY1xuaW5kZXggNDlkMTUxMWU5OTIxODUuLmI0MDg1YWYzYWQxY2UwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jXG5AQCAtMzEsOCArMzEsOCBAQCBpbnQgbmZfY3RfaGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGlmICghaGVscGVyKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0aWYgKGhlbHBlci1cdTAwM2V0dXBsZS5zcmMubDNudW0gIT0gTkZQUk9UT19VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHQgICAgaGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSAhPSBwcm90bylcbitcdGlmIChoZWxwZXItXHUwMDNlbmZwcm90byAhPSBORlBST1RPX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBoZWxwZXItXHUwMDNlbmZwcm90byAhPSBwcm90bylcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbkBAIC02MCw3ICs2MCw3IEBAIGludCBuZl9jdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRyZXR1cm4gTkZfRFJPUDtcbiBcdH1cbiBcbi1cdGlmIChoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtICE9IHByb3RvKVxuK1x0aWYgKGhlbHBlci1cdTAwM2VsNHByb3RvICE9IHByb3RvKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0aGVscGVyX2NiID0gcmN1X2RlcmVmZXJlbmNlKGhlbHBlci1cdTAwM2VoZWxwKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbmluZGV4IDgwZmMxNGM4N2RkYzRiLi5jYmYzMmEzY2IxZjYxMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG5AQCAtNTQwLDcgKzU0MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19wcHRwX2luaXQodm9pZClcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZl9jdF9wcHRwX21hc3RlcikpO1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2cHB0cCwgQUZfSU5FVCwgSVBQUk9UT19UQ1AsXG4tXHRcdFx0ICBcInBwdHBcIiwgUFBUUF9DT05UUk9MX1BPUlQsIFBQVFBfQ09OVFJPTF9QT1JULCBQUFRQX0NPTlRST0xfUE9SVCxcbitcdFx0XHQgIFwicHB0cFwiLFxuIFx0XHRcdCAgXHUwMDI2cHB0cF9leHBfcG9saWN5LCAwLCBjb25udHJhY2tfcHB0cF9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4gXG4gXHRwcHRwLmRlc3Ryb3kgPSBncmVfcHB0cF9kZXN0cm95X3NpYmxpbmdzO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuY1xuaW5kZXggMzkwODVhY2Y3YTcxODUuLmEwNjU4ZjY5ZDc4ZmJiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmNcbkBAIC0zNCwxMSArMzQsNiBAQCBNT0RVTEVfQVVUSE9SKFwiTWljaGFsIFNjaG1pZHQgXHUwMDNjbXNjaG1pZHRAcmVkaGF0LmNvbVx1MDAzZVwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJTQU5FIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyXCIpO1xuIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihIRUxQRVJfTkFNRSk7XG4gXG4tI2RlZmluZSBNQVhfUE9SVFMgOFxuLXN0YXRpYyB1X2ludDE2X3QgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLVxuIHN0cnVjdCBzYW5lX3JlcXVlc3Qge1xuIFx0X19iZTMyIFJQQ19jb2RlO1xuICNkZWZpbmUgU0FORV9ORVRfU1RBUlQgICAgICA3ICAgLyogUlBDIGNvZGUgKi9cbkBAIC0xNjksOCArMTY0LDggQEAgc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZVtNQVhfUE9SVFMgKiAyXSBfX3JlYWRfbW9zdGx5O1xuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2FuZV9wdHJbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqc2FuZV9wdHIgX19yZWFkX21vc3RseTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNhbmVfZXhwX3BvbGljeSA9IHtcbiBcdC5tYXhfZXhwZWN0ZWRcdD0gMSxcbkBAIC0xNzksMzIgKzE3NCwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNhbmVfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3NhbmVfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2FuZV9wdHIsIHBvcnRzX2MgKiAyKTtcbitcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzYW5lX3B0cik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zYW5lX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NhbmVfbWFzdGVyKSk7XG4gXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jKytdID0gU0FORV9QT1JUO1xuLVxuLVx0LyogRklYTUUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB3aGV0aGVyIElQdjQgYW5kIElQdjYgY29ubmVjdGlvbnNcbi1cdFx0IGFyZSB0cmFja2VkIG9yIG5vdCAtIFlLICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0c19jOyBpKyspIHtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2FuZVsyICogaV0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0FORV9QT1JULCBwb3J0c1tpXSwgcG9ydHNbaV0sXG4tXHRcdFx0XHQgIFx1MDAyNnNhbmVfZXhwX3BvbGljeSwgMCwgaGVscCwgTlVMTCxcbi1cdFx0XHRcdCAgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzYW5lWzIgKiBpICsgMV0sIEFGX0lORVQ2LCBJUFBST1RPX1RDUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNBTkVfUE9SVCwgcG9ydHNbaV0sIHBvcnRzW2ldLFxuLVx0XHRcdFx0ICBcdTAwMjZzYW5lX2V4cF9wb2xpY3ksIDAsIGhlbHAsIE5VTEwsXG4tXHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi1cdH1cbitcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnNhbmUsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1RDUCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuK1x0XHRcdCAgXHUwMDI2c2FuZV9leHBfcG9saWN5LCAwLCBoZWxwLCBOVUxMLFxuK1x0XHRcdCAgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2FuZSwgcG9ydHNfYyAqIDIsIHNhbmVfcHRyKTtcbitcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2c2FuZSwgXHUwMDI2c2FuZV9wdHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5pbmRleCA1ZWMzYTRhNGJiZDcwNy4uZDBiODViOGFkMWU2ZDggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbkBAIC0zNSwxMiArMzUsNiBAQCBNT0RVTEVfREVTQ1JJUFRJT04oXCJTSVAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcIik7XG4gTU9EVUxFX0FMSUFTKFwiaXBfY29ubnRyYWNrX3NpcFwiKTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTXHQ4XG4tc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107XG4tc3RhdGljIHVuc2lnbmVkIGludCBwb3J0c19jO1xuLW1vZHVsZV9wYXJhbV9hcnJheShwb3J0cywgdXNob3J0LCBcdTAwMjZwb3J0c19jLCAwNDAwKTtcbi1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcInBvcnQgbnVtYmVycyBvZiBTSVAgc2VydmVyc1wiKTtcbi1cbiBzdGF0aWMgdW5zaWduZWQgaW50IHNpcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSBTSVBfVElNRU9VVDtcbiBtb2R1bGVfcGFyYW0oc2lwX3RpbWVvdXQsIHVpbnQsIDA2MDApO1xuIE1PRFVMRV9QQVJNX0RFU0Moc2lwX3RpbWVvdXQsIFwidGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvblwiKTtcbkBAIC0xNzY0LDggKzE3NTgsOCBAQCBzdGF0aWMgaW50IHNpcF9oZWxwX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdHJldHVybiBwcm9jZXNzX3NpcF9tc2coc2tiLCBjdCwgcHJvdG9mZiwgZGF0YW9mZiwgXHUwMDI2ZHB0ciwgXHUwMDI2ZGF0YWxlbik7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbTUFYX1BPUlRTICogNF0gX19yZWFkX21vc3RseTtcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnNpcF9wdHJbTUFYX1BPUlRTICogNF0gX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwWzJdIF9fcmVhZF9tb3N0bHk7XG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpzaXBfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzaXBfZXhwX3BvbGljeVtTSVBfRVhQRUNUX01BWCArIDFdID0ge1xuIFx0W1NJUF9FWFBFQ1RfU0lHTkFMTElOR10gPSB7XG5AQCAtMTc5MiwzOCArMTc4NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICsgMVxuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc2lwX2Zpbmkodm9pZClcbiB7XG4tXHRuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHNpcF9wdHIsIHBvcnRzX2MgKiA0KTtcbitcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc2lwX3B0ciwgMik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zaXBfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBpLCByZXQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mX2N0X3NpcF9tYXN0ZXIpKTtcbiBcbi1cdGlmIChwb3J0c19jID09IDApXG4tXHRcdHBvcnRzW3BvcnRzX2MrK10gPSBTSVBfUE9SVDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBvcnRzX2M7IGkrKykge1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFNJUF9QT1JULCBwb3J0c1tpXSwgaSxcbi1cdFx0XHRcdCAgc2lwX2V4cF9wb2xpY3ksIFNJUF9FWFBFQ1RfTUFYLCBzaXBfaGVscF91ZHAsXG4tXHRcdFx0XHQgIE5VTEwsIFRISVNfTU9EVUxFKTtcbi1cdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzQgKiBpICsgMV0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3RjcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGkgKyAyXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3VkcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZzaXBbNCAqIGkgKyAzXSwgQUZfSU5FVDYsIElQUFJPVE9fVENQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgU0lQX1BPUlQsIHBvcnRzW2ldLCBpLFxuLVx0XHRcdFx0ICBzaXBfZXhwX3BvbGljeSwgU0lQX0VYUEVDVF9NQVgsIHNpcF9oZWxwX3RjcCxcbi1cdFx0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuLVx0fVxuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzBdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19VRFAsXG4rXHRcdFx0ICBIRUxQRVJfTkFNRSxcbitcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdWRwLFxuK1x0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuK1x0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2c2lwWzFdLCBORlBST1RPX1VOU1BFQywgSVBQUk9UT19UQ1AsXG4rXHRcdFx0ICBIRUxQRVJfTkFNRSxcbitcdFx0XHQgIHNpcF9leHBfcG9saWN5LCBTSVBfRVhQRUNUX01BWCwgc2lwX2hlbHBfdGNwLFxuK1x0XHRcdCAgTlVMTCwgVEhJU19NT0RVTEUpO1xuIFxuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc2lwLCBwb3J0c19jICogNCwgc2lwX3B0cik7XG4rXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzaXAsIDIsIHNpcF9wdHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyc1xcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmNcbmluZGV4IGI2ZmNlNTcwM2ZjZTc3Li4xMDk5ODZkNWQ1NWU2OSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NubXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc25tcC5jXG5AQCAtMTQsOCArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zbm1wLmhcdTAwM2VcbiBcbi0jZGVmaW5lIFNOTVBfUE9SVFx0MTYxXG4tXG4gTU9EVUxFX0FVVEhPUihcIkppcmkgT2xzYSBcdTAwM2Nqb2xzYUByZWRoYXQuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIlNOTVAgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5AQCAtNTUsNyArNTMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc25tcF9pbml0KHZvaWQpXG4gXHRleHBfcG9saWN5LnRpbWVvdXQgPSB0aW1lb3V0O1xuIFxuIFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2aGVscGVyLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHQgIFwic25tcFwiLCBTTk1QX1BPUlQsIFNOTVBfUE9SVCwgU05NUF9QT1JULFxuK1x0XHRcdCAgXCJzbm1wXCIsXG4gXHRcdFx0ICBcdTAwMjZleHBfcG9saWN5LCAwLCBzbm1wX2Nvbm50cmFja19oZWxwLCBOVUxMLFxuIFx0XHRcdCAgVEhJU19NT0RVTEUpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuY1xuaW5kZXggNDM5M2M0MzVhYTM1NDkuLmE2OTU1OWVkZjliMzYzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmNcbkBAIC0yNiwxMiArMjYsNiBAQCBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfQUxJQVMoXCJpcF9jb25udHJhY2tfdGZ0cFwiKTtcbiBNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xuIFxuLSNkZWZpbmUgTUFYX1BPUlRTIDhcbi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbTUFYX1BPUlRTXTtcbi1zdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7XG4tbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIFx1MDAyNnBvcnRzX2MsIDA0MDApO1xuLU1PRFVMRV9QQVJNX0RFU0MocG9ydHMsIFwiUG9ydCBudW1iZXJzIG9mIFRGVFAgc2VydmVyc1wiKTtcbi1cbiBuZl9uYXRfdGZ0cF9ob29rX2ZuIF9fcmN1ICpuZl9uYXRfdGZ0cF9ob29rIF9fcmVhZF9tb3N0bHk7XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3RmdHBfaG9vayk7XG4gXG5AQCAtOTUsOCArODksOCBAQCBzdGF0aWMgaW50IHRmdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHBbTUFYX1BPUlRTICogMl0gX19yZWFkX21vc3RseTtcbi1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyW01BWF9QT1JUUyAqIDJdIF9fcmVhZF9tb3N0bHk7XG4rc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHRmdHAgX19yZWFkX21vc3RseTtcbitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKnRmdHBfcHRyIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7XG4gXHQubWF4X2V4cGVjdGVkXHQ9IDEsXG5AQCAtMTA1LDMwICs5OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHRmdHBfZXhwX3BvbGljeSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX3RmdHBfZmluaSh2b2lkKVxuIHtcbi1cdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIodGZ0cF9wdHIsIHBvcnRzX2MgKiAyKTtcbitcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcih0ZnRwX3B0cik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja190ZnRwX2luaXQodm9pZClcbiB7XG4tXHRpbnQgaSwgcmV0O1xuK1x0aW50IHJldDtcbiBcbiBcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oMCk7XG4gXG4tXHRpZiAocG9ydHNfYyA9PSAwKVxuLVx0XHRwb3J0c1twb3J0c19jKytdID0gVEZUUF9QT1JUO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcG9ydHNfYzsgaSsrKSB7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGldLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdCAgSEVMUEVSX05BTUUsIFRGVFBfUE9SVCwgcG9ydHNbaV0sIGksXG4tXHRcdFx0XHQgIFx1MDAyNnRmdHBfZXhwX3BvbGljeSwgMCwgdGZ0cF9oZWxwLCBOVUxMLFxuLVx0XHRcdFx0ICBUSElTX01PRFVMRSk7XG4tXHRcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHBbMiAqIGkgKyAxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuLVx0XHRcdFx0ICBIRUxQRVJfTkFNRSwgVEZUUF9QT1JULCBwb3J0c1tpXSwgaSxcbi1cdFx0XHRcdCAgXHUwMDI2dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsXG4tXHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbi1cdH1cbitcdG5mX2N0X2hlbHBlcl9pbml0KFx1MDAyNnRmdHAsIE5GUFJPVE9fVU5TUEVDLCBJUFBST1RPX1VEUCxcbitcdFx0XHQgIEhFTFBFUl9OQU1FLFxuK1x0XHRcdCAgXHUwMDI2dGZ0cF9leHBfcG9saWN5LCAwLCB0ZnRwX2hlbHAsIE5VTEwsXG4rXHRcdFx0ICBUSElTX01PRFVMRSk7XG4gXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3Rlcih0ZnRwLCBwb3J0c19jICogMiwgdGZ0cF9wdHIpO1xuK1x0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZ0ZnRwLCBcdTAwMjZ0ZnRwX3B0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byByZWdpc3RlciBoZWxwZXJzXFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuaW5kZXggNjNmZjZiNGQ1ZDIxNGEuLjhhYzMyNmUxZWI1YmE5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbkBAIC0zOSwxMiArMzksNiBAQCBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKm5mX25hdF9ieXNvdXJjZSBfX3JlYWRfbW9zdGx5O1xuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7XG4gc3RhdGljIHNpcGhhc2hfYWxpZ25lZF9rZXlfdCBuZl9uYXRfaGFzaF9ybmQ7XG4gXG4tc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2IHtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgX19yY3UgKmVudHJpZXM7XG4tXG4tXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7XG4tfTtcbi1cbiBzdHJ1Y3QgbmZfbmF0X2hvb2tzX25ldCB7XG4gXHRzdHJ1Y3QgbmZfaG9va19vcHMgKm5hdF9ob29rX29wcztcbiBcdHVuc2lnbmVkIGludCB1c2VycztcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xuaW5kZXggMDdmNTFmZTc1ZmJlNDMuLjY0YjliYWMyMjhlYWU4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uY1xuQEAgLTc3MCw2ICs3NzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY0X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfUFJFX1JPVVRJTkcsXG4gXHRcdC5wcmlvcml0eVx0PSBORl9JUF9QUklfTkFUX0RTVCxcbitcdFx0Lmhvb2tfb3BzX3R5cGVcdD0gTkZfSE9PS19PUF9OQVQsXG4gXHR9LFxuIFx0LyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqL1xuIFx0e1xuQEAgLTc3Nyw2ICs3NzgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY0X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjQsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfUE9TVF9ST1VUSU5HLFxuIFx0XHQucHJpb3JpdHlcdD0gTkZfSVBfUFJJX05BVF9TUkMsXG4rXHRcdC5ob29rX29wc190eXBlXHQ9IE5GX0hPT0tfT1BfTkFULFxuIFx0fSxcbiBcdC8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi9cbiBcdHtcbkBAIC03ODQsNiArNzg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2NF9vcHNbXSA9IHtcbiBcdFx0LnBmXHRcdD0gTkZQUk9UT19JUFY0LFxuIFx0XHQuaG9va251bVx0PSBORl9JTkVUX0xPQ0FMX09VVCxcbiBcdFx0LnByaW9yaXR5XHQ9IE5GX0lQX1BSSV9OQVRfRFNULFxuK1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2Ugc291cmNlICovXG4gXHR7XG5AQCAtNzkxLDYgKzc5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjRfb3BzW10gPSB7XG4gXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNCxcbiBcdFx0Lmhvb2tudW1cdD0gTkZfSU5FVF9MT0NBTF9JTixcbiBcdFx0LnByaW9yaXR5XHQ9IE5GX0lQX1BSSV9OQVRfU1JDLFxuK1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gfTtcbiBcbkBAIC0xMDMxLDYgKzEwMzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY2X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfUFJFX1JPVVRJTkcsXG4gXHRcdC5wcmlvcml0eVx0PSBORl9JUDZfUFJJX05BVF9EU1QsXG4rXHRcdC5ob29rX29wc190eXBlXHQ9IE5GX0hPT0tfT1BfTkFULFxuIFx0fSxcbiBcdC8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBzb3VyY2UgKi9cbiBcdHtcbkBAIC0xMDM4LDYgKzEwNDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9pcHY2X29wc1tdID0ge1xuIFx0XHQucGZcdFx0PSBORlBST1RPX0lQVjYsXG4gXHRcdC5ob29rbnVtXHQ9IE5GX0lORVRfUE9TVF9ST1VUSU5HLFxuIFx0XHQucHJpb3JpdHlcdD0gTkZfSVA2X1BSSV9OQVRfU1JDLFxuK1x0XHQuaG9va19vcHNfdHlwZVx0PSBORl9IT09LX09QX05BVCxcbiBcdH0sXG4gXHQvKiBCZWZvcmUgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIGRlc3RpbmF0aW9uICovXG4gXHR7XG5AQCAtMTA0NSw2ICsxMDUxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfaXB2Nl9vcHNbXSA9IHtcbiBcdFx0LnBmXHRcdD0gTkZQUk9UT19JUFY2LFxuIFx0XHQuaG9va251bVx0PSBORl9JTkVUX0xPQ0FMX09VVCxcbiBcdFx0LnByaW9yaXR5XHQ9IE5GX0lQNl9QUklfTkFUX0RTVCxcbitcdFx0Lmhvb2tfb3BzX3R5cGVcdD0gTkZfSE9PS19PUF9OQVQsXG4gXHR9LFxuIFx0LyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqL1xuIFx0e1xuQEAgLTEwNTIsNiArMTA1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgbmZfbmF0X2lwdjZfb3BzW10gPSB7XG4gXHRcdC5wZlx0XHQ9IE5GUFJPVE9fSVBWNixcbiBcdFx0Lmhvb2tudW1cdD0gTkZfSU5FVF9MT0NBTF9JTixcbiBcdFx0LnByaW9yaXR5XHQ9IE5GX0lQNl9QUklfTkFUX1NSQyxcbitcdFx0Lmhvb2tfb3BzX3R5cGVcdD0gTkZfSE9PS19PUF9OQVQsXG4gXHR9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li41NjY1NWNiN2ZlMmFkMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC02Nyw3ICs2Nyw3IEBAIG5mbmxfdXNlcnNwYWNlX2N0aGVscGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jdGhlbHBlcl90dXBsZV9wb2xbTkZDVEhfVFVQTEVfTUFYKzFdID0ge1xuLVx0W05GQ1RIX1RVUExFX0wzUFJPVE9OVU1dID0geyAudHlwZSA9IE5MQV9VMTYsIH0sXG4rXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcbiBcdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4gfTtcbiBcbkBAIC0yNTQsNyArMjU0LDggQEAgbmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4gXHRoZWxwZXItXHUwMDNlZGF0YV9sZW4gPSBzaXplO1xuIFxuIFx0aGVscGVyLVx1MDAzZWZsYWdzIHw9IE5GX0NUX0hFTFBFUl9GX1VTRVJTUEFDRTtcbi1cdG1lbWNweShcdTAwMjZoZWxwZXItXHUwMDNldHVwbGUsIHR1cGxlLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSkpO1xuK1x0aGVscGVyLVx1MDAzZW5mcHJvdG8gPSB0dXBsZS1cdTAwM2VzcmMubDNudW07XG4rXHRoZWxwZXItXHUwMDNlbDRwcm90byA9IHR1cGxlLVx1MDAzZWRzdC5wcm90b251bTtcbiBcbiBcdGhlbHBlci1cdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xuIFx0aGVscGVyLVx1MDAzZWhlbHAgPSBuZm5sX3VzZXJzcGFjZV9jdGhlbHBlcjtcbkBAIC00NDksOCArNDUwLDggQEAgc3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIFx0XHRpZiAoc3RybmNtcChjdXItXHUwMDNlbmFtZSwgaGVscGVyX25hbWUsIE5GX0NUX0hFTFBFUl9OQU1FX0xFTikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdGlmICgodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9FWENMKVxuQEAgLTQ3OSwxMCArNDgwLDEwIEBAIG5mbmxfY3RoZWxwZXJfZHVtcF90dXBsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORkNUSF9UVVBMRV9MM1BST1RPTlVNLFxuLVx0XHRcdCBodG9ucyhoZWxwZXItXHUwMDNldHVwbGUuc3JjLmwzbnVtKSkpXG4rXHRcdFx0IGh0b25zKGhlbHBlci1cdTAwM2VuZnByb3RvKSkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBORkNUSF9UVVBMRV9MNFBST1RPTlVNLCBoZWxwZXItXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtKSlcbitcdGlmIChubGFfcHV0X3U4KHNrYiwgTkZDVEhfVFVQTEVfTDRQUk9UT05VTSwgaGVscGVyLVx1MDAzZWw0cHJvdG8pKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdG5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpO1xuQEAgLTY2MSw4ICs2NjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICh0dXBsZV9zZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c2tiMiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xuQEAgLTcyMSw4ICs3MjIsOCBAQCBzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICh0dXBsZV9zZXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2V0dXBsZS5zcmMubDNudW0gfHxcbi1cdFx0ICAgICB0dXBsZS5kc3QucHJvdG9udW0gIT0gY3VyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHRcdCAgICAodHVwbGUuc3JjLmwzbnVtICE9IGN1ci1cdTAwM2VuZnByb3RvIHx8XG4rXHRcdCAgICAgdHVwbGUuZHN0LnByb3RvbnVtICE9IGN1ci1cdTAwM2VsNHByb3RvKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0Zm91bmQgPSB0cnVlO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmNcbmluZGV4IDE3MGQzZGI4NjBjNTY0Li42NmMyMDE2ZjYwNDlkNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1xuQEAgLTE2OCw3ICsxNjgsNyBAQCBzdGF0aWMgaW50IGN0dGltZW91dF9uZXdfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZnJlZV90aW1lb3V0X3BvbGljeTtcbiBcbi1cdHN0cmNweSh0aW1lb3V0LVx1MDAzZW5hbWUsIG5sYV9kYXRhKGNkYVtDVEFfVElNRU9VVF9OQU1FXSkpO1xuK1x0bmxhX3N0cnNjcHkodGltZW91dC1cdTAwM2VuYW1lLCBjZGFbQ1RBX1RJTUVPVVRfTkFNRV0sIHNpemVvZih0aW1lb3V0LVx1MDAzZW5hbWUpKTtcbiBcdHRpbWVvdXQtXHUwMDNldGltZW91dC1cdTAwM2VsM251bSA9IGwzbnVtO1xuIFx0dGltZW91dC1cdTAwM2V0aW1lb3V0LVx1MDAzZWw0cHJvdG8gPSBsNHByb3RvO1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnRpbWVvdXQtXHUwMDNldGltZW91dC1cdTAwM2VyZWZjbnQsIDEpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuaW5kZXggNTYyM2MxOGZjZDEyZjAuLjk1MDA1ZTlhNjA2Njg4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfcHV0X25mdF9mdF9pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IHByaW9yaXR5LFxuIFx0XHRcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXG4ge1xuIFx0dTE2IGV2ZW50ID0gbmZubF9tc2dfdHlwZShORk5MX1NVQlNZU19IT09LLCBORk5MX01TR19IT09LX0dFVCk7XG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0cmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX1BSSU9SSVRZLCBodG9ubChvcHMtXHUwMDNlcHJpb3JpdHkpKTtcbitcdHJldCA9IG5sYV9wdXRfYmUzMihubHNrYiwgTkZOTEFfSE9PS19QUklPUklUWSwgaHRvbmwocHJpb3JpdHkpKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuQEAgLTMzNyw2ICszMzcsMzAgQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGVcbiBcdHJldHVybiBob29rX2hlYWQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuK1x0XHRcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXG4re1xuK1x0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4rXHRzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzO1xuK1x0aW50IGksIGVycjtcbitcbitcdGlmICghZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4rXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxuK1x0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksIHNlcSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiB7XG5AQCAtMzY1LDggKzM4OSwxMyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbiBcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4gXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbi1cdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LFxuLVx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4rXHRcdGlmIChvcHNbaV0tXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbitcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXG4rXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSxcbitcdFx0XHRcdFx0XHQgb3BzW2ldLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4rXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCAwM2E4OGM3N2UwZjAyOC4uMzU4YjkyODdlMTJlODcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5AQCAtMTI5Nyw2ICsxMjk3LDE3IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4rc3RhdGljIHZvaWQgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnRoaXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiAqZXhwZm47XG4rXG4rXHRleHBmbiA9IG5mX2N0X2hlbHBlcl9leHBlY3Rmbl9maW5kX2J5X25hbWUoXCJuYXQtZm9sbG93LW1hc3RlclwiKTtcbitcdGlmIChleHBmbilcbitcdFx0ZXhwZm4tXHUwMDNlZXhwZWN0Zm4oY3QsIHRoaXMpO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbkBAIC0xMzQyLDYgKzEzNTMsMTMgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0XHQgICAgICAgICAgcHJpdi1cdTAwM2VsNHByb3RvLCBOVUxMLCBcdTAwMjZwcml2LVx1MDAzZWRwb3J0KTtcbiBcdGV4cC1cdTAwM2V0aW1lb3V0ICs9IHByaXYtXHUwMDNldGltZW91dDtcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuK1x0aWYgKGN0LVx1MDAzZXN0YXR1cyBcdTAwMjYgSVBTX05BVF9NQVNLKSB7XG4rXHRcdGV4cC1cdTAwM2VzYXZlZF9wcm90by50Y3AucG9ydCA9IHByaXYtXHUwMDNlZHBvcnQ7XG4rXHRcdGV4cC1cdTAwM2VkaXIgPSAhZGlyO1xuK1x0XHRleHAtXHUwMDNlZXhwZWN0Zm4gPSBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXI7XG4rXHR9XG4rI2VuZGlmXG4gXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4gXG5AQCAtMTM3NSw2ICsxMzkzLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIH07XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbitzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBuZnRfY3RfbmF0IF9fcmVhZF9tb3N0bHkgPSB7XG4rXHQubmFtZSA9IFwibmZ0X2N0LWZvbGxvdy1tYXN0ZXJcIixcbitcdC5leHBlY3RmbiA9IG5mdF9jdF9uYXRfZm9sbG93X21hc3Rlcixcbit9O1xuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbnQgX19pbml0IG5mdF9jdF9tb2R1bGVfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG5AQCAtMTQwMCw2ICsxNDI1LDkgQEAgc3RhdGljIGludCBfX2luaXQgbmZ0X2N0X21vZHVsZV9pbml0KHZvaWQpXG4gXHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFx1MDAyNm5mdF9jdF90aW1lb3V0X29ial90eXBlKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyNDtcbisjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuK1x0bmZfY3RfaGVscGVyX2V4cGVjdGZuX3JlZ2lzdGVyKFx1MDAyNm5mdF9jdF9uYXQpO1xuICNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQyNSw2ICsxNDUzLDEzIEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZnRfY3RfbW9kdWxlX2V4aXQodm9pZClcbiBcdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfaGVscGVyX29ial90eXBlKTtcbiBcdG5mdF91bnJlZ2lzdGVyX2V4cHIoXHUwMDI2bmZ0X25vdHJhY2tfdHlwZSk7XG4gXHRuZnRfdW5yZWdpc3Rlcl9leHByKFx1MDAyNm5mdF9jdF90eXBlKTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuK1x0bmZfY3RfaGVscGVyX2V4cGVjdGZuX3VucmVnaXN0ZXIoXHUwMDI2bmZ0X2N0X25hdCk7XG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdG5mX2N0X2hlbHBlcl9leHBlY3Rmbl9kZXN0cm95KFx1MDAyNm5mdF9jdF9uYXQpO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rI2VuZGlmXG4gfVxuIFxuIG1vZHVsZV9pbml0KG5mdF9jdF9tb2R1bGVfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jXG5pbmRleCAwMThiYmI2ZGY0Y2U0My4uZWZjMjVlNzg4YTFjNTIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xuQEAgLTU0NCw4ICs1NDQsNyBAQCBzdGF0aWMgaW50IG5mdF9hcnJheV9pbnRlcnZhbHNfYWxsb2Moc3RydWN0IG5mdF9hcnJheSAqYXJyYXksIHUzMiBtYXhfaW50ZXJ2YWxzKVxuIFx0aWYgKCFpbnRlcnZhbHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0aWYgKGFycmF5LVx1MDAzZWludGVydmFscylcbi1cdFx0a3ZmcmVlKGFycmF5LVx1MDAzZWludGVydmFscyk7XG4rXHRrdmZyZWUoYXJyYXktXHUwMDNlaW50ZXJ2YWxzKTtcbiBcbiBcdGFycmF5LVx1MDAzZWludGVydmFscyA9IGludGVydmFscztcbiBcdGFycmF5LVx1MDAzZW1heF9pbnRlcnZhbHMgPSBtYXhfaW50ZXJ2YWxzO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuY1xuaW5kZXggNGU2NzA4YzIzOTIyYjkuLmU2NDExNmJmMjYzNzg2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmNcbkBAIC0xOTIwLDkgKzE5MjAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHh0X3RhcmdldF9zZXFfb3BzID0ge1xuIFx0LnNob3dcdD0geHRfdGFyZ2V0X3NlcV9zaG93LFxuIH07XG4gXG4tI2RlZmluZSBGT1JNQVRfVEFCTEVTXHRcIl90YWJsZXNfbmFtZXNcIlxuLSNkZWZpbmVcdEZPUk1BVF9NQVRDSEVTXHRcIl90YWJsZXNfbWF0Y2hlc1wiXG4tI2RlZmluZSBGT1JNQVRfVEFSR0VUUyBcdFwiX3RhYmxlc190YXJnZXRzXCJcbisjZGVmaW5lIEZPUk1BVF9UQUJMRVNcdFwiJXNfdGFibGVzX25hbWVzXCJcbisjZGVmaW5lXHRGT1JNQVRfTUFUQ0hFU1x0XCIlc190YWJsZXNfbWF0Y2hlc1wiXG4rI2RlZmluZSBGT1JNQVRfVEFSR0VUU1x0XCIlc190YWJsZXNfdGFyZ2V0c1wiXG4gXG4gI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovXG4gXG5AQCAtMjAzMyw4ICsyMDMzLDcgQEAgaW50IHh0X3Byb3RvX2luaXQoc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZilcbiBcdHJvb3RfdWlkID0gbWFrZV9rdWlkKG5ldC1cdTAwM2V1c2VyX25zLCAwKTtcbiBcdHJvb3RfZ2lkID0gbWFrZV9rZ2lkKG5ldC1cdTAwM2V1c2VyX25zLCAwKTtcbiBcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBQkxFUywgc2l6ZW9mKGJ1ZikpO1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBQkxFUywgeHRfcHJlZml4W2FmXSk7XG4gXHRwcm9jID0gcHJvY19jcmVhdGVfbmV0X2RhdGEoYnVmLCAwNDQwLCBuZXQtXHUwMDNlcHJvY19uZXQsIFx1MDAyNnh0X3RhYmxlX3NlcV9vcHMsXG4gXHRcdFx0c2l6ZW9mKHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUpLFxuIFx0XHRcdCh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWYpO1xuQEAgLTIwNDMsOCArMjA0Miw3IEBAIGludCB4dF9wcm90b19pbml0KHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgYWYpXG4gXHRpZiAodWlkX3ZhbGlkKHJvb3RfdWlkKSBcdTAwMjZcdTAwMjYgZ2lkX3ZhbGlkKHJvb3RfZ2lkKSlcbiBcdFx0cHJvY19zZXRfdXNlcihwcm9jLCByb290X3VpZCwgcm9vdF9naWQpO1xuIFxuLVx0c3Ryc2NweShidWYsIHh0X3ByZWZpeFthZl0sIHNpemVvZihidWYpKTtcbi1cdHN0cmxjYXQoYnVmLCBGT1JNQVRfTUFUQ0hFUywgc2l6ZW9mKGJ1ZikpO1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX01BVENIRVMsIHh0X3ByZWZpeFthZl0pO1xuIFx0cHJvYyA9IHByb2NfY3JlYXRlX3NlcV9wcml2YXRlKGJ1ZiwgMDQ0MCwgbmV0LVx1MDAzZXByb2NfbmV0LFxuIFx0XHRcdFx1MDAyNnh0X21hdGNoX3NlcV9vcHMsIHNpemVvZihzdHJ1Y3QgbmZfbXR0Z190cmF2KSxcbiBcdFx0XHQodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFmKTtcbkBAIC0yMDUzLDggKzIwNTEsNyBAQCBpbnQgeHRfcHJvdG9faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKVxuIFx0aWYgKHVpZF92YWxpZChyb290X3VpZCkgXHUwMDI2XHUwMDI2IGdpZF92YWxpZChyb290X2dpZCkpXG4gXHRcdHByb2Nfc2V0X3VzZXIocHJvYywgcm9vdF91aWQsIHJvb3RfZ2lkKTtcbiBcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBUkdFVFMsIHNpemVvZihidWYpKTtcbitcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEZPUk1BVF9UQVJHRVRTLCB4dF9wcmVmaXhbYWZdKTtcbiBcdHByb2MgPSBwcm9jX2NyZWF0ZV9zZXFfcHJpdmF0ZShidWYsIDA0NDAsIG5ldC1cdTAwM2Vwcm9jX25ldCxcbiBcdFx0XHQgXHUwMDI2eHRfdGFyZ2V0X3NlcV9vcHMsIHNpemVvZihzdHJ1Y3QgbmZfbXR0Z190cmF2KSxcbiBcdFx0XHQgKHZvaWQgKikodW5zaWduZWQgbG9uZylhZik7XG5AQCAtMjA2OCwxMyArMjA2NSwxMSBAQCBpbnQgeHRfcHJvdG9faW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50OF90IGFmKVxuIFxuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIG91dF9yZW1vdmVfbWF0Y2hlczpcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX01BVENIRVMsIHNpemVvZihidWYpKTtcbitcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEZPUk1BVF9NQVRDSEVTLCB4dF9wcmVmaXhbYWZdKTtcbiBcdHJlbW92ZV9wcm9jX2VudHJ5KGJ1ZiwgbmV0LVx1MDAzZXByb2NfbmV0KTtcbiBcbiBvdXRfcmVtb3ZlX3RhYmxlczpcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBQkxFUywgc2l6ZW9mKGJ1ZikpO1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBQkxFUywgeHRfcHJlZml4W2FmXSk7XG4gXHRyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gb3V0OlxuIFx0cmV0dXJuIC0xO1xuQEAgLTIwODcsMTYgKzIwODIsMTMgQEAgdm9pZCB4dF9wcm90b19maW5pKHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgYWYpXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gXHRjaGFyIGJ1ZltYVF9GVU5DVElPTl9NQVhOQU1FTEVOXTtcbiBcbi1cdHN0cnNjcHkoYnVmLCB4dF9wcmVmaXhbYWZdLCBzaXplb2YoYnVmKSk7XG4tXHRzdHJsY2F0KGJ1ZiwgRk9STUFUX1RBQkxFUywgc2l6ZW9mKGJ1ZikpO1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgRk9STUFUX1RBQkxFUywgeHRfcHJlZml4W2FmXSk7XG4gXHRyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gXG4tXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xuLVx0c3RybGNhdChidWYsIEZPUk1BVF9UQVJHRVRTLCBzaXplb2YoYnVmKSk7XG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfVEFSR0VUUywgeHRfcHJlZml4W2FmXSk7XG4gXHRyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gXG4tXHRzdHJzY3B5KGJ1ZiwgeHRfcHJlZml4W2FmXSwgc2l6ZW9mKGJ1ZikpO1xuLVx0c3RybGNhdChidWYsIEZPUk1BVF9NQVRDSEVTLCBzaXplb2YoYnVmKSk7XG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBGT1JNQVRfTUFUQ0hFUywgeHRfcHJlZml4W2FmXSk7XG4gXHRyZW1vdmVfcHJvY19lbnRyeShidWYsIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4gI2VuZGlmIC8qQ09ORklHX1BST0NfRlMqL1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmNcbmluZGV4IDkzZjA2NDMwNjkwMWMwLi4yNjVkMjE2OTc4NDdiZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfVENQT1BUU1RSSVAuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9UQ1BPUFRTVFJJUC5jXG5AQCAtMTYsNyArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X1RDUE9QVFNUUklQLmhcdTAwM2VcbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcHRsZW4oY29uc3QgdV9pbnQ4X3QgKm9wdCwgdW5zaWduZWQgaW50IG9mZnNldClcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcHRsZW4oY29uc3QgdTggKm9wdCwgdW5zaWduZWQgaW50IG9mZnNldClcbiB7XG4gXHQvKiBCZXdhcmUgemVyby1sZW5ndGggb3B0aW9uczogbWFrZSBmaW5pdGUgcHJvZ3Jlc3MgKi9cbiBcdGlmIChvcHRbb2Zmc2V0XSBcdTAwM2M9IFRDUE9QVF9OT1AgfHwgb3B0W29mZnNldCsxXSA9PSAwKVxuQEAgLTMzLDggKzMzLDggQEAgdGNwb3B0c3RyaXBfbWFuZ2xlX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y29uc3Qgc3RydWN0IHh0X3RjcG9wdHN0cmlwX3RhcmdldF9pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFx0c3RydWN0IHRjcGhkciAqdGNwaCwgX3RoO1xuIFx0dW5zaWduZWQgaW50IG9wdGwsIGksIGo7XG4tXHR1X2ludDE2X3Qgbiwgbztcbi1cdHVfaW50OF90ICpvcHQ7XG4rXHR1MTYgbiwgbztcbitcdHU4ICpvcHQ7XG4gXHRpbnQgdGNwX2hkcmxlbjtcbiBcbiBcdC8qIFRoaXMgaXMgYSBmcmFnbWVudCwgbm8gVENQIGhlYWRlciBpcyBhdmFpbGFibGUgKi9cbkBAIC05Nyw3ICs5Nyw3IEBAIHRjcG9wdHN0cmlwX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwdjZoID0gaXB2Nl9oZHIoc2tiKTtcbiBcdGludCB0Y3Bob2ZmO1xuLVx0dV9pbnQ4X3QgbmV4dGhkcjtcbitcdHU4IG5leHRoZHI7XG4gXHRfX2JlMTYgZnJhZ19vZmY7XG4gXG4gXHRuZXh0aGRyID0gaXB2NmgtXHUwMDNlbmV4dGhkcjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZHNjcC5jXG5pbmRleCBmYjAxNjlhOGY5YmJkMy4uODc4ZjI3MDE2ZTk5ODggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuY1xuKysrIGIvbmV0L25ldGZpbHRlci94dF9kc2NwLmNcbkBAIC00OSw2ICs0OSwxNiBAQCBzdGF0aWMgaW50IGRzY3BfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB0b3NfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvICppbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbitcbitcdGlmIChpbmZvLVx1MDAzZWludmVydCBcdTAwM2UgMSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGJvb2wgdG9zX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgeHRfdG9zX21hdGNoX2luZm8gKmluZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuQEAgLTgyLDYgKzkyLDcgQEAgc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBkc2NwX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHRcdC5uYW1lXHRcdD0gXCJ0b3NcIixcbiBcdFx0LnJldmlzaW9uXHQ9IDEsXG4gXHRcdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG4rXHRcdC5jaGVja2VudHJ5XHQ9IHRvc19tdF9jaGVjayxcbiBcdFx0Lm1hdGNoXHRcdD0gdG9zX210LFxuIFx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfdG9zX21hdGNoX2luZm8pLFxuIFx0XHQubWVcdFx0PSBUSElTX01PRFVMRSxcbkBAIC05MCw2ICsxMDEsNyBAQCBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGRzY3BfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbiBcdFx0Lm5hbWVcdFx0PSBcInRvc1wiLFxuIFx0XHQucmV2aXNpb25cdD0gMSxcbiBcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNixcbitcdFx0LmNoZWNrZW50cnlcdD0gdG9zX210X2NoZWNrLFxuIFx0XHQubWF0Y2hcdFx0PSB0b3NfbXQsXG4gXHRcdC5tYXRjaHNpemVcdD0gc2l6ZW9mKHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyksXG4gXHRcdC5tZVx0XHQ9IFRISVNfTU9EVUxFLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG5pbmRleCBmNzI3NTJmYTQzNzRkYS4uZDM0ODMxY2UzYWRmYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jXG5AQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBpbnQgcmVjZW50X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyLFxuIFx0dC1cdTAwM2Vuc3RhbXBzX21heF9tYXNrID0gbnN0YW1wX21hc2s7XG4gXG4gXHRtZW1jcHkoXHUwMDI2dC1cdTAwM2VtYXNrLCBcdTAwMjZpbmZvLVx1MDAzZW1hc2ssIHNpemVvZih0LVx1MDAzZW1hc2spKTtcbi1cdHN0cmNweSh0LVx1MDAzZW5hbWUsIGluZm8tXHUwMDNlbmFtZSk7XG4rXHRzdHJzY3B5KHQtXHUwMDNlbmFtZSwgaW5mby1cdTAwM2VuYW1lKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnQtXHUwMDNlbHJ1X2xpc3QpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaXBfbGlzdF9oYXNoX3NpemU7IGkrKylcbiBcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dC1cdTAwM2VpcGhhc2hbaV0pO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jXG5pbmRleCBiOWRhODI2OTE2MWQ4Zi4uYjA4YjA3N2Q3ZjBhZGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jXG5AQCAtNzgsMTAgKzc4LDIzIEBAIHRjcG1zc19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdGNwbXNzX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuK3tcbitcdGNvbnN0IHN0cnVjdCB4dF90Y3Btc3NfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4rXG4rXHRpZiAoaW5mby1cdTAwM2Vtc3NfbWluIFx1MDAzZSBpbmZvLVx1MDAzZW1zc19tYXgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGluZm8tXHUwMDNlaW52ZXJ0IFx1MDAzZSAxKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHRjcG1zc19tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0ge1xuIFx0e1xuIFx0XHQubmFtZVx0XHQ9IFwidGNwbXNzXCIsXG4gXHRcdC5mYW1pbHlcdFx0PSBORlBST1RPX0lQVjQsXG4rXHRcdC5jaGVja2VudHJ5XHQ9IHRjcG1zc19tdF9jaGVjayxcbiBcdFx0Lm1hdGNoXHRcdD0gdGNwbXNzX210LFxuIFx0XHQubWF0Y2hzaXplXHQ9IHNpemVvZihzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8pLFxuIFx0XHQucHJvdG9cdFx0PSBJUFBST1RPX1RDUCxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmNcbmluZGV4IGJlNTM1YTI2MWZhMDRhLi40Y2E3OTY0ZTgzYzg1NyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfY3QuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9jdC5jXG5AQCAtMTUyNyw4ICsxNTI3LDggQEAgc3RhdGljIGludCB0Y2ZfY3RfZHVtcF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBUQ0FfQ1RfSEVMUEVSX05BTUUsIGhlbHBlci1cdTAwM2VuYW1lKSB8fFxuLVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBUQ0FfQ1RfSEVMUEVSX0ZBTUlMWSwgaGVscGVyLVx1MDAzZXR1cGxlLnNyYy5sM251bSkgfHxcbi1cdCAgICBubGFfcHV0X3U4KHNrYiwgVENBX0NUX0hFTFBFUl9QUk9UTywgaGVscGVyLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSkpXG4rXHQgICAgbmxhX3B1dF91OChza2IsIFRDQV9DVF9IRUxQRVJfRkFNSUxZLCBoZWxwZXItXHUwMDNlbmZwcm90bykgfHxcbitcdCAgICBubGFfcHV0X3U4KHNrYiwgVENBX0NUX0hFTFBFUl9QUk9UTywgaGVscGVyLVx1MDAzZWw0cHJvdG8pKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjA1LjM2MzQzNjA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcyNzM3MTM3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSB0b3VjaGVzIG5ldGZpbHRlciBhbmQgcmVsYXRlZCBzdWJzeXN0ZW1zLiBTZWVtcyBsaWtlIGEgZGVjZW50IGFtb3VudCBvZiBjaHVybiBoZXJlLCBlbm91Z2ggdG8gd2FycmFudCBhIGZvY3VzZWQgcmV2aWV3IGFuZCBmdXp6aW5nLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBORl9IT09LX09QX05BVGAgYW5kIGBzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXZgIGluIGBuZXRmaWx0ZXIuaGAuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBhIG1vcmUgcmVmaW5lZCBoYW5kbGluZyBvZiBOQVQtc3BlY2lmaWMgaG9vayBvcGVyYXRpb25zLiBUaGUgcmVtb3ZhbCBvZiBzcGVjaWZpYyBwb3J0IGRlZmluaXRpb25zIGluIGBuZl9jb25udHJhY2tfKi5oYCBpcyBhbHNvIG5vdGFibGUuIEl0IGxvb2tzIGxpa2UgdGhlIGtlcm5lbCBpcyBiZWNvbWluZyBsZXNzIHJlbGlhbnQgb24gaGFyZGNvZGVkIHBvcnQgbnVtYmVycyBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4gSW5zdGVhZCwgaXQgc2VlbXMgbGlrZSBtb3JlIHByb3RvY29sLWFnbm9zdGljIG1ldGhvZHMgYXJlIGJlaW5nIGFkb3B0ZWQsIHdoaWNoIGlzIGEgZ29vZCBkaXJlY3Rpb24uXG5cbkRpZ2dpbmcgaW50byBgaXBfdnMuaGAsIEkgc2VlIGEgc2ltcGxlIGNoYW5nZSBmcm9tIGB1X2ludDhfdGAgdG8gYHU4YCwgd2hpY2ggaXMgZmluZS4gQnV0LCBsb29raW5nIGZ1cnRoZXIgaW50byB0aGUgaGVscGVycywgSSdtIG5vdGluZyBzaWduaWZpY2FudCByZWZhY3RvcmluZyBpbiBgbmZfY29ubnRyYWNrX2hlbHBlcmAuIFRoZSByZXBsYWNlbWVudCBvZiB0aGUgYHR1cGxlYCBzdHJ1Y3Qgd2l0aCBgbmZwcm90b2AgYW5kIGBsNHByb3RvYCBpbiB0aGUgYGhlbHBlcmAgc3RydWN0dXJlIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSBtb3ZpbmcgYXdheSBmcm9tIHJlbHlpbmcgb24gdGhlIHR1cGxlIGRpcmVjdGx5IGZvciBoZWxwZXIgaWRlbnRpZmljYXRpb24sIGZ1cnRoZXIgZW5mb3JjaW5nIGEgcHJvdG9jb2wtYWdub3N0aWMgc3lzdGVtLiBUaGUgc2lnbmF0dXJlIG9mIGBuZl9jdF9oZWxwZXJfaW5pdGAgaGFzIGJlZW4gc2ltcGxpZmllZCwgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIHRoZSByZWZhY3RvcmluZy4gVGhlIGNoYW5nZXMgdG8gdGhlIGhlbHBlciBoYXNoLCB1c2luZyBgbmFtZWAgYW5kIGBwcm90b251bWAgaW5zdGVhZCBvZiBgdHVwbGVgLCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhpcyBzaGlmdC4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGlzIGFmZmVjdHMgZXhpc3RpbmcgaGVscGVyIGltcGxlbWVudGF0aW9ucy4gT25lIGhlbHBlciBwZXIgcHJvdG9jb2wgcmF0aGVyIHRoYW4gbXVsdGlwbGUgaXMgYSBmaW5lIGlkZWEgYXMgaXQgc2VlbXMgbXVjaCBjbGVhbmVyLlxuXG5UaGUgZml4IGZvciB0aGUgb3ZlcmZsb3cgY2hlY2sgaW4gYGVidGFibGVzLmNgIGlzIGltcG9ydGFudCwgZXNwZWNpYWxseSBzaW5jZSBlYnRhYmxlcyBpcyBvZnRlbiB1c2VkIGZvciBzZWN1cml0eS1yZWxhdGVkIHJ1bGVzLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB1cGRhdGVzIGNhbGxzIHRvIGBuZl9jdF9oZWxwZXJfaW5pdGAgYW5kIHJlbW92ZXMgbW9kdWxlIHBhcmFtZXRlcnMgZm9yIHBvcnRzLiBUaGlzIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXMgaW4gYG5mX2Nvbm50cmFja19oZWxwZXJgIGFuZCBhbGlnbnMgd2l0aCB0aGUgaW50ZW50IHRvIG1vdmUgYXdheSBmcm9tIHBvcnQtc3BlY2lmaWMgaGVscGVycy4gVGhlIHVzZSBvZiBgTkZQUk9UT19VTlNQRUNgIGlzIGFzIGV4cGVjdGVkIGZvciBnZW5lcmFsIGNhc2VzLCBhbmQgZ29vZCB0byBzZWUuIFRoZSBtb3ZlbWVudCBvZiBgc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2YCBhbmQgdGhlIHNldHRpbmcgb2YgYC5ob29rX29wc190eXBlID0gTkZfSE9PS19PUF9OQVRgIGxvb2sgbGlrZSB0aGV5IGFyZSB0eWluZyB1cCBsb29zZSBlbmRzIGZyb20gcHJldmlvdXMgY2hhbmdlcy5cblxuSW4gdGhlIG5ldGxpbmsgY29kZSwgdGhlIGNoYW5nZXMgaW4gYG5mbmxfY3RoZWxwZXJfdHVwbGVfcG9sYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRvIHVzZSBgbmZwcm90b2AgYW5kIGBsNHByb3RvYCBpbnN0ZWFkIG9mIGB0dXBsZWAgYXJlIGFub3RoZXIgZGlyZWN0IGNvbnNlcXVlbmNlIG9mIHRoZSBoZWxwZXIgcmVmYWN0b3JpbmcuIFRoZSBzYW1lIGNoYW5nZXMgaW4gYG5mbmV0bGlua19ob29rLmNgIHRvIGhhbmRsZSB0aGUgbmV3IE5BVCBob29rIHR5cGUgYW5kIGR1bXAgTkFUIGhvb2tzIGNvcnJlY3RseSBhcmUga2V5LiBUaGUgYWRkaXRpb24gb2YgYG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcmAgdG8gYG5mdF9jdC5jYCBpcyBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGludmVzdGlnYXRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBOQVQgd2l0aGluIG5mdGFibGVzLiBUaGUgcmVtb3ZhbCBvZiB0aGUgcmVkdW5kYW50IGlmIHN0YXRlbWVudCBpbiBgbmZ0X3NldF9yYnRyZWUuY2AgaXMganVzdCBob3VzZWtlZXBpbmcsIGJ1dCBnb29kIHRvIHNlZS5cblxuSSBzZWUgc29tZSBtaW5vciBjaGFuZ2VzIGluIGB4X3RhYmxlcy5jYCBhbmQgYHh0X1RDUE9QVFNUUklQLmNgIGZvciBzdHJpbmcgb3BlcmF0aW9ucyBhbmQgdHlwZSBkZWZpbml0aW9ucywgd2hpY2ggYXJlIGxpa2VseSBhaW1lZCBhdCBjb25zaXN0ZW5jeSBhbmQgcm9idXN0bmVzcy4gVGhlIG5ldyBjaGVja3MgZm9yIGB4dF9kc2NwLmNgIGFuZCBgeHRfdGNwbXNzLmNgIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiBwbGFjZSB0byBoYXJkZW4gdGhlIGNvZGUgYW5kIHByZXZlbnQgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcy5cblxuRmluYWxseSwgYGFjdF9jdC5jYCBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSBgbmZwcm90b2AgYW5kIGBsNHByb3RvYC4gT3ZlcmFsbCwgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYWJvdXQgbWFraW5nIHRoZSBuZXRmaWx0ZXIgbW9yZSBtb2R1bGFyLCBjb25maWd1cmFibGUsIGFuZCByb2J1c3QuIEl0J3MgbW92aW5nIHRvd2FyZHMgYSBtb3JlIHN0cmVhbWxpbmVkIHdheSBvZiBoYW5kbGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJ20gbGFiZWxpbmcgdGhpcyBhcyBcIldvcnRoRnV6emluZ1wiIHdpdGhvdXQgcXVlc3Rpb24uIEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgcmVmYWN0b3JpbmcgaXMgZW5vdWdoIHRvIHdhcnJhbnQgdGhvcm91Z2ggdGVzdGluZy5cblxuSSd2ZSBpZGVudGlmaWVkIHRoZSBsaWtlbHkgY29uZmlncywgYW5kIHRoZXkgbG9vayBzb2xpZCB0byBtZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIHRvIG1ha2Ugc3VyZS4gSSdsbCBtYWtlIHN1cmUgdG8gdXNlIHRoZXNlIHRvIHJlcHJvZHVjZSBhIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzA4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDoyMi42MzcxNTIyNjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNDEyNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjA6MjIuNzU3NTY5Mjg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNDEwMDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maWd1cmF0aW9uIEF1ZGl0IGFuZCBEZXBlbmRlbmN5IFJldmlldyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGFkZHJlc3NlZCB0aGUgY29yZSBpc3N1ZSBpbiB0aGUgcHJpbWFyeSBmaWxlLiBOb3csIGJlZm9yZSB3ZSBjb25zaWRlciB0aGlzIGZpeCBjb21wbGV0ZSwgSSBuZWVkIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBkZXBlbmRlbmN5IHJldmlldy4gSSdtIHRoaW5raW5nLCBsZXQncyBzeXN0ZW1hdGljYWxseSBnbyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kaWZpZWQgb25lcyDigJMgdGhlIFwib3RoZXIgbW9kaWZpZWQgZmlsZXNcIiByZWZlcnJlZCB0byBpbiB0aGUgY29udGV4dC4gV2UncmUgbG9va2luZyBmb3IgYW55IGNhc2NhZGluZyBlZmZlY3RzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBuZWVkIGFkanVzdG1lbnRzIGFzIGEgcmVzdWx0IG9mIHRoZSBjaGFuZ2VzIHdlJ3ZlIGp1c3QgaW1wbGVtZW50ZWQuXG5cblRoaXMgaXNuJ3QganVzdCBhYm91dCBzeW50YXg7IGl0J3MgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIEFQSSBrZXlzLCBzZXJ2aWNlIGVuZHBvaW50cywgb3IgZXZlbiByZXNvdXJjZSBsaW1pdHMgZGVmaW5lZCBpbiB0aG9zZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBub3cgbWlzYWxpZ25lZD8gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZml4IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciB1bmludGVudGlvbmFsbHkgYnJlYWsgYSBmZWF0dXJlIGluIHNvbWUgZGVwZW5kZW50IHBhcnQgb2YgdGhlIHN5c3RlbS4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZGlkbid0IGludHJvZHVjZSBhIHJlZ3Jlc3Npb24uIEEgY2hlY2tsaXN0IHRvIHN0ZXAgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbnMgaXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjI2LjE4MTY3Mjg1NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzgyNTU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX1hUX01BVENIX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExNDc9Y29tbWVudCBcXFwiWHRhYmxlcyBtYXRjaGVzXFxcIlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTQ4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ5OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQUREUlRZUEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1MC1cXHR0cmlzdGF0ZSAnXFxcImFkZHJ0eXBlXFxcIiBhZGRyZXNzIHR5cGUgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTU4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTU5OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQlBGXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNjAtXFx0dHJpc3RhdGUgJ1xcXCJicGZcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE2Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE2ODpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NHUk9VUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTY5LVxcdHRyaXN0YXRlICdcXFwiY29udHJvbCBncm91cFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTc3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTc4OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTc5LVxcdHRyaXN0YXRlICdcXFwiY2x1c3RlclxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTkzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTk0OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTk1LVxcdHRyaXN0YXRlICAnXFxcImNvbW1lbnRcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIwMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIwNDpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjA1LVxcdHRyaXN0YXRlICAnXFxcImNvbm5ieXRlc1xcXCIgcGVyLWNvbm5lY3Rpb24gY291bnRlciBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMTU6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT05OTEFCRUxcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIxNi1cXHR0cmlzdGF0ZSAnXFxcImNvbm5sYWJlbFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjI3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjI4OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMjktXFx0dHJpc3RhdGUgJ1xcXCJjb25ubGltaXRcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIzNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzNzpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMzgtXFx0dHJpc3RhdGUgICdcXFwiY29ubm1hcmtcXFwiIGNvbm5lY3Rpb24gbWFyayBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyNDc6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0OC1cXHR0cmlzdGF0ZSAnXFxcImNvbm50cmFja1xcXCIgY29ubmVjdGlvbiB0cmFja2luZyBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyNjA6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DUFVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI2MS1cXHR0cmlzdGF0ZSAnXFxcImNwdVxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjY4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjY5OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfRENDUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjcwLVxcdHRyaXN0YXRlICdcXFwiZGNjcFxcXCIgcHJvdG9jb2wgbWF0Y2ggc3VwcG9ydCAoREVQUkVDQVRFRCknXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI4MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTI4MTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0RFVkdST1VQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyODItXFx0dHJpc3RhdGUgJ1xcXCJkZXZncm91cFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjg5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjkwOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfRFNDUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjkxLVxcdHRyaXN0YXRlICdcXFwiZHNjcFxcXCIgYW5kIFxcXCJ0b3NcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTMwNC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTMwNTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0VDTlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzA2LVxcdHRyaXN0YXRlICdcXFwiZWNuXFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzMTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzMTQ6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9FU1BcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTMxNS1cXHR0cmlzdGF0ZSAnXFxcImVzcFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzIzOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzMjQtXFx0dHJpc3RhdGUgJ1xcXCJoYXNobGltaXRcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTMzNy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTMzODpjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzM5LVxcdHRyaXN0YXRlICdcXFwiaGVscGVyXFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNDctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNDg6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9ITFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzQ5LVxcdHRyaXN0YXRlICdcXFwiaGxcXFwiIGhvcGxpbWl0L1RUTCBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNTY6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9JUENPTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1Ny1cXHR0cmlzdGF0ZSAnXFxcImlwY29tcFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzY0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY1OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzY2LVxcdHRyaXN0YXRlICdcXFwiaXByYW5nZVxcXCIgYWRkcmVzcyByYW5nZSBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNzQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNzU6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9JUFZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNzYtXFx0dHJpc3RhdGUgJ1xcXCJpcHZzXFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzODQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzODU6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9MMlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzODYtXFx0dHJpc3RhdGUgJ1xcXCJsMnRwXFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzOTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzOTU6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEhcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM5Ni1cXHR0cmlzdGF0ZSAnXFxcImxlbmd0aFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDA0OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfTElNSVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQwNS1cXHR0cmlzdGF0ZSAnXFxcImxpbWl0XFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0MTQ6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9NQUNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQxNS1cXHR0cmlzdGF0ZSAnXFxcIm1hY1xcXCIgYWRkcmVzcyBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0MjM6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MjQtXFx0dHJpc3RhdGUgJ1xcXCJtYXJrXFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MzEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0MzI6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQzMy1cXHR0cmlzdGF0ZSAnXFxcIm11bHRpcG9ydFxcXCIgTXVsdGlwbGUgcG9ydCBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0NDEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0NDI6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9ORkFDQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ0My1cXHR0cmlzdGF0ZSAnXFxcIm5mYWNjdFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDUxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDUyOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfT1NGXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0NTMtXFx0dHJpc3RhdGUgJ1xcXCJvc2ZcXFwiIFBhc3NpdmUgT1MgZmluZ2VycHJpbnQgbWF0Y2gnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ2NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ2Njpjb25maWcgTkVURklMVEVSX1hUX01BVENIX09XTkVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0NjctXFx0dHJpc3RhdGUgJ1xcXCJvd25lclxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDc0OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0NzUtXFx0dHJpc3RhdGUgJ0lQc2VjIFxcXCJwb2xpY3lcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4NTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1BIWVNERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ4Ni1cXHR0cmlzdGF0ZSAnXFxcInBoeXNkZXZcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ5NTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5Ni1cXHR0cmlzdGF0ZSAnXFxcInBrdHR5cGVcXFwiIHBhY2tldCB0eXBlIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTUwNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTUwNzpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1FVT1RBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1MDgtXFx0dHJpc3RhdGUgJ1xcXCJxdW90YVxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTE2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTE3OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTE4LVxcdHRyaXN0YXRlICdcXFwicmF0ZWVzdFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTI3OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTUyOC1cXHR0cmlzdGF0ZSAgJ1xcXCJyZWFsbVxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTQwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTQxOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1NDItXFx0dHJpc3RhdGUgJ1xcXCJyZWNlbnRcXFwiIG1hdGNoIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU1MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU1MTpjb25maWcgTkVURklMVEVSX1hUX01BVENIX1NDVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU1Mi1cXHR0cmlzdGF0ZSAgJ1xcXCJzY3RwXFxcIiBwcm90b2NvbCBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1NjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1NjM6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2NC1cXHR0cmlzdGF0ZSAnXFxcInNvY2tldFxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTgwOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4MS1cXHR0cmlzdGF0ZSAnXFxcInN0YXRlXFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1OTE6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU5Mi1cXHR0cmlzdGF0ZSAnXFxcInN0YXRpc3RpY1xcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTk5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjAwOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2MDEtXFx0dHJpc3RhdGUgICdcXFwic3RyaW5nXFxcIiBtYXRjaCBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2MTItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2MTM6Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1NcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTYxNC1cXHR0cmlzdGF0ZSAnXFxcInRjcG1zc1xcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjIzOmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfVElNRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjI0LVxcdHRyaXN0YXRlICdcXFwidGltZVxcXCIgbWF0Y2ggc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjM2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjM3OmNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfVTMyXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2MzgtXFx0dHJpc3RhdGUgJ1xcXCJ1MzJcXFwiIG1hdGNoIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjI2LjIzOTUwMzA1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NzQxMTk1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIGEgY291cGxlIG9mIGtlcm5lbCBtb2R1bGUgY29uZmlndXJhdGlvbnMgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUGAgaXMgZW5hYmxlZC4gSXQncyBjcnVjaWFsIGZvciBwcm9wZXJseSBoYW5kbGluZyBUQ1Agb3B0aW9uIHN0cmlwcGluZyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmssIGFuZCBkZXBlbmRpbmcgb24gdGhlIHNjZW5hcmlvLCBJIG1pZ2h0IG5lZWQgaXQgY29uZmlndXJlZCBpbiBhIHNwZWNpZmljIHdheS4gVGhlbiwgZm9yIHRoZSBicmlkZ2luZyBzZXR1cCBJJ20gd29ya2luZyB3aXRoLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJSSURHRV9FQlRBQkxFU2AgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gRW5zdXJpbmcgdGhhdCB0aGUgZWJ0YWJsZXMgbW9kdWxlIGlzIGF2YWlsYWJsZSBpcyBjcml0aWNhbCBmb3IgYmVpbmcgYWJsZSB0byBidWlsZCBmaWx0ZXJpbmcgcnVsZXMuIEl0J3MgYSBxdWljayBjaGVjayBidXQgSSBkb24ndCB3YW50IHRvIGdldCBjYXVnaHQgZG93biB0aGUgbGluZSB3aXRoIG1pc3NpbmcgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMzcsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDozMy45MTM2MjQ5MTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1Mzc1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTExPWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TU1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMzc6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzOC1cXHR0cmlzdGF0ZSAnXFxcIlRDUE9QVFNUUklQXFxcIiB0YXJnZXQgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjA6MzMuOTcwMTY4MTk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDA2NDM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX0VCVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjM0LjAyNTE4NTM4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjU0MTQ2MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEVCVEFCTEVTIEludGVncmF0aW9uIHdpdGhpbiB0aGUgS2VybmVsIEJyaWRnZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlJJREdFX0VCVEFCTEVTYCBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgd2l0aGluIHRoZSBicmlkZ2Utc3BlY2lmaWMgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnYCBmaXJzdCwgYXMgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdGhlIG5ldGZpbHRlci1yZWxhdGVkIGJyaWRnZSBzZXR0aW5ncyB0byByZXNpZGUuIFRoZW4sIGlmIGl0IGlzbid0IHRoZXJlLCBJJ2xsIGJyYW5jaCBvdXQgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AsIHdoaWNoIGhvdXNlcyBnZW5lcmFsIGJyaWRnZSBvcHRpb25zLiBBbmQgaWYgZm9yIHNvbWUgcmVhc29uIHRoYXQgZmFpbHMsIEkgY2FuIGFsd2F5cyBsb29rIGZvciBpdCBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhcyBhIGxhc3QgcmVzb3J0LCBhcyB0aGUgZWJ0YWJsZXMgc2V0dXAgbWlnaHQgYmUgYXQgYSBoaWdoZXIgbGV2ZWwgdGhhbiBqdXN0IHRoZSBicmlkZ2UgaXRzZWxmLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgbG9jYXRpb24gZm9yIGEgY29uZmlnIHNldHRpbmcgcmVsYXRlZCB0byBlYnRhYmxlcyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZyBicmlkZ2UgY29udGV4dC4gVGhpcyB3aWxsIGltcGFjdCBteSBhcHByb2FjaCBtb3ZpbmcgZm9yd2FyZCwgd2hpY2ggY291bGQgaW5jbHVkZSBzb21lIHNvcnQgb2YgZGVwZW5kZW5jeSB0cmVlIGFuYWx5c2lzIG9mIHRoZSByZWxldmFudCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDUyNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDozNy42NzkzMzM1MjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjg5NDkxOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRV9FQlRBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDozNy43ODIyMzk3MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQzMTU2MzAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkVCVEFCTEVTIENvbnNpZGVyYXRpb24qKlxuXG5IbW0sIHRoaW5raW5nIGFib3V0IHRoZSBpc3N1ZSBhdCBoYW5kLCB0aGVyZSdzIGEgcG9zc2liaWxpdHkuIENvdWxkIGl0IGJlIGBCUklER0VfTkZfRUJUQUJMRVNgPyBJJ20gbGVhbmluZyB0aGF0IHdheS4gU2VlbXMgbGlrZSBhIGxpa2VseSBjdWxwcml0IGdpdmVuIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gTmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLCBidXQgdGhhdCdzIG15IGluaXRpYWwgaW5zdGluY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjA6NDAuMjEzODA1MDYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODAzNDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX05GX0VCVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yOD1jb25maWcgTkZfQ09OTlRSQUNLX0JSSURHRVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00Mi0jIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0Mzpjb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Mi1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjUzOm1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiRXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjQwLjI5MTg0NDUxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUwMzI2MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTmV0d29yayBCcmlkZ2luZyB3aXRoIE5ldGZpbHRlcioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGNvbmZpZ3VyaW5nIGEgYnJpZGdpbmcgc2V0dXAgdGhhdCBsZXZlcmFnZXMgTmV0ZmlsdGVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGVidGFibGVzIGludGVncmF0aW9uLiBUaGUgcHJpbWFyeSByZXF1aXJlbWVudCwgYXMgSSBzZWUgaXQsIGlzIGRlZmluaXRlbHkgYEJSSURHRV9ORl9FQlRBQkxFU2AuIFRoYXQgb25lJ3MgZm91bmRhdGlvbmFsLiBJdCdzIHRoZSBlbmFibGluZyBzd2l0Y2ggZm9yIHVzaW5nIGVidGFibGVzIHdpdGhpbiBhIGJyaWRnZWQgZW52aXJvbm1lbnQsIHNvIG5hdHVyYWxseSBpdCB3b3VsZCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbkJleW9uZCB0aGF0LCBpZiB3ZSB3YW50IGZ1bGwgY2FwYWJpbGl0aWVzIGZvciBtb3JlIGFkdmFuY2VkIG5ldHdvcmsgZnVuY3Rpb25zIGludm9sdmluZyBjb25uZWN0aW9uIHRyYWNraW5nLCB3ZSBzaG91bGQgYWxzbyB0aGluayBhYm91dCBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0NUSEVMUEVSYCBhbmQgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LYC4gVGhlIGZvcm1lciBwcm92aWRlcyBOZXRsaW5rIGludGVyZmFjZSB0byBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHdoaWxlIHRoZSBsYXR0ZXIgaW5jbHVkZXMgaG9va3MgdG8gZW5hYmxlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2Vyc3BhY2UgZm9yIG1hbmFnaW5nIE5ldGZpbHRlciBhc3BlY3RzLiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgbGlrZWx5IHJlcXVpcmVkIGlmIHdlJ3JlIGFsc28gdXNpbmcgY29ubmVjdGlvbiB0cmFja2luZyBhbG9uZ3NpZGUgdGhlIGJyaWRnZS4gV2Ugd291bGQgbmVlZCB0byBlbmFibGUgdGhlc2UgaWYgd2Ugd2FudGVkIHRoaW5ncyBsaWtlIGNvbm50cmFjay1iYXNlZCBmaWx0ZXJpbmcgaW4gdGhlIGJyaWRnZSBvciB3YW50ZWQgdG8gZG8gbW9yZSBjb21wbGV4IGludGVyYWN0aW9uIHdpdGggTmV0ZmlsdGVyIHdpdGhpbiB0aGUgYnJpZGdlIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjQzLjg0MjE3MzM4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwMjcwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTMzPWNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0Njpjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GQUNDVCBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE9TRiBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk4OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5OS1cXHRib29sIFxcXCJORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjQzLjkwMDIwNTUxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjQyNTQyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBmb3IgQ29ubnRyYWNrIEhlbHBlciBhbmQgVGltZW91dCBPcHRpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYE5GX0NUX05FVExJTktfSEVMUEVSYC4gSG1tbSwgbm90IGBORVRGSUxURVJfTkVUTElOS19DVEhFTFBFUmAgd2hpY2ggSSB3YXMgZXhwZWN0aW5nIHRvIHNlZS4gT2theSwgbm8gYmlnIGRlYWwsIGxldCdzIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgcmVsYXRlcyB0byB0aGUgZXhwZWN0ZWQgY29ubnRyYWNrIGhlbHBlciBmdW5jdGlvbmFsaXR5LlxuXG5XaGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgcmVsYXRlZCB0aW1lb3V0IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0IG1lIGFsc28gaW52ZXN0aWdhdGUgYE5GX0NUX05FVExJTktfVElNRU9VVGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNoYW5nZXMgb3IgbmFtaW5nIGRpZmZlcmVuY2VzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIGhvdyBhbGwgdGhlc2UgbmV0bGluayBhbmQgY29ubnRyYWNrIG9wdGlvbnMgYXJlIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODk0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjA6NTIuNTQyNzUwOTQ0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU3MzM0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NUX05FVExJTktfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzY2PWNvbmZpZyBORl9DVF9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNzM6Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDo1Mi43NDg0ODkzMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3NTY5MTQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkNvbnNpZGVyaW5nIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBJJ20gdGhpbmtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZyBjb25maWd1cmF0aW9uLCBhbmQgdHdvIGtleSBwYXJhbWV0ZXJzIGp1bXAgdG8gbWluZDogYE5GX0NUX05FVExJTktfVElNRU9VVGAgYW5kIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50IHRvIG1hbmFnaW5nIHRpbWVvdXRzIGFuZCBoZWxwZXIgaW50ZXJhY3Rpb25zLiBOb3csIHRvIGdldCBhIGJldHRlciBvdmVydmlldywgSSBuZWVkIHRvIHpvb20gb3V0IGFuZCBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUsIHNvIHRoZSBuZXh0IHRoaW5nIEknZCBjaGVjayB3b3VsZCB1bmRvdWJ0ZWRseSBiZSBgTkZUX0NUYC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzMzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDo1NS42MjQxODM2NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4Nzg0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4NT1jb25maWcgTkZUX05VTUdFTlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDkxOmNvbmZpZyBORlRfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjU1LjY4MzA2NzQzOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk4Mzk1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgd2l0aCBgTkZfTkFUYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgYXQgaGFuZCBsaWtlbHkgaW52b2x2ZXMgZXhhbWluaW5nIHRoZSBpbm5lciB3b3JraW5ncyBvZiBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFdoZW4gc29tZW9uZSBtZW50aW9ucyBOQVQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYE5GX05BVGAuIFRoYXQga2V5d29yZCwgYE5GX05BVGAsIGlzIHRoZSBrZXkuIEl0J3MgdGhlIE5ldGZpbHRlciBtb2R1bGUgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIE5BVCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGFzcGVjdHMgYXJlIGJlaW5nIGV4cGxvcmVkLiBBcmUgd2UgbG9va2luZyBhdCBjb25uZWN0aW9uIHRyYWNraW5nLCBhZGRyZXNzIHRyYW5zbGF0aW9uIHJ1bGVzLCBwb3J0IG1hcHBpbmcsIG9yIHBlcmhhcHMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3M/IFRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0LiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gYW5hbHl6aW5nIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgZGVidWdnaW5nIGEgTkFULXJlbGF0ZWQgaXNzdWUsIG9yIGRpZ2dpbmcgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcy4gTXkgcHJvY2VzcyB3aWxsIGxpa2VseSBpbnZvbHZlIGNoZWNraW5nIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiwgc2VhcmNoaW5nIGZvciByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcywgYW5kIHBvdGVudGlhbGx5IHVzaW5nIHRvb2xzIGxpa2UgYGlwdGFibGVzYCBhbmQgYGNvbm50cmFja2AgdG8gaW5zcGVjdCB0aGUgYmVoYXZpb3Igb2YgdGhlIE5BVCBtb2R1bGUgaW4gYWN0aW9uLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBvYmplY3RpdmUgaXMgdG8gZm9jdXMgb24gdGhlIHNwZWNpZmljIGFzcGVjdHMgb2YgYE5GX05BVGAgdGhhdCBhcmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjE3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMDo1OS40ODE0NjUyNzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODAyODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9OQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zOTg9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwNzpjb25maWcgTkZfTkFUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDE1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MTY6Y29uZmlnIE5GX05BVF9BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDE3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MjE6Y29uZmlnIE5GX05BVF9GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDIyLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDI1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MjY6Y29uZmlnIE5GX05BVF9JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDI3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDMwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MzE6Y29uZmlnIE5GX05BVF9TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDMyLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MzY6Y29uZmlnIE5GX05BVF9URlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDQxOmNvbmZpZyBORl9OQVRfUkVESVJFQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQyLVxcdGJvb2xcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NDQ6Y29uZmlnIE5GX05BVF9NQVNRVUVSQURFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0NS1cXHRib29sXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDQ3OmNvbmZpZyBORl9OQVRfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIwOjU5LjU0MjI3MzAyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ5MTY0OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTTk1QIE5BVCBNb2R1bGUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJXaGVyZSBkb2VzIHRoaXMgYE5GX05BVF9TTk1QX0JBU0lDYCBtb2R1bGUgbGl2ZSBpbiB0aGUgbmV0ZmlsdGVyIGNvZGViYXNlP1wiIFJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NCBuZXRmaWx0ZXIgbW9kdWxlcywgYW5kIFNOTVAgTkFUIHdvdWxkIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoYXQgc2NvcGUuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHByZXNlbmNlLCBhbmQgaWYgaXQncyB0aGVyZSBJIG1pZ2h0IG5lZWQgdG8gbG9vayBhdCB3aGF0IG90aGVyIG1vZHVsZXMgZGVwZW5kIG9uIGl0LCBvciBhcmUgZGVwZW5kZW50IGJ5IGl0LCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMuIFRoaXMgbWlnaHQgYWxzbyBwcm92aWRlIGNsdWVzIHRvIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBleGFtcGxlcy4gSSdtIGFmdGVyIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgbmV0ZmlsdGVyIG9wdGlvbnMgdG8gcHJlcGFyZSBmb3IgYW55IGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzk2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjE6MDIuNTkxNDQwMTI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjYzMTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfTkFUX1NOTVBfQkFTSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTAwOmNvbmZpZyBORl9OQVRfU05NUF9CQVNJQ1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiQmFzaWMgU05NUC1BTEcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjE6MDIuNjQ4MDc2MzA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMjU5Mzg2OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBOZXRmaWx0ZXIgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIGluaXRpYWwgbGlzdCBvZiBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnM6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAsIGBORl9DT05OVFJBQ0tfRlRQYCwgYW5kIHNvIG9uLCBhbGwgdGhlIHdheSB0byBgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUGAuICBSaWdodC4gSSBuZWVkIHRvIGRpc3RpbGwgdGhpcyBkb3duIHRvIHRoZSBtb3N0IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBzbyBJJ2xsIGlkZW50aWZ5IHRoZSBtb2RpZmllZCBvbmVzLiBMb29rcyBsaWtlIGEgYnVuY2ggaGF2ZSBiZWVuIHR3ZWFrZWQ6IGBORl9DT05OVFJBQ0tfQU1BTkRBYCB0aHJvdWdoIGBORl9DT05OVFJBQ0tfVEZUUGAsIGBORl9OQVRfU05NUF9CQVNJQ2AsIGBCUklER0VfTkZfRUJUQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktfSE9PS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORl9DVF9ORVRMSU5LX1RJTUVPVVRgLCBgTkZUX0NUYCwgYE5FVEZJTFRFUl9YVF9NQVRDSF9EU0NQYCwgYE5FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1NgLCBgTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVGAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUGAuIE5vdywgdGhhdCdzIG1vcmUgbWFuYWdlYWJsZS5cblxuTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2UgY29uZmlndXJhdGlvbnMuIEknbSBmb2N1c2luZyBvbiB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBOQVQgZnVuY3Rpb25hbGl0eSwgc28gbGV0J3Mgc2VlLi4uIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gZGlnIGludG8gdGhpbmdzIGxpa2U6IGBuZl9jdF9oZWxwZXJfaW5pdGAsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCB0aG9zZSBhcmUgdGhlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZW4gdGhlcmUgYXJlIHNvbWUgTkFULXJlbGF0ZWQgZnVuY3Rpb25zOiBgbmZubF9ob29rX2R1bXBfbmF0YCwgYG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcmAsIGFuZCB0aGVuIHRoZXNlIG1hdGNoaW5nIGZ1bmN0aW9uczogYHRvc19tdF9jaGVja2AsIGB0Y3Btc3NfbXRfY2hlY2tgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGVidGFibGVzIGNoYW5nZXMsIHNvIEknbGwgY2hlY2sgb24gYGNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlcmAgYW5kIGBkb19yZXBsYWNlYC4gSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCBgbmZubF9jdGhlbHBlcl9uZXdgLCBgbmZubF9jdGhlbHBlcl9nZXRgLCBgbmZubF9jdGhlbHBlcl9kZWxgLCBhbmQgYGN0dGltZW91dF9uZXdfdGltZW91dGAuIE9rYXksIGxldCdzIHN0YXJ0IHdpdGggYSBjbG9zZXIgbG9vayBhdCBgZG9fcmVwbGFjZWAgaW4gZWJ0YWJsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIyOjM0LjkwNzQ2NTc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI5MzQwMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTg3MD1zdGF0aWMgaW50IHRyYW5zbGF0ZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTkyMS1cXHRpZiAodWRjX2NudCkge1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6OTIyOlxcdFxcdC8qIHRoaXMgd2lsbCBnZXQgZnJlZSdkIGluIGRvX3JlcGxhY2UoKS9lYnRfcmVnaXN0ZXJfdGFibGUoKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtOTIzLVxcdFxcdCAqIGlmIGFuIGVycm9yIG9jY3Vyc1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz05OTA9c3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTAtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMDExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMDEyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbylcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTExMC0vKiByZXBsYWNlIHRoZSB0YWJsZSAqL1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MTExMTpzdGF0aWMgaW50IGRvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTExMi17XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExNTQtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMTU1OlxcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXFx1MDAyNnRtcCwgbmV3aW5mbyk7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTU2LVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjI1MT1zdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlcihzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyODUtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMjg2OnN0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCBzb2NrcHRyX3QgYXJnLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjI4Ny17XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyOTYtXFx0XFx0LyogdHJ5IHJlYWwgaGFuZGxlciBpbiBjYXNlIHVzZXJsYW5kIHN1cHBsaWVkIG5lZWRlZCBwYWRkaW5nICovXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMjk3OlxcdFxcdGlmIChyZXQgPT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiBkb19yZXBsYWNlKG5ldCwgYXJnLCBsZW4pID09IDApXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjk4LVxcdFxcdFxcdHJldCA9IDA7XFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzNzMtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyMzc0OlxcdHJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgXFx1MDAyNnRtcCwgbmV3aW5mbyk7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMzc1LVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9MjU0Nz1zdGF0aWMgaW50IGRvX2VidF9zZXRfY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgc29ja3B0cl90IGFyZyxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU2MS1cXHRcXHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1NjI6XFx0XFx0XFx0cmV0ID0gY29tcGF0X2RvX3JlcGxhY2UobmV0LCBhcmcsIGxlbik7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTYzLVxcdFxcdGVsc2VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjQtI2VuZGlmXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTY1OlxcdFxcdFxcdHJldCA9IGRvX3JlcGxhY2UobmV0LCBhcmcsIGxlbik7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTY2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMjozNi4wMzY4MTIyNTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU4MDU1MDA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggbmV0d29yayBzZWN1cml0eSBjb25jZXB0czpcblxuKipEZWVwIERpdmUgaW50byBgbmZubF9ob29rX2R1bXBfbmF0YCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgdG8gdW5kZXJzdGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YC4gIFRoaXMgaXMgbGlrZWx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byBOZXRmaWx0ZXIgKG9yIHBlcmhhcHMgdGhlIE5ldGxpbmsgaW50ZXJmYWNlIGludGVyYWN0aW5nIHdpdGggaXQpLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBcIm5hdFwiIChOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24pIGFzcGVjdC4gXCJEdW1wXCIgc3VnZ2VzdHMgd2UncmUgcmV0cmlldmluZyBpbmZvcm1hdGlvbiwgcHJvYmFibHkgc3RhdGUgdGFibGVzIG9yIHJ1bGUgY29uZmlndXJhdGlvbnMuIFwiSG9va1wiIGltcGxpZXMgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgbGFyZ2VyIHByb2Nlc3M7IGl0J3MgYSBwb2ludCB3aGVyZSB3ZSBjYW4gaW50ZXJjZXB0IGFuZCBwb3RlbnRpYWxseSBtb2RpZnkgbmV0d29yayB0cmFmZmljIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkIGJ5IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoYXQqIGl0J3MgZHVtcGluZywgd2hlcmUgaXQncyBjYWxsZWQsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIE5BVCBpbXBsZW1lbnRhdGlvbi4gSXMgdGhpcyB1c2VyLXNwYWNlIG9yIGtlcm5lbC1zcGFjZT8gVGhlIG5hbWUgc3VnZ2VzdHMga2VybmVsLXNwYWNlLCBpbnRlcmFjdGluZyB3aXRoIE5ldGZpbHRlcidzIGludGVybmFscyBkaXJlY3RseSwgYnV0IEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBpbW1lZGlhdGVseS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgTkFUIGlzc3VlcywgYW5hbHl6aW5nIHRyYWZmaWMgZmxvd3MsIG9yIGV2ZW4gcG90ZW50aWFsbHkgYXVkaXRpbmcgTkFUIGNvbmZpZ3VyYXRpb25zIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgY29udGV4dCBhbmQgcHVycG9zZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJ3MgdXNhZ2UsIGxvb2tpbmcgZm9yIGNhbGwgc2l0ZXMgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMjo0My42MTczNjQ3ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTcxNDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2hvb2tfZHVtcF9uYXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0yNzk9bmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMzOS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MzQwOnN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzQxLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9MzY0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM5Mi1cXHRcXHRpZiAob3BzW2ldLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozOTM6XFx0XFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zOTQtXFx0XFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIyOjQzLjk2MzA4NDYzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUzNDEwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyBgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyYCoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBpcyBkb2luZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGBjdGApIGFuZCBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKGBuYXRgKS4gVGhlIHRlcm0gXCJmb2xsb3dfbWFzdGVyXCIgc3VnZ2VzdHMgYSBkZXBlbmRlbmN5IG9yIGEgYmVoYXZpb3IgYmFzZWQgb24gYSBwcmltYXJ5IG9yIHBhcmVudCBjb25uZWN0aW9uLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggc2NlbmFyaW9zIGludm9sdmluZyBOQVQgYW5kIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgaW4gYG5mdGFibGVzYCBtaWdodCBiZSBtYW5hZ2luZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlmZmVyZW50IGNvbm5lY3Rpb25zIGFuZCB0aGVpciBOQVRlZCBjb3VudGVycGFydHMuIEkgd2FudCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGlzIHNwZWNpZmljIFwiZm9sbG93X21hc3RlclwiIGJlaGF2aW9yIGhhcyBvbiB0aGUgb3ZlcmFsbCBwYWNrZXQgZmxvdy4gSXMgaXQgbWFraW5nIE5BVCBtb3JlIHJvYnVzdD8gRG9lcyBpdCBtZWFuIHRoZSBzdWJzZXF1ZW50IGNvbm5lY3Rpb25zIGhhdmUgc2ltaWxhciBOQVQgbWFwcGluZ3MgdG8gdGhlIG1hc3RlciBjb25uZWN0aW9uPyBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgaW50byB0aGUgbmZ0YWJsZXMgZG9jdW1lbnRhdGlvbiBhbmQgc29tZSByZWxhdGVkIHNvdXJjZSBjb2RlLCBpZiBwb3NzaWJsZSwgdG8gZnVsbHkgZ3Jhc3AgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGludGVuZGVkIHVzZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0OTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMjo0OC4wMTY0OTc5MDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODE4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jdF9uYXRfZm9sbG93X21hc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTI4NT1zdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMwMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTMwMTpzdGF0aWMgdm9pZCBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqdGhpcylcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzMDIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzExPXN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM1OS1cXHRcXHRleHAtXFx1MDAzZWRpciA9ICFkaXI7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzYwOlxcdFxcdGV4cC1cXHUwMDNlZXhwZWN0Zm4gPSBuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXI7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzYxLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTM5Nz1zdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBuZnRfY3RfbmF0IF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzk4LVxcdC5uYW1lID0gXFxcIm5mdF9jdC1mb2xsb3ctbWFzdGVyXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzOTk6XFx0LmV4cGVjdGZuID0gbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQwMC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMjo0OC4wODUzMjMwOTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MDY0MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIE5ldHdvcmsgSGVhZGVyIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGB0b3NfbXRfY2hlY2tgIGFuZCBgdGNwbXNzX210X2NoZWNrYCB2YXJpYWJsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgdGhleSdyZSBpbi4gQXJlIHRoZXkgZW5hYmxlZCwgZGlzYWJsZWQsIGNvbmZpZ3VyZWQgaW4gc29tZSBjdXN0b20gd2F5PyBXaGF0IGFyZSB0aGVpciB2YWx1ZXM/IFdoYXQgYXJlIHRoZXkgKnN1cHBvc2VkKiB0byBiZT8gQXJlIHRoZXNlIGV2ZW4gcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgaW52ZXN0aWdhdGlvbj8gT3Igc2hvdWxkIEkgbW92ZSBvbiB0byBvdGhlciBhcmVhcz8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyB0aGVpciBjdXJyZW50IHNldHRpbmdzIGFuZCBjb21wYXJpbmcgdGhlbSB0byB0aGUgYmFzZWxpbmUgb3IgZXhwZWN0ZWQgY29uZmlndXJhdGlvbi4gRGVwZW5kaW5nIG9uIHRoZSByZXN1bHRzLCB0aGF0IHdpbGwgZGlyZWN0IG1lLCBmb3IgaW5zdGFuY2UgaWYgYm90aCBhcmUgY2hlY2tlZCBhbmQgdGhleSBzaG91bGRudCBiZSwgb3IgaWYgdGhleSBhcmUgY2hlY2tlZCBhbmQgdGhleSBzaG91bGQgYmUsIG9yIGlmIG9ubHkgb25lIGlzIGVuYWJsZWQgZXRjLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBjb25maWd1cmF0aW9uIGFub21hbHkgaGVyZSBjYW4gZXhwbGFpbiB0aGUgcGVyZm9ybWFuY2UgYmVoYXZpb3VyIHRoYXQgdHJpZ2dlcmVkIHRoaXMgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxNzgsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMjo1MS41NTU5NjU1OTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mjg4NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRvc19tdF9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X2RzY3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYz00Mj1zdGF0aWMgaW50IGRzY3BfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy01MS1cXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYzo1MjpzdGF0aWMgaW50IHRvc19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy01My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYz03ND1zdGF0aWMgc3RydWN0IHh0X21hdGNoIGRzY3BfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jLTk0LVxcdFxcdC5mYW1pbHlcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYzo5NTpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gdG9zX210X2NoZWNrLFxcbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jLTk2LVxcdFxcdC5tYXRjaFxcdFxcdD0gdG9zX210LFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtMTAzLVxcdFxcdC5mYW1pbHlcXHRcXHQ9IE5GUFJPVE9fSVBWNixcXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYzoxMDQ6XFx0XFx0LmNoZWNrZW50cnlcXHQ9IHRvc19tdF9jaGVjayxcXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy0xMDUtXFx0XFx0Lm1hdGNoXFx0XFx0PSB0b3NfbXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIyOjUxLjYxNDI1ODcyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3Njc2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwbXNzX210X2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci94dF90Y3Btc3MuYz0yNT10Y3Btc3NfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbi0tXFxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYy04MC1cXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jOjgxOnN0YXRpYyBpbnQgdGNwbXNzX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtODIte1xcbi0tXFxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYz05Mz1zdGF0aWMgc3RydWN0IHh0X21hdGNoIHRjcG1zc19tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYy05Ni1cXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjQsXFxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYzo5NzpcXHRcXHQuY2hlY2tlbnRyeVxcdD0gdGNwbXNzX210X2NoZWNrLFxcbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtOTgtXFx0XFx0Lm1hdGNoXFx0XFx0PSB0Y3Btc3NfbXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIyOjUxLjY3NjAzMjg2N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5MzM1MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgYG5mbmxfY3RoZWxwZXJfbmV3YCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiBgbmZubF9jdGhlbHBlcl9uZXdgLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCBuYW1lLCBJJ20gYXNzdW1pbmcgdGhpcyBpcyBhICpuZXcqIG9yIG1vZGlmaWVkIGhlbHBlciBmdW5jdGlvbiByZWxhdGVkIHRvIENUIChjb250ZXh0IHRyYWNraW5nKSwgcHJlc3VtYWJseSB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbjpcblxuKiAgIFdoYXQncyBjaGFuZ2VkIGluIGBuZm5sX2N0aGVscGVyX25ld2AgZnJvbSB0aGUgb2xkZXIgdmVyc2lvbnM/IElzIHRoaXMgYSBjb21wbGV0ZSByZXdyaXRlLCBhIHJlZmFjdG9yaW5nLCBvciBqdXN0IGFuIGluY3JlbWVudGFsIGltcHJvdmVtZW50PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMuXG4qICAgV2hhdCBzcGVjaWZpYyBjb250ZXh0KHMpIGlzIGl0ICpoZWxwaW5nKiB0byB0cmFjaz8gSXMgdGhpcyBmb3IgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0cmFja2luZywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lmaWM/IFdoYXQgYXJlIHRoZSBuZXcgZWRnZS1jYXNlcz9cbiogICBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCBpbnRlcmFjdGluZyB3aXRoPyBBcmUgdGhlcmUgYW55IG5ldyBzdHJ1Y3R1cmVzIGFkZGVkPyBBbnkgY2hhbmdlcyB0byBleGlzdGluZyBzdHJ1Y3R1cmVzPyBXaGF0IGxvY2tpbmcgaXMgaW52b2x2ZWQ/IElzIHRoZXJlIGEgcmlzayBvZiByYWNlIGNvbmRpdGlvbnMgdGhhdCB3YXJyYW50IGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uP1xuKiAgIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzPyBJcyBpdCB1cHN0cmVhbSwgZG93bnN0cmVhbSwgb3IgYSBkaXJlY3QgbGluaz8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIE5ldGZpbHRlciBob29rcyBvciBtb2R1bGVzLCBhbmQgYXJlIHRoZXkgd2VsbC1kZWZpbmVkP1xuKiAgIElzIGl0IGdvaW5nIHRvIGhhbmRsZSBuZXcgcHJvdG9jb2xzPyBEb2VzIHRoaXMgaW52b2x2ZSBTSVAsIEZUUCwgb3Igb3RoZXIgYXBwbGljYXRpb24gbGF5ZXIgcHJvdG9jb2xzPyBIb3cgZG8gdGhlIG5ldyBwcm90b2NvbHMgaW1wcm92ZSB0aGUgZXhpc3Rpbmcgb25lcz9cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBtaW5vciB0d2Vhaywgb3IgZG9lcyBpdCByZXByZXNlbnQgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIENUPyBUaGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyBkZWVwIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwMzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjI6NTYuMDc1MzcxMDA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk3NTQ2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZubF9jdGhlbHBlcl9uZXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTM5MT1uZm5sX2N0aGVscGVyX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NDI2OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQyNy1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mbmxfY3RoZWxwZXJfY2JbTkZOTF9NU0dfQ1RIRUxQRVJfTUFYXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc0OS1cXHRbTkZOTF9NU0dfQ1RIRUxQRVJfTkVXXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6NzUwOlxcdFxcdC5jYWxsXFx0XFx0PSBuZm5sX2N0aGVscGVyX25ldyxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTc1MS1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9NVVRFWCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjI6NTYuNDA1MTI5NjYyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTM5NTE2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgY3R0aW1lb3V0X25ld190aW1lb3V0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcsIFwiT2theSwgd2UncmUgdGFsa2luZyBhYm91dCBgY3R0aW1lb3V0X25ld190aW1lb3V0YC4gUmlnaHQgYXdheSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGNhbGwgc3RhY2suLi4gd2hhdCBpbml0aWF0ZWQgdGhpcyBjYWxsPyBXaGF0IGNvbnRleHQgaXMgaXQgb3BlcmF0aW5nIHdpdGhpbj8gSXMgaXQgaGFuZGxpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBrZWVwLWFsaXZlcywgcmV0cmFuc21pc3Npb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cIiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IG1hcHBpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIGBjdHRpbWVvdXRgIHN0cnVjdHVyZSBpdHNlbGYg4oCTIHdoYXQgZmllbGRzIGFyZSByZWxldmFudCBoZXJlPyBUaW1lb3V0IHZhbHVlLCBhc3NvY2lhdGVkIGNhbGxiYWNrLCBjb250ZXh0IHBvaW50ZXIuLi4gR290dGEgY29uc2lkZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGludm9sdmVzIHRocmVhZGluZyBvciBpbnRlcnJ1cHRzLiBNZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uIOKAkyBhcmUgd2UgbGVha2luZyByZXNvdXJjZXMgYW55d2hlcmU/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIGh1Z2UuIElzIHRoZXJlIGFueSBleGlzdGluZyBkb2N1bWVudGF0aW9uIG9yIHRlc3QgY2FzZXMgZm9yIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24/XG5JJ20gYWxzbyBjb25zaWRlcmluZyBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gV2hhdCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gV2hhdCBpZiB0aGUgdGltZW91dCB2YWx1ZSBpcyBhYnN1cmRseSBsYXJnZSBvciBzbWFsbD8gSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmc/IENvdWxkIHRoaXMgYmUgYSBib3R0bGVuZWNrIHVuZGVyIGhlYXZ5IGxvYWQ/IEdvdHRhIGNoZWNrIGZvciB0aGF0LiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBMZXQncyBzZWUgaG93IHRoZXkgZG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzYzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjI6NTkuODE5MDgzMDAzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU5MTA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdHRpbWVvdXRfbmV3X3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM9Njc9Y3RubF90aW1lb3V0X3BhcnNlX3BvbGljeSh2b2lkICp0aW1lb3V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMtOTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM6OTQ6c3RhdGljIGludCBjdHRpbWVvdXRfbmV3X3RpbWVvdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYy05NS1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jPTUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgY3R0aW1lb3V0X2NiW0lQQ1ROTF9NU0dfVElNRU9VVF9NQVhdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jLTUzMS1cXHRbSVBDVE5MX01TR19USU1FT1VUX05FV10gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM6NTMyOlxcdFxcdC5jYWxsXFx0XFx0PSBjdHRpbWVvdXRfbmV3X3RpbWVvdXQsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMtNTMzLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMjo1OS44Nzk2Nzk3OTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1OTAzMTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLiBOYXR1cmFsbHksIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGNyaXRpY2FsIHJvbGUgdGhpcyBmdW5jdGlvbiBwbGF5cyB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYSBoZWxwZXIgYWN0dWFsbHkgXCJyZWdpc3RlcnNcIiBpdHNlbGYsIGJleW9uZCB0aGUgb2J2aW91cy4gSXQncyBub3QganVzdCBhIG1hdHRlciBvZiBtYWtpbmcgaXRzIHByZXNlbmNlIGtub3duLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDsgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUsIG9mIGNvdXJzZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYXR0YWNoaW5nIGEgcHJvdG9jb2wtc3BlY2lmaWMgaGFuZGxlciwgYSBwb3J0IHJhbmdlLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBXaGF0J3MgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGxvb2sgbGlrZSBpbiByZWxhdGlvbiB0byBOQVQnaW5nIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgY29ubnRyYWNrIHN0YXRlcz8gVGhlcmUncyBhbHdheXMgdGhlIGNvbmNlcm4gYWJvdXQgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHdoZW4gbW9kaWZ5aW5nIHNoYXJlZCBzdHJ1Y3R1cmVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNhbGwgc2VxdWVuY2UgYW5kIHdoZXRoZXIgdGhpcyByZWdpc3RyYXRpb24gaXMgYXRvbWljLiBJIHNob3VsZCBwcm9iYWJseSBicnVzaCB1cCBvbiB0aGUgcmVsZXZhbnQgUkZDcyBhbmQgdGhlIGV4YWN0IGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb24gZm9yIHZhcmlvdXMgcHJvdG9jb2xzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGZpbmVyIHBvaW50cyBvZiBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBOZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlIGFuZCBpdHMgdXNlIGJ5IGEgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhlbHBzIGlkZW50aWZ5IGFuZCBoYW5kbGUgc3BlY2lmaWMgYXBwbGljYXRpb24tbGV2ZWwgcHJvdG9jb2xzIHRvIGZhY2lsaXRhdGUgcHJvcGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzQxLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjM6MDMuNDM4NzE0MTkyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDk5MTQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MzY2PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTM2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzozNjg6aW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzY5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQwNi19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDA3OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3Rlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDA4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTQwOT1pbnQgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MjEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDIyOlxcdGVyciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihuZXdfaGVscGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MjMtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz01MDY9aW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MjItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NTIzOlxcdFxcdGVyciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihuZXdfaGVscGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MjQtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjM6MDMuNTAzNzEwNTA5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODk2MjEwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgc3BlY2lmaWMgdG9waWMsIGFpbWVkIGRpcmVjdGx5IGF0IGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZl9jdF9oZWxwZXJfaW5pdGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIHRoaW5raW5nIGlzLCBsZXQncyBnZXQgcmlnaHQgdG8gaXQuIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG5mX2N0X2hlbHBlcl9pbml0YC4gTm8gZmx1ZmYsIG5vIHByZWxpbWluYXJpZXMsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBXaGF0IGRvZXMgaXQgaW5pdGlhbGl6ZT8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIHN5c3RlbT8gSSBuZWVkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGl0cyBpbXBhY3QuIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9uczogSXMgdGhpcyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uPyBEb2VzIGl0IGRlYWwgd2l0aCBoZWxwZXIgbW9kdWxlcywgb3IgaXMgaXQgbW9yZSBvZiBhIGdlbmVyYWwgc2V0dXAgcm91dGluZT8gSXMgdGhpcyB3aGVyZSB3ZSdyZSBnb2luZyB0byBnZXQgdGhlIGRhdGEgc3RydWN0dXJlcyBzZXQgdXA/IEknbSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gYSBtdWx0aS10aHJlYWRlZCBuZXR3b3JrIHN0YWNrLiBPa2F5LCBsZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMTU1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjM6MDYuNjkzMzMzNzA1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDAwNTA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9oZWxwZXJfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00NzE9RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NzItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDczOnZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NzQtXFx0XFx0ICAgICAgIHU4IGwzbnVtLCB1MTYgcHJvdG9udW0sIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy01MDMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjUwNDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzowNi43NTMzNDQ3NDNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1ODgzODQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipBbmFseXppbmcgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9yIHNpZ25pZmljYW5jZSBvZiB0aGlzIGZ1bmN0aW9uLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBjb25udHJhY2sgc3lzdGVtLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgaXRzIHJvbGUgaXMgcmVsYXRlZCB0byBmaW5kaW5nIG9yIGxvY2F0aW5nIHNvbWV0aGluZyDigJMgbGlrZWx5IGEgXCJoZWxwZXJcIiB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBcIkhlbHBlclwiIHN1Z2dlc3RzIGEgbW9kdWxlIHRoYXQgYXNzaXN0cyB0aGUgY29ubnRyYWNrIGluIHVuZGVyc3RhbmRpbmcgb3IgZGVhbGluZyB3aXRoIHNwZWNpZmljIHByb3RvY29scy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgY29ubnRyYWNrIGhlbHBlcnMgYXJlIHVzdWFsbHkgdXNlZCB0byBpbnNwZWN0IHBhY2tldCBwYXlsb2FkcyB0byBkZXJpdmUgaW5mb3JtYXRpb24gdGhhdCBoZWxwcyB0aGUgY29ubnRyYWNrIG1vZHVsZSBtYWludGFpbiBjb25uZWN0aW9uIHN0YXRlIGluIHByb3RvY29scyB0aGF0IGRvbid0IGZpdCB0aGUgbm9ybWFsIFRDUC9VRFAgcGF0dGVybiAobGlrZSBGVFAsIFNJUCwgZXRjLikuIE5vdyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgYW5kIGhvdyB0aGlzIGZpdHMgd2l0aGluIHRoZSBlbnRpcmUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0uLi4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gcmV2ZWFscyBzb21ldGhpbmcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY1OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjEwLjQxMjE4Njg1NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzMDIxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTU9c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjU2Ol9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNzUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjc2OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy03Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTc5PW5mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjg1OlxcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTg2LSNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtOTAtXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjkxOlxcdFxcdFxcdGggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChuYW1lLCBsM251bSwgcHJvdG9udW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTkyLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz0xMzQ9bmZfbmF0X2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTQxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxNDI6XFx0aCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKG5hbWUsIGwzbnVtLCBwcm90b251bSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMTQzLVxcdGlmICghaCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzoxMC40NzE0OTMzMjJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMDg1NTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyJ3MgbW9kdWxlIGdldHRpbmcgZnVuY3Rpb24sIGBuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGJyb2FkZXIgYG5ldGZpbHRlcmAgZnJhbWV3b3JrLiBXaHkgYXJlIHdlIHRhcmdldGluZyB0aGlzPyBBcmUgd2UgbG9va2luZyBmb3IgYSByYWNlIGNvbmRpdGlvbiwgYSB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhayB3aXRoaW4gdGhlIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmc/IElzIHRoZXJlIHNvbWUgdW5leHBlY3RlZCBtb2R1bGUgbG9hZC91bmxvYWQgYmVoYXZpb3IgaW4gYSBzcGVjaWZpYyB1c2UgY2FzZT8gT3IgYXJlIHdlIGF0dGVtcHRpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaGVscGVyIG1vZHVsZeKAmXMgcmVmZXJlbmNlIGNvdW50cyBpbiByZWxhdGlvbiB0byBjb25uZWN0aW9uIHRyYWNraW5nPyBUaGUgY29udGV4dCBvZiB3aHkgdGhpcyBmdW5jdGlvbiBoYXMgYmVjb21lIHRoZSBmb2N1cyBvZiBteSBhdHRlbnRpb24gd2lsbCBzaGFwZSB0aGUgcXVlc3Rpb25zIEkgYXNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZmxvdyBvZiBjb250cm9sIHRoYXQgY2FsbHMgdGhpcyBtb2R1bGUgYW5kIHdoaWNoIHBhcnRzIGFyZSB1bmRlciBvdXIgY29udHJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0OTQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzoxMy40NzIzNTA3NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTg2Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9Nzg9c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjc5Om5mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy04MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xMDctfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjEwODpFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xMDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjEzLjUyOTU0MTQzNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQzODg2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmZfbmF0X2hlbHBlcl90cnlfbW9kdWxlX2dldGAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBuZl9uYXRfaGVscGVyX3RyeV9tb2R1bGVfZ2V0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHJlZnJlc2ggb3VyIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpcyBzaXRzIGluIHRoZSBvdmVyYWxsIE5BVCBoZWxwZXIgZnJhbWV3b3JrLiBJJ20gYXNzdW1pbmcgd2UncmUgY29uY2VybmVkIHdpdGggbW9kdWxlIGxvYWRpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGhlbHBlciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY3ljbGluZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgZ290Y2hhczogcmFjZSBjb25kaXRpb25zLCBkb3VibGUtZnJlZXMgKG9yIHJhdGhlciwgdGhlIGxhY2sgdGhlcmVvZiB3aGVuIHRoaW5ncyBmYWlsKS4gSSdtIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbm50cmFjaywgYW5kIGhvdyB3ZSdyZSBlbnN1cmluZyB0aGF0IGEgaGVscGVyIG1vZHVsZSBzdGF5cyBsb2FkZWQgbG9uZyBlbm91Z2ggZm9yIHRoZSBjb25udHJhY2sgZW50cnkgdG8gYmUgY2xlYW5lZCB1cCB3aGVuIGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4gV2Ugc2hvdWxkIHJlYWxseSBiZSBkaWdnaW5nIGludG8gaG93IHJvYnVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgaGVyZS4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSByZWZlcmVuY2UgY291bnQgaXMgbWFuYWdlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgc2NlbmFyaW9zIHdoZXJlIGEgbW9kdWxlIGNvdWxkIGJlIHVubG9hZGVkIHByZW1hdHVyZWx5LCBsZWF2aW5nIGRhbmdsaW5nIHBvaW50ZXJzIG9yIHVuZGVmaW5lZCBiZWhhdmlvciBpbiB0aGUgbmV0ZmlsdGVyIHN0YWNrLiBBbHNvLCBjaGVja2luZyBmb3IgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIGNvbnRlbnRpb24gd2hlbiBncmFiYmluZyBhbmQgcmVsZWFzaW5nIG1vZHVsZSByZWZlcmVuY2VzIGlzIGEgbXVzdC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHdvcmtzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTk2MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjE2Ljg3MzQyOTY1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ4MTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9uYXRfaGVscGVyX3RyeV9tb2R1bGVfZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTEzMz1pbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzoxMzQ6bmZfbmF0X2hlbHBlcl90cnlfbW9kdWxlX2dldChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTEzNS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xNjctfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjE2ODpFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0xNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjE2LjkyNzkxNzE3OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM5MTMyNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIHNlY3VyaXR5IGNvbmNlcHRzOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBuZm5sX2hvb2tfZHVtcF9uYXRgKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIGBuZm5sX2hvb2tfZHVtcF9uYXRgLiAgVGhpcyBpcyBsaWtlbHkgYSBmdW5jdGlvbiByZWxhdGVkIHRvIE5ldGZpbHRlciAob3IgcGVyaGFwcyB0aGUgTmV0bGluayBpbnRlcmZhY2UgaW50ZXJhY3Rpbmcgd2l0aCBpdCksIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggdGhlIFwibmF0XCIgKE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbikgYXNwZWN0LiBcIkR1bXBcIiBzdWdnZXN0cyB3ZSdyZSByZXRyaWV2aW5nIGluZm9ybWF0aW9uLCBwcm9iYWJseSBzdGF0ZSB0YWJsZXMgb3IgcnVsZSBjb25maWd1cmF0aW9ucy4gXCJIb29rXCIgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgYSBsYXJnZXIgcHJvY2VzczsgaXQncyBhIHBvaW50IHdoZXJlIHdlIGNhbiBpbnRlcmNlcHQgYW5kIHBvdGVudGlhbGx5IG1vZGlmeSBuZXR3b3JrIHRyYWZmaWMgdGhhdCBpcyBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqd2hhdCogaXQncyBkdW1waW5nLCB3aGVyZSBpdCdzIGNhbGxlZCwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgTkFUIGltcGxlbWVudGF0aW9uLiBJcyB0aGlzIHVzZXItc3BhY2Ugb3Iga2VybmVsLXNwYWNlPyBUaGUgbmFtZSBzdWdnZXN0cyBrZXJuZWwtc3BhY2UsIGludGVyYWN0aW5nIHdpdGggTmV0ZmlsdGVyJ3MgaW50ZXJuYWxzIGRpcmVjdGx5LCBidXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGltbWVkaWF0ZWx5LiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBOQVQgaXNzdWVzLCBhbmFseXppbmcgdHJhZmZpYyBmbG93cywgb3IgZXZlbiBwb3RlbnRpYWxseSBhdWRpdGluZyBOQVQgY29uZmlndXJhdGlvbnMgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBzcGVjaWZpYyBjb250ZXh0IGFuZCBwdXJwb3NlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyB1c2FnZSwgbG9va2luZyBmb3IgY2FsbCBzaXRlcyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjIxLjY2NzA1MjkxM1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NjY0MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mbmxfaG9va19kdW1wX25hdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI3OT1uZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzM5LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozNDA6c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zNDEtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0zNjQ9c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzkyLVxcdFxcdGlmIChvcHNbaV0tXFx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjM5MzpcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM5NC1cXHRcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjM6MjEuOTUxNzIyMjA1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTc1Mjc5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBuZm5sX2N0aGVscGVyX25ld2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmZubF9jdGhlbHBlcl9uZXdgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIHB1cnBvc2UsIHRoZSBjb3JlIGxvZ2ljLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBnaXZlbiB0aGUgbmFtaW5nLCBidXQgYSBxdWljayBzY2FuIHdpbGwgY29uZmlybS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3Vlcz8gRG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5LCBvciBhcmUgdGhlcmUgb2J2aW91cyBwbGFjZXMgZm9yIHJlc291cmNlIGxlYWtzPyBTcGVjaWZpY2FsbHksIEknbGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGlmIGl0J3MgdXNpbmcgdGhlIG5ldyBjb25udHJhY2sgQVBJIG9yIGxlZ2FjeSBtZWNoYW5pc21zLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBpZiBpdCBtYWtlcyB1c2Ugb2YgYW55IG9mIHRoZSBwZXItQ1BVIGRhdGEgc3RydWN0dXJlcywgYW5kIHdoZXRoZXIgaXQgaGFuZGxlcyBDUFUgYWZmaW5pdHkgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdXNlIG9mIGFueSBhdG9taWMgb3BlcmF0aW9ucywgc2luY2UgdGhpcyBpcyBpbiB0aGUga2VybmVsLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBjb25uZWN0aW9uIHRyYWNraW5nIHN1YnN5c3RlbXMgdG8gdmVyaWZ5IHRoYXQgaXQgaW50ZXJhY3RzIHdpdGggdGhlbSBpbiBhIGNvbnNpc3RlbnQgYW5kIHJvYnVzdCB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTE5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjM6MjUuNDA5MjUyNTE3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzMzc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX25ld1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkxPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjUtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0MjY6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI3LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9jdGhlbHBlcl9jYltORk5MX01TR19DVEhFTFBFUl9NQVhdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzQ5LVxcdFtORk5MX01TR19DVEhFTFBFUl9ORVddXFx0PSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTA6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mbmxfY3RoZWxwZXJfbmV3LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUxLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzoyNS40NzAxOTM0NzVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk0MjU2ODY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBjdHRpbWVvdXRfbmV3X3RpbWVvdXRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0aGlua2luZywgXCJPa2F5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGBjdHRpbWVvdXRfbmV3X3RpbWVvdXRgLiBSaWdodCBhd2F5LCBteSBtaW5kIHN0YXJ0cyB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgY2FsbCBzdGFjay4uLiB3aGF0IGluaXRpYXRlZCB0aGlzIGNhbGw/IFdoYXQgY29udGV4dCBpcyBpdCBvcGVyYXRpbmcgd2l0aGluPyBJcyBpdCBoYW5kbGluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGtlZXAtYWxpdmVzLCByZXRyYW5zbWlzc2lvbnMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1wiIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgbWFwcGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgYGN0dGltZW91dGAgc3RydWN0dXJlIGl0c2VsZiDigJMgd2hhdCBmaWVsZHMgYXJlIHJlbGV2YW50IGhlcmU/IFRpbWVvdXQgdmFsdWUsIGFzc29jaWF0ZWQgY2FsbGJhY2ssIGNvbnRleHQgcG9pbnRlci4uLiBHb3R0YSBjb25zaWRlciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgaW52b2x2ZXMgdGhyZWFkaW5nIG9yIGludGVycnVwdHMuIE1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24g4oCTIGFyZSB3ZSBsZWFraW5nIHJlc291cmNlcyBhbnl3aGVyZT8gVGhlIGltcGxpY2F0aW9ucyBhcmUgaHVnZS4gSXMgdGhlcmUgYW55IGV4aXN0aW5nIGRvY3VtZW50YXRpb24gb3IgdGVzdCBjYXNlcyBmb3IgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbj9cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBXaGF0IGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzPyBXaGF0IGlmIHRoZSB0aW1lb3V0IHZhbHVlIGlzIGFic3VyZGx5IGxhcmdlIG9yIHNtYWxsPyBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gQ291bGQgdGhpcyBiZSBhIGJvdHRsZW5lY2sgdW5kZXIgaGVhdnkgbG9hZD8gR290dGEgY2hlY2sgZm9yIHRoYXQuIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3NDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzozMi40MTI3NjUwMDNaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzA3NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0dGltZW91dF9uZXdfdGltZW91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYz02Nz1jdG5sX3RpbWVvdXRfcGFyc2VfcG9saWN5KHZvaWQgKnRpbWVvdXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYy05My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYzo5NDpzdGF0aWMgaW50IGN0dGltZW91dF9uZXdfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5jLTk1LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmM9NTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBjdHRpbWVvdXRfY2JbSVBDVE5MX01TR19USU1FT1VUX01BWF0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmMtNTMxLVxcdFtJUENUTkxfTVNHX1RJTUVPVVRfTkVXXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYzo1MzI6XFx0XFx0LmNhbGxcXHRcXHQ9IGN0dGltZW91dF9uZXdfdGltZW91dCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuYy01MzMtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfTVVURVgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjMyLjQ4MDQ3NzI4WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjI1NzQyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHRvc19tdF9jaGVja2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdG9zX210X2NoZWNrYC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIHB1cnBvc2UgaXMuIEJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSeKAmW0gZ3Vlc3NpbmcgdGhpcyBpcyBsaWtlbHkgYSBtZWNoYW5pc20gZm9yIGNoZWNraW5nIHNvbWUga2luZCBvZiB0ZXJtcyBvZiBzZXJ2aWNlIHJlbGF0ZWQgdG8gbWFjaGluZSB0cmFuc2xhdGlvbi4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBpdCBwcm9iYWJseSBmbGFncyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBjb250ZW50IGJlZm9yZSBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiAtIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGJsYWNrbGlzdCwgbWF5YmUgYSByZWd1bGFyIGV4cHJlc3Npb24tYmFzZWQgZmlsdGVyLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYSBtb2RlbCB0cmFpbmVkIG9uIGZsYWdnZWQgdGV4dD8gSXMgdGhpcyBhIHN0YW5kYWxvbmUgbW9kdWxlLCBvciBpbnRlZ3JhdGVkIGludG8gYSBsYXJnZXIgcGlwZWxpbmU/IEknbGwgYmUgbG9va2luZyBmb3Igc2lnbnMgb2Ygc2Vuc2l0aXZpdHkgdG93YXJkcyBQSUksIGhhdGUgc3BlZWNoLCBvciBtYXliZSBldmVuIGNvcHlyaWdodCBpbmZyaW5nZW1lbnRzLCBhbGwgY29tbW9uIGNvbmNlcm5zIHdoZW4gZGVhbGluZyB3aXRoIE1ULiBBIGNydWNpYWwgYXNwZWN0IHdpbGwgYmUgdW5kZXJzdGFuZGluZyB0aGUgdHJhZGUtb2ZmcyBpbXBsZW1lbnRlZC4gSG93IHN0cmljdCBpcyB0aGlzIGNoZWNrPyBEb2VzIGl0IGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLCB3aGljaCBjb3VsZCBodXJ0IHBlcmZvcm1hbmNlLCBvciBpcyBpdCBtb3JlIGxlbmllbnQsIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIHJpc2s/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgZmxhZ2dpbmcgdGhlIGFwcHJvcHJpYXRlIHRleHRzLiBGaW5hbGx5LCBob3cgYXJlIHRoZSBsb2dzIGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgYWxlcnRzIGFzc29jaWF0ZWQgd2l0aCBoaWdoIHZvbHVtZXMgb2YgZmxhZ2dlZCBjb250ZW50PyBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzMTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzozNy40MDMwNTQxNDZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjE3MTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0b3NfbXRfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci94dF9kc2NwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci94dF9kc2NwLmM9NDI9c3RhdGljIGludCBkc2NwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtNTEtXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmM6NTI6c3RhdGljIGludCB0b3NfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtNTMte1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmM9NzQ9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBkc2NwX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy05NC1cXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjQsXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmM6OTU6XFx0XFx0LmNoZWNrZW50cnlcXHQ9IHRvc19tdF9jaGVjayxcXG5uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYy05Ni1cXHRcXHQubWF0Y2hcXHRcXHQ9IHRvc19tdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfZHNjcC5jLTEwMy1cXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmM6MTA0OlxcdFxcdC5jaGVja2VudHJ5XFx0PSB0b3NfbXRfY2hlY2ssXFxubmV0L25ldGZpbHRlci94dF9kc2NwLmMtMTA1LVxcdFxcdC5tYXRjaFxcdFxcdD0gdG9zX210LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzozNy41MDUyMzE3NTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNTQ0MjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIG5ldHdvcmsgcHJvdG9jb2xzIGFuZCBUQ1AgcGVyZm9ybWFuY2U6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBUQ1AgTVNTIGFuZCBNVFUgVmFsaWRhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBcIkNoZWNrIGB0Y3Btc3NfbXRfY2hlY2tgXCIuIFRoYXQncyBhIGNsZWFyIGluZGljYXRvciB0aGF0IEknbSBmb2N1c2luZyBvbiB2YWxpZGF0aW5nIHRoZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSB3aXRoaW4gYSBUQ1AgY29ubmVjdGlvbiwgbGlrZWx5IGluIHJlbGF0aW9uIHRvIHRoZSBNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0IChNVFUpIG9mIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgcGF0aC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gZW5zdXJpbmcgZWZmaWNpZW50IGFuZCByZWxpYWJsZSBkYXRhIHRyYW5zbWlzc2lvbi4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGRldGFpbHMgb2YgaG93IHRoZSBjaGVjayBpdHNlbGYgaXMgc3RydWN0dXJlZC4gSXMgaXQgYSB2YWxpZGF0aW9uIG9mIG5lZ290aWF0ZWQgTVNTIHZhbHVlcyBhZ2FpbnN0IHRoZSBwYXRoIE1UVT8gSXMgaXQgdmVyaWZ5aW5nIHRoZSBNU1MgdmFsdWVzIG9mZmVyZWQgaW4gdGhlIFNZTiBwYWNrZXRzPyBJcyBpdCBoYW5kbGluZyBQTVRVRCAoUGF0aCBNVFUgRGlzY292ZXJ5KSBjb3JyZWN0bHk/IFRoZSBjb250ZXh0IGlzIHdoYXQgbWF0dGVycyBoZXJlLiBJIHdpbGwgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBhcHByb2FjaCB0YWtlbiB0byBkaXNjb3ZlciBhbmQgdmFsaWRhdGUgVENQIE1TUy4gVGhpcyBtYXR0ZXJzIHNpbmNlIGZyYWdtZW50aW5nIHBhY2tldHMgaXMgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8uIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgZnJhZ21lbnRhdGlvbiBhbmQgcmVhc3NlbWJseSBvdmVyaGVhZCwgd2hpY2ggY2FuIHNldmVyZWx5IGltcGFjdCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBvbiBwYXRocyB3aXRoIHZhcnlpbmcgTVRVIHNpemVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHZhbGlkYXRpb24gc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5NjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzo0Mi41MTA2Nzc3MzVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTg5NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcG1zc19tdF9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmM9MjU9dGNwbXNzX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtODAtXFxubmV0L25ldGZpbHRlci94dF90Y3Btc3MuYzo4MTpzdGF0aWMgaW50IHRjcG1zc19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jLTgyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmM9OTM9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCB0Y3Btc3NfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMtOTYtXFx0XFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbm5ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmM6OTc6XFx0XFx0LmNoZWNrZW50cnlcXHQ9IHRjcG1zc19tdF9jaGVjayxcXG5uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jLTk4LVxcdFxcdC5tYXRjaFxcdFxcdD0gdGNwbXNzX210LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNToyMzo0Mi41NjgyNzE4MTNaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMyMDE0Njk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludGVybmFsIEF1ZGl0IC0gQ2hlY2tpbmcgYG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcmAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyYCBydWxlLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGNyaXRpY2FsIHBpZWNlIGluIHRoZSBvdmVyYWxsIE5BVCBhbmQgY29ubmVjdGlvbiB0cmFja2luZyBzdHJhdGVneT8gRG9lcyBpdCBiZWhhdmUgYXMgZXhwZWN0ZWQsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzIG9mIHN0YXRlZnVsIGZpcmV3YWxscyBhbmQgTkFUIGNvbmZpZ3VyYXRpb25zIEkndmUgc2VlbiBpbiB0aGUgcGFzdD8gTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZTogd2hhdCdzIHRoZSB1c2UtY2FzZSBmb3IgdGhpcyBydWxlPyBJcyB0aGVyZSBhIHBlcmZvcm1hbmNlIGltcGFjdCB0byB1c2luZyB0aGlzIHBhcnRpY3VsYXIgcnVsZT8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyB0aWVkIHRvIGl0P1xuXG5UaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTEyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjM6NDcuODg4NDIwOTY5WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI2MDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyODU9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzMDAtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzMDE6c3RhdGljIHZvaWQgbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnRoaXMpXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzAyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTMxMT1zdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9ldmFsKHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzNTktXFx0XFx0ZXhwLVxcdTAwM2VkaXIgPSAhZGlyO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTM2MDpcXHRcXHRleHAtXFx1MDAzZWV4cGVjdGZuID0gbmZ0X2N0X25hdF9mb2xsb3dfbWFzdGVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM2MS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEzOTc9c3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gbmZ0X2N0X25hdCBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM5OC1cXHQubmFtZSA9IFxcXCJuZnRfY3QtZm9sbG93LW1hc3RlclxcXCIsXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzk5OlxcdC5leHBlY3RmbiA9IG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MDAtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTU6MjM6NDcuOTQ1Njg3MjQ4WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDkyNTUyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGVidGFibGVzLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVwbGFjZW1lbnQgZnVuY3Rpb25hbGl0eSB3b3JrcyB3aXRoaW4gdGhlIGVidGFibGVzIGZyYW1ld29yay4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBkaWcgaW50byBpcyB0aGUgYGRvX3JlcGxhY2VgIGZ1bmN0aW9uIGluIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYC4gSXQncyBwcmV0dHkgb2J2aW91cyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgcmVwbGFjZW1lbnQgbG9naWMgd291bGQgcmVzaWRlLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaW1wbGVtZW50ZWQgaXQsIHdoYXQgY2hlY2tzIHRoZXkncmUgcGVyZm9ybWluZywgYW5kIGhvdyB0aGV5IGhhbmRsZSB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbiBvZiB0aGUgdGFibGUgZW50cmllcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGdpdmVuIHRoaXMgaXMgcGFja2V0IGZpbHRlcmluZy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjExMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjUwLjY1NDk1MTEyMVoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1NjMwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM9ODcwPXN0YXRpYyBpbnQgdHJhbnNsYXRlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtOTIxLVxcdGlmICh1ZGNfY250KSB7XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzo5MjI6XFx0XFx0LyogdGhpcyB3aWxsIGdldCBmcmVlJ2QgaW4gZG9fcmVwbGFjZSgpL2VidF9yZWdpc3Rlcl90YWJsZSgpXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy05MjMtXFx0XFx0ICogaWYgYW4gZXJyb3Igb2NjdXJzXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jPTk5MD1zdGF0aWMgdm9pZCBnZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IGVidF9jb3VudGVyICpvbGRjb3VudGVycyxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTAxMC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjEwMTE6c3RhdGljIGludCBkb19yZXBsYWNlX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCxcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTEwMTItXFx0XFx0XFx0ICAgICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTEwLS8qIHJlcGxhY2UgdGhlIHRhYmxlICovXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoxMTExOnN0YXRpYyBpbnQgZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0xMTEyLXtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMTE1NC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjExNTU6XFx0cmV0ID0gZG9fcmVwbGFjZV9maW5pc2gobmV0LCBcXHUwMDI2dG1wLCBuZXdpbmZvKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTExNTYtXFx0aWYgKHJldCA9PSAwKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yMjUxPXN0YXRpYyBpbnQgY29tcGF0X2NvcHlfZWJ0X3JlcGxhY2VfZnJvbV91c2VyKHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCxcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjI4NS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjIyODY6c3RhdGljIGludCBjb21wYXRfZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4pXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yMjg3LXtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjI5Ni1cXHRcXHQvKiB0cnkgcmVhbCBoYW5kbGVyIGluIGNhc2UgdXNlcmxhbmQgc3VwcGxpZWQgbmVlZGVkIHBhZGRpbmcgKi9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjIyOTc6XFx0XFx0aWYgKHJldCA9PSAtRUlOVkFMIFxcdTAwMjZcXHUwMDI2IGRvX3JlcGxhY2UobmV0LCBhcmcsIGxlbikgPT0gMClcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIyOTgtXFx0XFx0XFx0cmV0ID0gMDtcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjM3My1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjIzNzQ6XFx0cmV0ID0gZG9fcmVwbGFjZV9maW5pc2gobmV0LCBcXHUwMDI2dG1wLCBuZXdpbmZvKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTIzNzUtXFx0aWYgKHJldCA9PSAwKVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTQ3PXN0YXRpYyBpbnQgZG9fZWJ0X3NldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3QgYXJnLFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTYxLVxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU2MjpcXHRcXHRcXHRyZXQgPSBjb21wYXRfZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjMtXFx0XFx0ZWxzZVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU2NC0jZW5kaWZcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jOjI1NjU6XFx0XFx0XFx0cmV0ID0gZG9fcmVwbGFjZShuZXQsIGFyZywgbGVuKTtcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jLTI1NjYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjIzOjUwLjcxMDUxODUyWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2OTQyNTY2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBhbmQgZWJ0YWJsZXMgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmRhbWVudGFsIGNoYW5nZXMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBOQVQgaG9va3MsIGFuZCBlYnRhYmxlcy4gVGhpcyBpcyBhIGZlcnRpbGUgZ3JvdW5kIGZvciBmdXp6aW5nLlxuXG5NeSB0aGlua2luZyBpcyB0byBmb2N1cyBvbiBhIHNldCBvZiBjb3JlIGZ1bmN0aW9ucyB3aGljaCBhcmUgbGlrZWx5IHRvIGJlIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBUaGVzZSBhcmU6IGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgbmZfY3RfaGVscGVyX2luaXRgLCBgX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYGN0dGltZW91dF9uZXdfdGltZW91dGAsIGB0b3NfbXRfY2hlY2tgLCBgdGNwbXNzX210X2NoZWNrYCwgYG5mdF9jdF9uYXRfZm9sbG93X21hc3RlcmAsIGBkb19yZXBsYWNlYCwgYW5kIGBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXJgOyBpdCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBmcm9tIGBjb21wYXRfZG9fcmVwbGFjZWAuXG5cblRoZSBjb3JlIGxvZ2ljIGNoYW5nZXMgYXJlOiBtb2RpZmljYXRpb25zIHRvIGhvdyBjb25udHJhY2sgaGVscGVycyBhcmUgaGFuZGxlZCAoZXNwZWNpYWxseSByZW1vdmluZyBwb3J0LXNwZWNpZmljIGRlZmF1bHRzKSwgYWRkaXRpb25zIG9mIGEgbmV3IGBORl9IT09LX09QX05BVGAgdHlwZSwgY29ycmVjdGlvbnMgdG8gTkFUIGhvb2sgZHVtcGluZywgYSBOQVQgZm9sbG93IG1hc3RlciBleHBlY3RmbiBmb3IgYG5mdF9jdGAsIGFuZCBhIGNyaXRpY2FsIGZpeCBmb3IgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBlYnRhYmxlcycgYGRvX3JlcGxhY2VgLiBBZGRpdGlvbmFsbHksIG5ldyB2YWxpZGF0aW9uIGNoZWNrcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgZm9yIGB4dF9kc2NwYCBhbmQgYHh0X3RjcG1zc2AgbWF0Y2hlcy4gVGhlc2UgYWxsIHJlcHJlc2VudCBzaWduaWZpY2FudCBjb3JlIGtlcm5lbCBjaGFuZ2VzIGFuZCBuZXRmaWx0ZXIgbG9naWMsIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IGNvbmZpZ3MgZW5hYmxlZC4gV2UncmUgbG9va2luZyBhdDpcbiogICBgTkZfQ09OTlRSQUNLYFxuKiAgIGBORl9OQVRgXG4qICAgYEJSSURHRV9ORl9FQlRBQkxFU2BcbiogICBgTkVURklMVEVSX05FVExJTktfSE9PS2BcbiogICBgTkZfQ1RfTkVUTElOS19IRUxQRVJgXG4qICAgYE5GX0NUX05FVExJTktfVElNRU9VVGBcbiogICBgTkZUX0NUYFxuKiAgIGBORVRGSUxURVJfWFRfTUFUQ0hfRFNDUGBcbiogICBgTkVURklMVEVSX1hUX01BVENIX1RDUE1TU2BcbiogICBgTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVGBcbiogICBgTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUGBcbiogICBgTkZfQ09OTlRSQUNLX0FNQU5EQWBcbiogICBgTkZfQ09OTlRSQUNLX0ZUUGBcbiogICBgTkZfQ09OTlRSQUNLX0gzMjNgXG4qICAgYE5GX0NPTk5UUkFDS19JUkNgXG4qICAgYE5GX0NPTk5UUkFDS19ORVRCSU9TX05TYFxuKiAgIGBORl9DT05OVFJBQ0tfU05NUGBcbiogICBgTkZfQ09OTlRSQUNLX1BQVFBgXG4qICAgYE5GX0NPTk5UUkFDS19TQU5FYFxuKiAgIGBORl9DT05OVFJBQ0tfU0lQYFxuKiAgIGBORl9DT05OVFJBQ0tfVEZUUGBcbiogICBgTkZfTkFUX1NOTVBfQkFTSUNgXG5cbkknbSB2ZXJpZnlpbmcgYGRvX3JlcGxhY2VgIGluIGBuZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jYC4gSXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24uXG5cblJpZ2h0LCBJIGFtIHJlYWR5IHRvIHN1Ym1pdCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzIzOCwiT3V0cHV0VG9rZW5zIjo0ODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE1OjI0OjA3LjY1MzA4ODk1WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyNzg0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJCUklER0VfTkZfRUJUQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX1RJTUVPVVRcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX01BVENIX0RTQ1BcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1NcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19BTUFOREFcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSVJDXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfTkVUQklPU19OU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NOTVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19QUFRQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0FORVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NJUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1RGVFBcIixcbiAgICBcIk5GX05BVF9TTk1QX0JBU0lDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJuZl9jdF9oZWxwZXJfaW5pdFwiLFxuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRcIixcbiAgICBcIm5mbmxfaG9va19kdW1wX25hdFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIixcbiAgICBcImN0dGltZW91dF9uZXdfdGltZW91dFwiLFxuICAgIFwidG9zX210X2NoZWNrXCIsXG4gICAgXCJ0Y3Btc3NfbXRfY2hlY2tcIixcbiAgICBcIm5mdF9jdF9uYXRfZm9sbG93X21hc3RlclwiLFxuICAgIFwiZG9fcmVwbGFjZVwiLFxuICAgIFwiY29tcGF0X2NvcHlfZWJ0X3JlcGxhY2VfZnJvbV91c2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzLCBOQVQgaG9va3MsIGFuZCBlYnRhYmxlcy4gSXQgY2hhbmdlcyBob3cgY29ubnRyYWNrIGhlbHBlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIGxvb2tlZCB1cCAocmVtb3ZpbmcgcG9ydC1zcGVjaWZpYyBkZWZhdWx0cyksIGFkZHMgYSBuZXcgTkZfSE9PS19PUF9OQVQgdHlwZSBhbmQgZml4ZXMgTkFUIGhvb2sgZHVtcGluZywgYWRkcyBhIE5BVCBmb2xsb3cgbWFzdGVyIGV4cGVjdGZuIGZvciBuZnRfY3QsIGFuZCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGVidGFibGVzIGRvX3JlcGxhY2UuIEl0IGFsc28gYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3IgeHRfZHNjcCBhbmQgeHRfdGNwbXNzIG1hdGNoZXMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgYW5kIG5ldGZpbHRlciBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiQlJJREdFX05GX0VCVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19USU1FT1VUXCIsXG4gICAgXCJORlRfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9NQVRDSF9EU0NQXCIsXG4gICAgXCJORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTXCIsXG4gICAgXCJORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UXCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfQU1BTkRBXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfRlRQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0lSQ1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TTk1QXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfUFBUUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NBTkVcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX0NPTk5UUkFDS19URlRQXCIsXG4gICAgXCJORl9OQVRfU05NUF9CQVNJQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlclwiLFxuICAgIFwibmZfY3RfaGVscGVyX2luaXRcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kXCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9uYXRcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCIsXG4gICAgXCJjdHRpbWVvdXRfbmV3X3RpbWVvdXRcIixcbiAgICBcInRvc19tdF9jaGVja1wiLFxuICAgIFwidGNwbXNzX210X2NoZWNrXCIsXG4gICAgXCJuZnRfY3RfbmF0X2ZvbGxvd19tYXN0ZXJcIixcbiAgICBcImRvX3JlcGxhY2VcIixcbiAgICBcImNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgTkFUIGhvb2tzLCBhbmQgZWJ0YWJsZXMuIEl0IGNoYW5nZXMgaG93IGNvbm50cmFjayBoZWxwZXJzIGFyZSByZWdpc3RlcmVkIGFuZCBsb29rZWQgdXAgKHJlbW92aW5nIHBvcnQtc3BlY2lmaWMgZGVmYXVsdHMpLCBhZGRzIGEgbmV3IE5GX0hPT0tfT1BfTkFUIHR5cGUgYW5kIGZpeGVzIE5BVCBob29rIGR1bXBpbmcsIGFkZHMgYSBOQVQgZm9sbG93IG1hc3RlciBleHBlY3RmbiBmb3IgbmZ0X2N0LCBhbmQgZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBlYnRhYmxlcyBkb19yZXBsYWNlLiBJdCBhbHNvIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIHh0X2RzY3AgYW5kIHh0X3RjcG1zcyBtYXRjaGVzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGFuZCBuZXRmaWx0ZXIgbG9naWMgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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:nil,}