Name: series-workflow5stf2 Phase: Succeeded StartedAt: 2026-08-17 03:36:16 +0000 UTC FinishedAt: 2026-08-17 07:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[0] Phase: Succeeded StartedAt: 2026-08-17 03:36:16 +0000 UTC FinishedAt: 2026-08-17 03:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 03:36:16 +0000 UTC FinishedAt: 2026-08-17 03:40:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "2dfafd98-7012-4b7a-bf96-bcdbb70c00c2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_execute", "ovs_ct_exit_start", "ovs_ct_exit_finish", "ovs_exit_net" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfc3RhcnQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfZmluaXNoJiMzNDssCiAgICAmIzM0O292c19leGl0X25ldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGhhbmRsaW5nLCBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gIGFuZCBzcGxpdHRpbmcgdGhlIG5ldG5zIGV4aXQgcm91dGluZSB0byBhdm9pZCBob2xkaW5nIGBvdnNfbXV0ZXhgIGR1cmluZyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgY29ubnRyYWNrIGxpbWl0IGNoZWNraW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTIwMmQ3MzFiNmRiNjlkNmQ0OThkYmFlNGY0OWU2OGU3OWJlZDI1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjM4OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDU0IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiYjNDM7c3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgJiM0MzsxNjgzLDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4mIzQzO1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgJiM0MzsxNjk4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE2OTUsNiAmIzQzOzE3MTUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbiYjNDM7XHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3MDksMTIgJiM0MzsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4mIzQzO1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNzMwLDYgJiM0MzsxNzUzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgJiM0MzsxNzk3LDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtcbiB9XG4gXG4mIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuQEAgLTE3OTYsMTIgJiM0MzsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZVwmIzM0Oyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xuIFxuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdFx0bmV0LCBpbmZvLVx1MDAzZWRhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbkBAIC0xODE2LDYgJiM0MzsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG5AQCAtMTgyOCwxOSAmIzQzOzE4NTIsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRjdF9saW1pdC1cdTAwM2V6b25lLCBjdF9saW1pdC1cdTAwM2VsaW1pdCwgcmVwbHkpO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGV4aXRfZXJyO1xuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbiBcbi1leGl0X2Vycjpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTg1MCw3ICYjNDM7MTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICYjNDM7MTg4Myw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxuJiM0MztcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICYjNDM7MTkwNCw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5Nyw4ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuJiM0MztcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTkxOCw3ICYjNDM7MTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggJiM0MzsxOTUxLDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTYsMTIgJiM0MzsyMDM2LDI3IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gI2VuZGlmXG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgUkNVLXByb3RlY3RlZCBjdF9saW1pdF9pbmZvXG4mIzQzOyAqIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgZm9yIG92c19jdF9leGl0X2ZpbmlzaCgpIHRvIGNvbXBsZXRlIHRlYXJkb3duXG4mIzQzOyAqIGFmdGVyIHRoZSBtdXRleCBpcyByZWxlYXNlZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgKm92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MzsjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4mIzQzO1x0cmV0dXJuIG92c19jdF9saW1pdF9leGl0X3N0YXJ0KG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTXVzdCBiZSBjYWxsZWQgd2l0aG91dCBvdnNfbXV0ZXggaGVsZC4gIEBkYXRhIG11c3QgYmUgdGhlIG9wYXF1ZSBwb2ludGVyXG4mIzQzOyAqIHJldHVybmVkIGJ5IG92c19jdF9leGl0X3N0YXJ0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4mIzQzO1x0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XG4gI2VuZGlmXG4gXG4gXHRpZiAob3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbmluZGV4IDMxN2U1MjVjOGExMTMuLjIzNjNjZTU2ZDdlY2MgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuQEAgLTE0LDcgJiM0MzsxNCw4IEBAIGVudW0gb3ZzX2tleV9hdHRyO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xuJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpO1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpO1xuIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpO1xuIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKixcbkBAIC00MCw3ICYjNDM7NDEsOCBAQCB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yNzU4LDE1ICYjNDM7Mjc1OCwxNiBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCxcbiBcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIHtcbi1cdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhkbmV0LCBvdnNfbmV0X2lkKTtcbiBcdHN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0O1xuJiM0MztcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuJiM0MztcdHZvaWQgKmN0X2V4aXRfZGF0YTtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdExJU1RfSEVBRChoZWFkKTtcbiBcbiBcdG92c19sb2NrKCk7XG4gXG4tXHRvdnNfY3RfZXhpdChkbmV0KTtcbiYjNDM7XHRjdF9leGl0X2RhdGEgPSBvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgXHUwMDI2b3ZzX25ldC1cdTAwM2VkcHMsIGxpc3Rfbm9kZSlcbiBcdFx0X19kcF9kZXN0cm95KGRwKTtcbkBAIC0yNzg0LDYgJiM0MzsyNzg1LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiBcbiBcdG92c191bmxvY2soKTtcbiBcbiYjNDM7XHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgY3RfZXhpdF9kYXRhKTtcbiYjNDM7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2b3ZzX25ldC1cdTAwM2VtYXNrc19yZWJhbGFuY2UpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZvdnNfbmV0LVx1MDAzZWRwX25vdGlmeV93b3JrKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uMDZjNjk1NmZiMWRjNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE2NCw3ICYjNDM7MTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcbiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC5cbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXG4tICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy5cbiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuJiM0MzsgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4mIzQzOyAqIG5ldG5zIHRlYXJkb3duLlxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXG4gICovXG4gc3RydWN0IG92c19uZXQge1xuQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9zdGFydCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9maW5pc2gmIzM0OywKICAgICYjMzQ7b3ZzX2V4aXRfbmV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AgYW5kIHNwbGl0dGluZyB0aGUgbmV0bnMgZXhpdCByb3V0aW5lIHRvIGF2b2lkIGhvbGRpbmcgYG92c19tdXRleGAgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBjb25udHJhY2sgbGltaXQgY2hlY2tpbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mzg6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw1NCBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKJiM0MztzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJcmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhOwogCWludCBpOwogCiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsKIAluZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tJmd0O2RhdGEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CkBAIC0xNjY1LDEyICYjNDM7MTY4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTY3OSw2ICYjNDM7MTY5OCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNjk1LDYgJiM0MzsxNzE1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3MDksMTIgJiM0MzsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNzIzLDYgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE3MzAsNiAmIzQzOzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTc3Myw2ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksICZhbXA7em9uZV9saW1pdCk7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCkBAIC0xNzk2LDEyICYjNDM7MTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQkJJmFtcDt6b25lKSkpIHsKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewotCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7CiAKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJCW5ldCwgaW5mby0mZ3Q7ZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xODE2LDYgJiM0MzsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiAwOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpCkBAIC0xODI4LDE5ICYjNDM7MTg1MiwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHsKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby0mZ3Q7ZGF0YSwKIAkJCQljdF9saW1pdC0mZ3Q7em9uZSwgY3RfbGltaXQtJmd0O2xpbWl0LCByZXBseSk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKLWV4aXRfZXJyOgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NTAsNyAmIzQzOzE4NzEsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCwKQEAgLTE4NjMsOCAmIzQzOzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xODg0LDcgJiM0MzsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsCkBAIC0xODk3LDggJiM0MzsxOTE2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTkxOCw3ICYjNDM7MTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsCkBAIC0xOTMyLDE4ICYjNDM7MTk1MSwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQluZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sCiAJCQlyZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0gZWxzZSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLAogCQkJCQkJICAgICAgcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2VycjsKIAogCW5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTsKIAlnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7CkBAIC0yMDE2LDEyICYjNDM7MjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogI2VuZGlmCiB9CiAKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQomIzQzOy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyBSQ1UtcHJvdGVjdGVkIGN0X2xpbWl0X2luZm8KJiM0MzsgKiBhbmQgcmV0dXJucyBhbiBvcGFxdWUgaGFuZGxlIGZvciBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0ZWFyZG93bgomIzQzOyAqIGFmdGVyIHRoZSBtdXRleCBpcyByZWxlYXNlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOyNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQomIzQzOwlyZXR1cm4gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQobmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IG92c19tdXRleCBoZWxkLiAgQGRhdGEgbXVzdCBiZSB0aGUgb3BhcXVlIHBvaW50ZXIKJiM0MzsgKiByZXR1cm5lZCBieSBvdnNfY3RfZXhpdF9zdGFydCgpLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCW92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CW92c19jdF9saW1pdF9leGl0X2ZpbmlzaChuZXQsIGRhdGEpOwogI2VuZGlmCiAKIAlpZiAob3ZzX25ldC0mZ3Q7eHRfbGFiZWwpCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKaW5kZXggMzE3ZTUyNWM4YTExMy4uMjM2M2NlNTZkN2VjYyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaApAQCAtMTQsNyAmIzQzOzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTsKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTsKJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7CiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTsKIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKiwKQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpOwogCiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yNzU4LDE1ICYjNDM7Mjc1OCwxNiBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCwKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIHsKLQlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpOwogCXN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0OwomIzQzOwlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKJiM0MzsJdm9pZCAqY3RfZXhpdF9kYXRhOwogCXN0cnVjdCBuZXQgKm5ldDsKIAlMSVNUX0hFQUQoaGVhZCk7CiAKIAlvdnNfbG9jaygpOwogCi0Jb3ZzX2N0X2V4aXQoZG5ldCk7CiYjNDM7CWN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCAmYW1wO292c19uZXQtJmd0O2RwcywgbGlzdF9ub2RlKQogCQlfX2RwX2Rlc3Ryb3koZHApOwpAQCAtMjc4NCw2ICYjNDM7Mjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiAKIAlvdnNfdW5sb2NrKCk7CiAKJiM0MzsJb3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIGN0X2V4aXRfZGF0YSk7CiYjNDM7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7bWFza3NfcmViYWxhbmNlKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7ZHBfbm90aWZ5X3dvcmspOwogfQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAppbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaApAQCAtMTY0LDcgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuCiAgKi8KIHN0cnVjdCBvdnNfbmV0IHsKQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgT3BlbiB2U3dpdGNoIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF04oCZcyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGluIE9wZW4gdlN3aXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGNvbm50cmFjay5jYCwgYGNvbm50cmFjay5oYCwgYGRhdGFwYXRoLmNgLCBhbmQgYGRhdGFwYXRoLmhgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBvZiB0aGUgY2hhbmdlIGlzIGFyb3VuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgYGN0X2xpbWl0X2luZm9gLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgYW5kIHRoZXkmIzM5O3JlIHNwbGl0dGluZyB0aGUgZXhpdCBmdW5jdGlvbiB0byBhdm9pZCBibG9ja2luZyBvbiBgc3luY2hyb25pemVfcmN1KClgIHdoaWxlIGhvbGRpbmcgYG92c19tdXRleGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHNvIHRoaXMgcGF0Y2ggaXMgYWxyZWFkeSBkcmF3aW5nIG15IGF0dGVudGlvbi4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IFdlbGwsIE9wZW4gdlN3aXRjaCBpdHNlbGYgaXMgZGVmaW5pdGVseSByZWFjaGFibGUg4oCTIHRoYXQmIzM5O3MgYSBuby1icmFpbmVyLiBOb3csIGFyZSB0aGVzZSAqc3BlY2lmaWMqIG1vZGlmaWNhdGlvbnMgd29ydGggdGhlIGVmZm9ydD8gVGhleSBzZWVtIHRvIGJlIGZvY3VzZWQgb24gc2V0dGluZywgZ2V0dGluZywgYW5kIGRlbGV0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFuZCBjcnVjaWFsbHksIG5ldG5zIGV4aXQuIENvbm50cmFjayBsaW1pdGF0aW9ucyBhcmUgYSBrZXkgY29udHJvbCBwYXRoIGluIGFueSBkYXRhLXBsYW5lIGltcGxlbWVudGF0aW9uLCBhbmQgcHJvYmxlbXMgd2l0aCBuZXRucyBleGl0IGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBzdGF0ZSBjb3JydXB0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggbXkgdGltZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZXhwZWN0aW5nIGBDT05GSUdfT1BFTlZTV0lUQ0hgLCBvZiBjb3Vyc2UuIFRoZW4gYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGJlY2F1c2UgaXQmIzM5O3MgT1ZTIGNvbm50cmFjaywgdGhhdCBpbXBsaWVzIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhcyB3ZWxsLgoKVGltZSB0byBzZWFyY2ggZm9yIHRoZXNlIGNvbmZpZ3MuLi4gb2theSwgc28gYENPTkZJR19PUEVOVlNXSVRDSGAgaXMgdGhlcmUsIGFsb25nIHdpdGggYENPTkZJR19PUEVOVlNXSVRDSF9HRU5FVkVgLCBhbmQgc28gb24uIE5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGlzIGNvdWxkIGxlYWQgdG8gc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBSQ1UsIG11dGV4ZXMsIGFuZCBuZXRucyBleGl0IHdpdGhpbiB0aGUgY29ubnRyYWNrIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldHMgYW5kIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBmdW5jdGlvbnM6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSB0aGVzZSBhcyByaXBlIHRhcmdldHMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZWlyIG5hbWVzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPVlMgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIGV4cGVjdGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBsaW1pdCBtYW5hZ2VtZW50LCBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZXNlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnB1dCBzdHJ1Y3R1cmVzIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gZWFjaC4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZnV6emluZywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIHBhdGNoIG1lbnRpb25zIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgYWN0dWFsbHkgZW5hYmxlZCBpbiBteSB0ZXN0IGVudmlyb25tZW50LiBBbnkgZnV6emluZyBlZmZvcnQgd2lsbCBiZSB1c2VsZXNzIGlmIHRoZXNlIGFyZW4mIzM5O3QgcHJvcGVybHkgY29uZmlndXJlZC4gSSYjMzk7bGwgdmVyaWZ5IHRob3NlIHNldHRpbmdzIGZpcnN0LiBUaGF0JiMzOTtzIHRoZSBwcmlvcml0eSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTItXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25uZWN0aW9uIHRyYWNraW5nIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIE5ldGZpbHRlci4gSSBzZWUgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgZGVmaW5lZCBhcyB0cmlzdGF0ZXMuIFRoaXMgc3VnZ2VzdHMgdGhleSBjYW4gYmUgY29tcGlsZWQgYXMgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBkaXNhYmxlZCBlbnRpcmVseS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzLCBsaWtlIGBvdnNfY3RfbGltaXRfY21kX3NldGAgYW5kIG90aGVycyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgdXNpbmcgYW5kIHBvdGVudGlhbGx5IGxpbWl0aW5nIGNvbm5lY3Rpb24gY291bnRzIGFuZCB0aGUgcmVsYXRlZCBpbXBsZW1lbnRhdGlvbiBkZWNpc2lvbnMsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQzPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjctXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2ODpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2OS17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTgyLVx0XHRcdFx0XHQgICAgICAgKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTgzOlx0XHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgRnVuY3Rpb25zIGZvciBTeW1ib2wgTGlzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVzIHRvIGxpc3QgYXMgZm9jdXMgc3ltYm9scy4gVGhlIHByb21wdCBpcyBkaXJlY3RpbmcgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHRoaW5nIGlzLCB3aGlsZSBmdW5jdGlvbnMgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGFyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgdmlhIGBnZW5sX3NtYWxsX29wc2AsIGFuZCB0aGVpciBhZGRyZXNzZXMgKmFyZSogdGFrZW4sIHNvIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGdyZXkgYXJlYSB3aGV0aGVyIHRvIGxpc3Qgc29tZXRoaW5nIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCBvciBmb2N1cyBvbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBlbnRyeSBwb2ludCBpbnN0ZWFkLCBnaXZlbiB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHdoaWNoIGZ1bmN0aW9ucyB0byBsaXN0LiBMZXQmIzM5O3Mgc2VlLi4uIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIGFyZSBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGluIHRoZSBydW5uaW5nLiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgaG93ZXZlciwgaXMgc3RhdGljLCBzbyB3ZSBjYW4gcHJvYmFibHkgZGlzY291bnQgdGhhdCBvbmUuIGBvdnNfY3RfaW5pdGAgaXMgYWxzbyBub24tc3RhdGljLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgZXhwb3J0ZWQuIE5vcGUsIGl0JiMzOTtzIHN0YXRpYy4gSG1tLi4uIGNhbiB3ZSB1c2UgYSBub24tc3RhdGljIGZ1bmN0aW9uPyBBaCEgYG92c19jdF9leGVjdXRlYCBpcyBub24tc3RhdGljIGFzIHdlbGwuCgpTbyB3ZSBoYXZlIGBvdnNfY3RfZXhpdF9zdGFydGAsIGBvdnNfY3RfZXhpdF9maW5pc2hgLCBhbmQgYG92c19jdF9leGVjdXRlYCBhcyBub24tc3RhdGljIGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBmaWxlIGFnYWluIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgb3ZzX2N0XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjgzPXZvaWQgb3ZzX2N0X2ZpbGxfa2V5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTI4OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyOTA6aW50IG92c19jdF9wdXRfa2V5KGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqc3drZXksXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjkxLVx0XHQgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKm91dHB1dCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQyLVx0XHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA3OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDgwOmludCBvdnNfY3RfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA4MS17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTEzNjU9Ym9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTM4NC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMzg1OmludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEzODYtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTQ1Mj1zdGF0aWMgYm9vbCBvdnNfY3RfbmF0X3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTUxOC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTE5OmludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTIwLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAwMz1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDE5LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMjA6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0bGluayBDYWxsYmFja3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGdlbmVyaWMgbmV0bGluayBjYWxsYmFja3MuIFRoZXkmIzM5O3JlIHN0YXRpYywgd2hpY2ggaXMgc3RhbmRhcmQgZW5vdWdoLCBidXQgdGhleSYjMzk7cmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseWAgbmV0bGluayBmYW1pbHkuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgaW5jbHVkZWQgdGhlIGNvcnJlY3QgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhbmQgYG92c19jdF9leGl0X3N0YXJ0YCwgYG92c19jdF9leGl0X2ZpbmlzaGAuCgpIYW5nIG9uIGEgc2Vjb25kLCB0aGUgZ3VpZGFuY2UgaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXJzLiBCdXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCAqaXNuJiMzOTt0KiBhbiBpbnRlcm5hbCBoZWxwZXI7IGl0JiMzOTtzIGEgZGlyZWN0IG5ldGxpbmsgY2FsbGJhY2suIFNvLCBpbmNsdWRpbmcgaXQgaXMgcGVyZmVjdGx5IGFjY2VwdGFibGUsIGV2ZW4gcHJlZmVycmVkIGluIHRoaXMgY29udGV4dC4gRXhjZWxsZW50LCB0aGF0IGNsYXJpZmllcyB0aGluZ3MuCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgYG92c19jdF9jaGVja19saW1pdGAuIEkgcmVtZW1iZXIgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG92c19jdF9jb21taXRgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHJvY2Vzcy4gTWFraW5nIHN1cmUgdGhvc2UgYXJlIGFsaWduZWQgaXMgYSBrZXkgcGFydCBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzAtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05ODAtXHRcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk4MTpcdFx0XHRlcnIgPSBvdnNfY3RfY2hlY2tfbGltaXQobmV0LCBza2IsIGluZm8pO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cdFx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYG92c19jdF9jb21taXRgIGFuZCBgb3ZzX2N0X2V4ZWN1dGVgKioKCk9rYXksIHNvIEkgc2VlIGBvdnNfY3RfY29tbWl0YCBpcyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2V4ZWN1dGVgLiBUaGF0IG1ha2VzIGBvdnNfY3RfZXhlY3V0ZWAgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tbWl0bWVudCBwcm9jZXNzIGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGl0cyBmdW5jdGlvbmFsaXR5IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCkFuZCBhcyBhIGZvbGxvdyB1cCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGV4aXQgY2FsbHMgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBob3cgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgZml0IGludG8gdGhlIHBpY3R1cmUuIEFoLCB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgb3ZzX2V4aXRfbmV0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGF0IGdpdmVzIG1lIGFub3RoZXIgYXJlYSB0byBleHBsb3JlIHJlbGF0ZWQgdG8gaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgZmxvd3MgYXJlIGhhbmRsZWQgd2hlbiB0aGV5IGV4aXQgdGhlIG5ldGZpbHRlciBob29rcy4gSSBleHBlY3QgYG92c19leGl0X25ldGAgbGlrZWx5IGhhbmRsZXMgdGhlIGZpbmFsIHN0ZXBzIG9yIGNsZWFudXAgYWZ0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2V4aXRfbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjczNj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzU4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjc1OTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc2MC17XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9Mjc5ND1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG92c19uZXRfb3BzID0ge1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc5NS1cdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjc5NjpcdC5leGl0ID0gb3ZzX2V4aXRfbmV0LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc5Ny1cdC5pZCAgID0gXHUwMDI2b3ZzX25ldF9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBPVlMvTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBvdnNfZXhpdF9uZXRgLCB0aGF0JiMzOTtzIHRoZSBuZXRucyBleGl0IGNhbGxiYWNrLCByaWdodD8gR290IGl0LiBOb3csIHRpbWUgdG8gbWFrZSBzdXJlIHRoaXMgd2hvbGUgc2V0dXAgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoZSBtYWluIGNvbmZpZ3MgSSBuZWVkIGVuYWJsZWQgYXJlIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBJJiMzOTt2ZSB1c2VkIHRoZXNlIGJlZm9yZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEp1c3QgYSBxdWljayBzY2FuIGZvciBhbnkgaGlkZGVuIHJlcXVpcmVtZW50cyBiZWZvcmUgSSBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQga2VybmVsIGludGVybmFsczoKCioqQ29uZGl0aW9uYWwgRGVwZW5kZW5jeSBDb25jZXJucyoqCgpBbHJpZ2h0LCB0aGlzIGNvZGUgYmxvY2sgaXMgbmVzdGVkIHdpdGhpbiBhbiBgaWYgTkZfQ09OTlRSQUNLYCBjb25kaXRpb25hbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgc28gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eSBpcyBjbGVhcmx5IGEgcHJlcmVxdWlzaXRlIGhlcmUuJiMzNDsgVGhpcyBtZWFucyB0aGUgYE5GX0NPTk5UUkFDS2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uICptdXN0KiBiZSBlbmFibGVkIGZvciB0aGlzIHNlY3Rpb24gb2YgY29kZSB0byBldmVuIGJlIHJlbGV2YW50LiBOb3csIHRoYXQgcmFpc2VzIGEgZnVydGhlciBxdWVzdGlvbi4gTXkgdGhvdWdodHMgaW1tZWRpYXRlbHkgdHVybiB0byBob3cgdGhpcyB3b3VsZCB3b3JrIGluIGNvbmNlcnQgd2l0aCBgT1BFTlZTV0lUQ0hgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgTGFuZHNjYXBlOiBPUEVOVlNXSVRDSCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgT1BFTlZTV0lUQ0hgLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkga25vdyB0aGlzIGlzIGxpa2VseSBnb2luZyB0byBpbnZvbHZlIGEgY29tcGxleCB3ZWIgb2YgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcywgYW5kIHBvc3NpYmx5IG90aGVyIHNvZnR3YXJlIHBhY2thZ2VzLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHN5c3RlbWF0aWNhbGx5IGludmVzdGlnYXRlIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIHJpZ291ciByZXF1aXJlZCBieSB0aGlzIGxldmVsIG9mIGFuYWx5c2lzLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02PWNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xubmV0L29wZW52c3dpdGNoL0tjb25maWc6ODpcdGRlcGVuZHMgb24gSU5FVFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6OTpcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctMTAtXHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMi1cdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjEzOlx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xNC1cdHNlbGVjdCBNUExTXG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc9NDQ9Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NjpcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBORVRfSVBHUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ4LVx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTU3PWNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU5Olx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NjA6XHRkZXBlbmRzIG9uIFZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02MS1cdGRlZmF1bHQgT1BFTlZTV0lUQ0hcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02OT1jb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjcxOlx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIEdFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzMtXHRkZWZhdWx0IE9QRU5WU1dJVENIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODgwCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIExpbWl0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBwcmV0dHkgbmFzdHkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGluIE9wZW4gdlN3aXRjaCYjMzk7cyBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIEl0JiMzOTtzIGNsZWFyIHRoYXQgT3BlbiB2U3dpdGNoIHJlbGllcyBvbiBgSU5FVGAsIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYE9QRU5WU1dJVENIYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYE5GX0NPTk5UUkFDS2AgYXJlIGFsbCByZWxldmFudCBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfZXhpdF9zdGFydGAsIGBvdnNfY3RfZXhpdF9maW5pc2hgLCBhbmQgYG92c19leGl0X25ldGAuCgpUaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUgYG92c19jdF9saW1pdF9leGl0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgcHJvYmxlbTogaXQgd2FzIGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCAqd2hpbGUqIGhvbGRpbmcgYG92c19tdXRleGAuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayByZWNpcGUgZm9yIGRlYWRsb2NrcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHNpZ25pZmljYW50IGRlbGF5cy4gVGhlIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IHRoZXkmIzM5O3ZlIHNwbGl0IHRoZSBleGl0IHNlcXVlbmNlIGludG8gdHdvIGZ1bmN0aW9ucywgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAsIHdoaWNoIGlzIGEgZ29vZCBhcmNoaXRlY3R1cmFsIGNob2ljZS4KCkZ1cnRoZXJtb3JlLCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGN0X2xpbWl0X2luZm9gIGlzIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSBmcm9tIG11bHRpcGxlIGNvbnRleHRzIGFuZCB0aGF0IHRoZXkgYXJlIHRyeWluZyB0byBmaXggYSByYWNlIGNvbmRpdGlvbi4gSXQgaXMgYSBnb29kIG1vdmUgdG8gZW5zdXJlIHRoZSBkYXRhIGlzIHNhZmUsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIGNoZWNraW5nIHRoZSBsaW1pdHMgd2l0aCBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4KCkZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBtb2RpZmllcyBob3cgT3BlbiB2U3dpdGNoIGhhbmRsZXMgY29ubnRyYWNrIGxpbWl0cywgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIChzZXR0aW5nLCBnZXR0aW5nLCBkZWxldGluZyBsaW1pdHMpLCBwYWNrZXQgcHJvY2Vzc2luZyB2aWEgY29ubnRyYWNrLCBhbmQgdGhlIGNydWNpYWwgbmV0bnMgdGVhcmRvd24gcHJvY2Vzcy4gVGhpcyBpcyBhYnNvbHV0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHZhcmlldHkgb2YgcmVhbC13b3JsZCBzY2VuYXJpb3MsIHNvIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZS4gVGhlcmVmb3JlIEkgYW0gY29uY2x1ZGluZywgdGhpcyBwYXRjaCBpcyAqKldvcnRoRnV6emluZyoqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9zdGFydCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9maW5pc2gmIzM0OywKICAgICYjMzQ7b3ZzX2V4aXRfbmV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AgYW5kIHNwbGl0dGluZyB0aGUgbmV0bnMgZXhpdCByb3V0aW5lIHRvIGF2b2lkIGhvbGRpbmcgYG92c19tdXRleGAgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBjb25udHJhY2sgbGltaXQgY2hlY2tpbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfc3RhcnQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfZmluaXNoJiMzNDssCiAgICAmIzM0O292c19leGl0X25ldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGhhbmRsaW5nLCBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gIGFuZCBzcGxpdHRpbmcgdGhlIG5ldG5zIGV4aXQgcm91dGluZSB0byBhdm9pZCBob2xkaW5nIGBvdnNfbXV0ZXhgIGR1cmluZyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgY29ubnRyYWNrIGxpbWl0IGNoZWNraW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mzg6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw1NCBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKJiM0MztzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJcmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhOwogCWludCBpOwogCiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsKIAluZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tJmd0O2RhdGEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CkBAIC0xNjY1LDEyICYjNDM7MTY4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTY3OSw2ICYjNDM7MTY5OCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNjk1LDYgJiM0MzsxNzE1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3MDksMTIgJiM0MzsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNzIzLDYgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE3MzAsNiAmIzQzOzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTc3Myw2ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksICZhbXA7em9uZV9saW1pdCk7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCkBAIC0xNzk2LDEyICYjNDM7MTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQkJJmFtcDt6b25lKSkpIHsKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewotCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7CiAKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJCW5ldCwgaW5mby0mZ3Q7ZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xODE2LDYgJiM0MzsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiAwOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpCkBAIC0xODI4LDE5ICYjNDM7MTg1MiwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHsKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby0mZ3Q7ZGF0YSwKIAkJCQljdF9saW1pdC0mZ3Q7em9uZSwgY3RfbGltaXQtJmd0O2xpbWl0LCByZXBseSk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKLWV4aXRfZXJyOgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NTAsNyAmIzQzOzE4NzEsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCwKQEAgLTE4NjMsOCAmIzQzOzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xODg0LDcgJiM0MzsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsCkBAIC0xODk3LDggJiM0MzsxOTE2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTkxOCw3ICYjNDM7MTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsCkBAIC0xOTMyLDE4ICYjNDM7MTk1MSwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQluZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sCiAJCQlyZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0gZWxzZSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLAogCQkJCQkJICAgICAgcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2VycjsKIAogCW5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTsKIAlnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7CkBAIC0yMDE2LDEyICYjNDM7MjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogI2VuZGlmCiB9CiAKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQomIzQzOy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyBSQ1UtcHJvdGVjdGVkIGN0X2xpbWl0X2luZm8KJiM0MzsgKiBhbmQgcmV0dXJucyBhbiBvcGFxdWUgaGFuZGxlIGZvciBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0ZWFyZG93bgomIzQzOyAqIGFmdGVyIHRoZSBtdXRleCBpcyByZWxlYXNlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOyNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQomIzQzOwlyZXR1cm4gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQobmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IG92c19tdXRleCBoZWxkLiAgQGRhdGEgbXVzdCBiZSB0aGUgb3BhcXVlIHBvaW50ZXIKJiM0MzsgKiByZXR1cm5lZCBieSBvdnNfY3RfZXhpdF9zdGFydCgpLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCW92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CW92c19jdF9saW1pdF9leGl0X2ZpbmlzaChuZXQsIGRhdGEpOwogI2VuZGlmCiAKIAlpZiAob3ZzX25ldC0mZ3Q7eHRfbGFiZWwpCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKaW5kZXggMzE3ZTUyNWM4YTExMy4uMjM2M2NlNTZkN2VjYyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaApAQCAtMTQsNyAmIzQzOzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTsKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTsKJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7CiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTsKIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKiwKQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpOwogCiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yNzU4LDE1ICYjNDM7Mjc1OCwxNiBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCwKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIHsKLQlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpOwogCXN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0OwomIzQzOwlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKJiM0MzsJdm9pZCAqY3RfZXhpdF9kYXRhOwogCXN0cnVjdCBuZXQgKm5ldDsKIAlMSVNUX0hFQUQoaGVhZCk7CiAKIAlvdnNfbG9jaygpOwogCi0Jb3ZzX2N0X2V4aXQoZG5ldCk7CiYjNDM7CWN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCAmYW1wO292c19uZXQtJmd0O2RwcywgbGlzdF9ub2RlKQogCQlfX2RwX2Rlc3Ryb3koZHApOwpAQCAtMjc4NCw2ICYjNDM7Mjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiAKIAlvdnNfdW5sb2NrKCk7CiAKJiM0MzsJb3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIGN0X2V4aXRfZGF0YSk7CiYjNDM7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7bWFza3NfcmViYWxhbmNlKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7ZHBfbm90aWZ5X3dvcmspOwogfQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAppbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaApAQCAtMTY0LDcgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuCiAgKi8KIHN0cnVjdCBvdnNfbmV0IHsKQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbmVlZHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBubyBxdWVzdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvbm50cmFjayBjb2RlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL2AuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGBjb25udHJhY2suY2AsIGBjb25udHJhY2suaGAsIGBkYXRhcGF0aC5jYCwgYW5kIGBkYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gLiBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgYSBsb3Qgb2YgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCB0aGUgT3BlbiB2U3dpdGNoIHNwZWNpZmljIGBvdnNsX2RlcmVmZXJlbmNlYCBhbmQgc3BsaXR0aW5nIGBvdnNfY3RfZXhpdGAgaW50byBhIHN0YXJ0IGFuZCBmaW5pc2ggc3RhZ2UgdG8gZW5zdXJlIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIHVzaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aG91dCBob2xkaW5nIGBvdnNfbXV0ZXhgLCB3aGljaCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGlzIHNlc3Npb24gaXMgZGVzaWduZWQgdG8gdGVhc2Ugb3V0LgoKTGV0IG1lIGJyZWFrIGRvd24gdGhlc2Ugc3BlY2lmaWMgYWNjZXNzIHBhdHRlcm5zIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgdG8gc2VlIHdoZXJlIHRoZSByaXNrIGlzOgoKKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgIGlzIG5vdyB1c2luZyBgcmN1X2RlcmVmZXJlbmNlYCB0byBhY2Nlc3MgYGN0X2xpbWl0X2luZm9gLgoqICAgYG92c19jdF9saW1pdF9pbml0YCBpcyBhbGxvY2F0aW5nIGBpbmZvYCB1c2luZyBga21hbGxvY19vYmpgLCBpbml0aWFsaXppbmcgaXQsIGFuZCB0aGVuIGFzc2lnbmluZyBpdCB0byBgb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mb2AgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgYGttYWxsb2Nfb2JqYCBleHBhbmRzIHRvLCBhcyB1c2luZyBhbiB1bmtub3duIHZhcmlhbnQgb2YgYGttYWxsb2NgIGlzIGEgc3Ryb25nIGluZGljYXRvciBvZiBhbiBpc3N1ZS4gYGttYWxsb2Nfb2JqYCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpYC4gT2theSwgc28gYGttYWxsb2NgIGRvZXNuJiMzOTt0IHplcm8gbWVtb3J5IHdoaWNoIGNvdWxkIG1lYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYW4gaXNzdWUuCiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnRgIHVzZXMgYHJjdV9yZXBsYWNlX3BvaW50ZXJgIHRvIHNldCBgb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mb2AgdG8gYE5VTExgIGFuZCByZXR1cm5zIHRoZSBvbGQgcG9pbnRlci4KKiAgIGBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2hgIGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIHRoZW4gZnJlZXMgdGhlIGBpbmZvYCwgd2hpY2ggaXMgc3RhbmRhcmQgUkNVIHByYWN0aWNlLgoqICAgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIG5vdyB1c2UgYG92c2xfZGVyZWZlcmVuY2VgIHRvIGdldCBgaW5mb2AgdW5kZXIgYG92c19sb2NrKClgLgoqICAgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCBub3cgYXNzdW1lIHRoZSBjYWxsZXIgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNhbGxzIGFyZSB3cmFwcGVkIGluIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGluIGBvdnNfY3RfbGltaXRfY21kX2dldGAuCgpSZWdhcmRpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBgaW5mb2AgaXMgcG9wdWxhdGVkIGluIGBvdnNfY3RfbGltaXRfaW5pdGAuIFRoZSBjcnVjaWFsIGxpbmUgaXMgYGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7YC4gSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBga21hbGxvY19vYmpgIGlzIGxpa2VseSB0byBleHBhbmQgdG8gYGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTClgLiBMb29raW5nIGF0IHRoZSBzdHJ1Y3QsIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLCBoYXMgYGRlZmF1bHRfbGltaXRgLCBgbGltaXRzYCAoYSBwb2ludGVyKSwgYW5kIGBkYXRhYCAoYW5vdGhlciBwb2ludGVyKS4gSW4gdGhlIGBvdnNfY3RfbGltaXRfaW5pdGAgZnVuY3Rpb24sIGBkZWZhdWx0X2xpbWl0YCBpcyBpbml0aWFsaXplZCB0byBgT1ZTX0NUX0xJTUlUX0RFRkFVTFRgLiBgbGltaXRzYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpzYCAod2hpY2ggZXhwYW5kcyB0byBga21hbGxvY2ApLCB0aGVuIGl0cyBlbGVtZW50cyBhcmUgaW5pdGlhbGl6ZWQuIGBkYXRhYCBpcyBpbml0aWFsaXplZCB3aXRoIGBuZl9jb25uY291bnRfaW5pdGAuIEl0IHNlZW1zIGxpa2UgYWxsIGZpZWxkcyBpbiBgaW5mb2AgKmFyZSogaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgdXNlIG9mIHRoZSBwb2ludGVyIGhlcmUgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc3RydWN0IGRlZmluaXRpb24sIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZmllbGRzIHRoYXQgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIG1lcml0cyB0aGUgS01TQU4gc2Vzc2lvbiB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NS1cdHUzMiBkZWZhdWx0X2xpbWl0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzgwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBEZXB0aHMgb2YgYG92c19jdF9saW1pdF9pbmZvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gQmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMgb3Igc3RhcnQgc2tldGNoaW5nIG91dCBzb2x1dGlvbnMsIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSAqYWN0dWFsKiBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLiYjMzQ7IE5vIGd1ZXNzd29yaywgbm8gcmVseWluZyBvbiBtZW1vcnkgKGhvd2V2ZXIgZ29vZCBpdCBtYXkgYmUhKSwgSSB3YW50IHRoZSBkZWZpbml0aXZlIHNvdXJjZS4gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUsIHVuYWR1bHRlcmF0ZWQgc3RydWN0dXJlLiBXaGF0IGZpZWxkcyBhcmUgdGhlcmU/IFdoYXQgZGF0YXR5cGVzIGFyZSB1c2VkPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpdHNlbGY/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBhbnkgZnVydGhlciB3b3JrIHdpbGwgYmUgYnVpbHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgYW5kIGFjY3VyYXRlIHBpY3R1cmUgb2YgaXRzIGNvbXBvc2l0aW9uIGJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgaG93IGl0IGZ1bmN0aW9ucyBvciBob3cgSSBtaWdodCBsZXZlcmFnZSBpdC4gTmVlZCB0byBrbm93IHRoZSBjb21wbGV0ZSBzdHJ1Y3R1cmUgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG92c19jdF9saW1pdF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NS1cdHUzMiBkZWZhdWx0X2xpbWl0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04NzI9c3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpjdF9saW1pdF9oYXNoX2J1Y2tldChcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4NzM6XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3NC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3OC0vKiBDYWxsIHdpdGggb3ZzX211dGV4ICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6ODc5OnN0YXRpYyB2b2lkIGN0X2xpbWl0X3NldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODgwLVx0XHRcdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0ICpuZXdfY3RfbGltaXQpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg5OS0vKiBDYWxsIHdpdGggb3ZzX211dGV4ICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTAwOnN0YXRpYyB2b2lkIGN0X2xpbWl0X2RlbChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkwMS17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkxNi0vKiBDYWxsIHdpdGggUkNVIHJlYWQgbG9jayAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjkxNzpzdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkxOC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkzMT1zdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzNS1cdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzY6XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTM3LVx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTU5MD1zdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU5MS17XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTU5MjpcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTkzLVx0aW50IGksIGVycjtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTYyOT1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2MzAte1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2MzE6XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2MzItXHRpbnQgaTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTY4Nj1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTY4OS1cdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNjkwOlx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2OTEtXHR1MTYgem9uZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTczMz1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTczNi1cdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzM3Olx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE3MzgtXHR1MTYgem9uZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3MC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzcxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpyZXBseSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTgwMT1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTgwMi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODAzOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODA0LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTg0Mz1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4NDQ6XHRcdFx0XHRcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODQ1LVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5MzI9c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTM5LVx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5NDA6XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk0MS1cdGludCBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIE9wZW4gdlN3aXRjaCYjMzk7cyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGRlZmluaXRpb24uIEl0JiMzOTtzIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLCBuYXR1cmFsbHksIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3QgaXMgY3J1Y2lhbDsgaXQmIzM5O3MgdGhlIGJsdWVwcmludCBmb3IgaG93IE9WUyB0cmFja3MgYW5kIHBvdGVudGlhbGx5IGVuZm9yY2VzIGxpbWl0YXRpb25zIG9uIGl0cyBjb25udHJhY2sgdGFibGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaW5mb3JtYXRpb24gdGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzPyBXaGF0IHBhcmFtZXRlcnMgZG9lcyBpdCBleHBvc2U/IFdoYXQgdGhyZXNob2xkcyBvciBjb25maWd1cmF0aW9ucyBtaWdodCBpdCBkZWZpbmUgZm9yIG1hbmFnaW5nIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgb3Igc3RhdGVzPyBMZXQmIzM5O3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IHByb3ZpZGVzIGludG8gT1ZTJiMzOTtzIGNvbm50cmFjayBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg2Olx0c3RydWN0IG92c19jdF9saW1pdCB7XG4gIDg3Olx0XHQvKiBFbGVtZW50cyBpbiBvdnNfY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgaGFzaCB0YWJsZSAqL1xuICA4ODpcdFx0c3RydWN0IGhsaXN0X25vZGUgaGxpc3Rfbm9kZTtcbiAgODk6XHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gIDkwOlx0XHR1MTYgem9uZTtcbiAgOTE6XHRcdHUzMiBsaW1pdDtcbiAgOTI6XHR9O1xuICA5MzpcdFxuICA5NDpcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyB7XG4gIDk1Olx0XHR1MzIgZGVmYXVsdF9saW1pdDtcbiAgOTY6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpsaW1pdHM7XG4gIDk3Olx0XHRzdHJ1Y3QgbmZfY29ubmNvdW50X2RhdGEgKmRhdGE7XG4gIDk4Olx0fTtcbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RfbGltaXRfcG9saWN5W09WU19DVF9MSU1JVF9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbiAxMDE6XHRcdFtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVELCB9LFxuIDEwMjpcdH07XG4gMTAzOlx0I2VuZGlmXG4gMTA0Olx0XG4gMTA1Olx0c3RhdGljIGJvb2wgbGFiZWxzX25vbnplcm8oY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBMaW1pdCBTZXR1cCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuCgpGaXJzdCwgSSBsb29rZWQgYXQgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBkZWZhdWx0X2xpbWl0YCAoYSBgdTMyYCksIGEgaGFzaCBsaXN0IChgbGltaXRzYCksIGFuZCBzb21lIGNvbm5lY3Rpb24gY291bnQgZGF0YSAoYGRhdGFgKS4gVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBzZWVtcyBjbGVhbi4gSXQgYWxsb2NhdGVzIHRoZSBgb3ZzX2N0X2xpbWl0X2luZm9gIHN0cnVjdHVyZSwgc2V0cyB0aGUgYGRlZmF1bHRfbGltaXRgIHRvIGEgZGVmYXVsdCB2YWx1ZSwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgYGxpbWl0c2AgaGFzaCBsaXN0LCBhbmQgdGhlbiBpbml0aWFsaXplcyB0aGUgY29ubmVjdGlvbiBjb3VudCBkYXRhLiBBbGwgZmllbGRzIHNlZW0gZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gbm8gb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuCgpOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIGZ1bmN0aW9uIGlzIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgc2V0dGluZyBsaW1pdHMgZm9yIHNwZWNpZmljIHpvbmVzLiBUaGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgIGVudHJpZXMuIElmIHRoZSB6b25lIElEIGlzIHRoZSBkZWZhdWx0LCBpdCB1cGRhdGVzIGBpbmZvLSZndDtkZWZhdWx0X2xpbWl0YC4gSWYgaXQmIzM5O3MgYSBzcGVjaWZpYyB6b25lLCB3ZSBhbGxvY2F0ZSBhIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0YCB1c2luZyBga21hbGxvY2AuCgpIZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBiaXQ6IFdpdGhpbiB0aGUgc3BlY2lmaWMgem9uZSBoYW5kbGluZywgYGN0X2xpbWl0LSZndDt6b25lYCBhbmQgYGN0X2xpbWl0LSZndDtsaW1pdGAgYXJlIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGFib3V0IGBjdF9saW1pdC0mZ3Q7aGxpc3Rfbm9kZWAgYW5kIGBjdF9saW1pdC0mZ3Q7cmN1YC4gVGhlc2UgYXJlIG1lbWJlcnMgb2YgdGhlIGBjdF9saW1pdGAgc3RydWN0LCBhbmQgdGhleSBkb24mIzM5O3Qgc2VlbSB0byBiZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIGBjdF9saW1pdF9zZXRgIGlzIGNhbGxlZC4gSXQmIzM5O3MgbGlrZWx5IGBjdF9saW1pdF9zZXRgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlbSwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgaXMgd2hlcmUgYSBwb3RlbnRpYWwgbWVtb3J5IGV4cG9zdXJlIG1pZ2h0IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODc4Olx0LyogQ2FsbCB3aXRoIG92c19tdXRleCAqL1xuIDg3OTpcdHN0YXRpYyB2b2lkIGN0X2xpbWl0X3NldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gODgwOlx0XHRcdFx0IHN0cnVjdCBvdnNfY3RfbGltaXQgKm5ld19jdF9saW1pdClcbiA4ODE6XHR7XG4gODgyOlx0XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0ICpjdF9saW1pdDtcbiA4ODM6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xuIDg4NDpcdFxuIDg4NTpcdFx0aGVhZCA9IGN0X2xpbWl0X2hhc2hfYnVja2V0KGluZm8sIG5ld19jdF9saW1pdC1cdTAwM2V6b25lKTtcbiA4ODY6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSxcbiA4ODc6XHRcdFx0XHRcdCBsb2NrZGVwX292c2xfaXNfaGVsZCgpKSB7XG4gODg4Olx0XHRcdGlmIChjdF9saW1pdC1cdTAwM2V6b25lID09IG5ld19jdF9saW1pdC1cdTAwM2V6b25lKSB7XG4gODg5Olx0XHRcdFx0aGxpc3RfcmVwbGFjZV9yY3UoXHUwMDI2Y3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZSxcbiA4OTA6XHRcdFx0XHRcdFx0ICBcdTAwMjZuZXdfY3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZSk7XG4gODkxOlx0XHRcdFx0a2ZyZWVfcmN1KGN0X2xpbWl0LCByY3UpO1xuIDg5MjpcdFx0XHRcdHJldHVybjtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0fVxuIDg5NTpcdFxuIDg5NjpcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNm5ld19jdF9saW1pdC1cdTAwM2VobGlzdF9ub2RlLCBoZWFkKTtcbiA4OTc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSQ1UgUGF0Y2ggZm9yIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgaGxpc3RfcmVwbGFjZV9yY3VgIGFuZCBgaGxpc3RfYWRkX2hlYWRfcmN1YCBhcmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBgbmV3X2N0X2xpbWl0LSZndDtobGlzdF9ub2RlYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBgcmN1YCBmaWVsZCBoZXJlIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB3ZSYjMzk7cmUgZnJlZWluZyB0aGUgbWVtb3J5IHVzaW5nIGBrZnJlZV9yY3VgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZSBgY3RfbGltaXRgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBSQ1UgcHJvdGVjdGlvbiBmb3IgYG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm9gLCBhbmQgdGhpcyByaW5ncyBhIGJlbGwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gc29sdmUgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiB3aGVuIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBiZWluZyB0b3JuIGRvd24uIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBhICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyBmaXgsIHNvIGl0IHNlZW1zIGxpa2UgdGhpcyB3YXMgZm91bmQgYnkgYSBmdXp6ZXIsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGRvbiYjMzk7dCBoYXZlIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSwgYnV0IHRoZSBpbnRlbnRpb24gaXMgY2xlYXI6IHByb3RlY3QgYGN0X2xpbWl0X2luZm9gIHdpdGggUkNVLgoKQmVmb3JlIHRoZSBwYXRjaCwgYG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm9gIHdhcyBhY2Nlc3NlZCBkaXJlY3RseS4gRHVyaW5nIGBvdnNfZXhpdF9uZXRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBvdnNfY3RfZXhpdGAsIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYCB3YXMgZnJlZWQuIEhvd2V2ZXIsIHRoZXJlIHdlcmUgY29uY3VycmVudCByZWFkZXJzLCBsaWtlIGBvdnNfY3RfY2hlY2tfbGltaXRgIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCB3aGljaCBjb3VsZCBhY2Nlc3MgdGhlIG5vdy1mcmVlZCBtZW1vcnksIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBtaXRpZ2F0ZXMgdGhhdCByaXNrIGJ5IHVzaW5nIFJDVSBtZWNoYW5pc21zLgoKTm93LCBhIGtleSBjb25jZXJuOiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcz8gQWZ0ZXIgYSBxdWljayBsb29rLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBvdnNfY3RfbGltaXRfY21kX2dldGAgdG8gaG9sZCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgdXNlIGByY3VfZGVyZWZlcmVuY2UoKWAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4gVGhlIGRhdGEgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgaXMgYHpvbmVfbGltaXRgLCB3aGljaCwgZnJvbSB3aGF0IEkga25vdywgY29tZXMgZnJvbSBgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NzU6XHRcdFx0LnpvbmVfaWQgPSBPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUsXG4xNzc2Olx0XHRcdC5saW1pdCAgID0gaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0LFxuMTc3NzpcdFx0fTtcbjE3Nzg6XHRcbjE3Nzk6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc4MDpcdH1cbjE3ODE6XHRcbjE3ODI6XHRzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbjE3ODM6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqZGF0YSxcbjE3ODQ6XHRcdFx0XHRcdFx0IHUxNiB6b25lX2lkLCB1MzIgbGltaXQsXG4xNzg1Olx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG4xNzg2Olx0e1xuMTc4NzpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIGN0X3pvbmU7XG4xNzg4Olx0XHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtcbjE3ODk6XHRcdHUzMiBjb25uY291bnRfa2V5ID0gem9uZV9pZDtcbjE3OTA6XHRcbjE3OTE6XHRcdHpvbmVfbGltaXQuem9uZV9pZCA9IHpvbmVfaWQ7XG4xNzkyOlx0XHR6b25lX2xpbWl0LmxpbWl0ID0gbGltaXQ7XG4xNzkzOlx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgem9uZV9pZCwgTkZfQ1RfREVGQVVMVF9aT05FX0RJUiwgMCk7XG4xNzk0Olx0XG4xNzk1Olx0XHR6b25lX2xpbWl0LmNvdW50ID0gbmZfY29ubmNvdW50X2NvdW50X3NrYihuZXQsIE5VTEwsIDAsIGRhdGEsXG4xNzk2Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjb25uY291bnRfa2V5KTtcbjE3OTc6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc5ODpcdH1cbjE3OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWm9uZSBMaW1pdCBTdHJ1Y3QqKgoKT2theSwgc28gYHpvbmVfbGltaXRgIGlzIGRlZmluZWQgYXMgYSBgc3RydWN0IG92c196b25lX2xpbWl0YC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB2ZXJpZnkgaXRzIGRlZmluaXRpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgbWVudGFsIGNoZWNrbGlzdCBvZiB3aGF0IEkgZXhwZWN0IHRvIGZpbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlOiBsaWtlbHkgbGltaXRzIG9uIHRoaW5ncyBsaWtlIFZMQU4gSURzLCB0dW5uZWxpbmcgcHJvdG9jb2xzLCBvciBvdGhlciB6b25lLXNwZWNpZmljIHBhcmFtZXRlcnMgcmVsZXZhbnQgdG8gdGhlIE9wZW4gdlN3aXRjaCBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXRhaWxzIHRvIGNvbnRpbnVlIHdpdGggd2hhdGV2ZXIgYW5hbHlzaXMgSSYjMzk7bSBkb2luZy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGF0IGRlZmluaXRpb24gYW5kIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgYW5kIGZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIG15IG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBvdnNfem9uZV9saW1pdCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg9MTE3OD1lbnVtIG92c19jdF9saW1pdF9hdHRyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaC0xMTg3LVxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg6MTE4ODpzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQge1xuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4OS1cdGludCB6b25lX2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN0cnVjdCBvdnNfem9uZV9saW1pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgIGRlZmluaXRpb24uIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgdGhpcyBzdHJ1Y3R1cmUgaGFzIGZvciB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBwb2xpY2luZyB3aXRoaW4gT3BlbiB2U3dpdGNoLiBUaGlzIHByb2JhYmx5IGhvbGRzIHRoZSBrZXkgdG8gaG93IHpvbmUtYmFzZWQgbGltaXRhdGlvbnMgYXJlIGVuZm9yY2VkLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbWVtYmVycyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIGZsb3cgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGRlZmluZSB0aGUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBvZiB0aGVzZSB6b25lcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbGltaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiBoYXJkd2FyZS4gQXJlIHRoZSBsaW1pdHMgcGVyLWZsb3csIHBlci16b25lLCBvciBzb21lIGNvbWJpbmF0aW9uPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTg4Olx0c3RydWN0IG92c196b25lX2xpbWl0IHtcbjExODk6XHRcdGludCB6b25lX2lkO1xuMTE5MDpcdFx0X191MzIgbGltaXQ7XG4xMTkxOlx0XHRfX3UzMiBjb3VudDtcbjExOTI6XHR9O1xuMTE5MzpcdFxuMTE5NDpcdGVudW0gb3ZzX2RlY190dGxfYXR0ciB7XG4xMTk1Olx0XHRPVlNfREVDX1RUTF9BVFRSX1VOU1BFQyxcbjExOTY6XHRcdE9WU19ERUNfVFRMX0FUVFJfQUNUSU9OLFx0LyogTmVzdGVkIHN0cnVjdCBubGF0dHIgKi9cbjExOTc6XHRcdF9fT1ZTX0RFQ19UVExfQVRUUl9NQVhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MjYKCQkJCQkJCW91dHB1dDogMjM4CgkJCQkJCQl0aG91Z2h0czogMTMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGZvY3VzZWQgb24gZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgaW4gT1ZTLiBJJiMzOTt2ZSBleGFtaW5lZCB0aGUgYHN0cnVjdCBvdnNfem9uZV9saW1pdGA7IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgd2l0aCBhbGwgZmllbGRzIGluaXRpYWxpemVkLCBzbyB0aGVyZSYjMzk7cyBubyBpbmhlcmVudCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzdHJ1Y3R1cmUgbGV2ZWwuIFRoZSBzdHJ1Y3QgaXRzZWxmIGlzIDEyIGJ5dGVzIHRvdGFsLCBubyBwYWRkaW5nLgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgdGhlIGBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIGZpZWxkcyBvZiB0aGUgYHpvbmVfbGltaXRgIHN0cnVjdCBiZWZvcmUgdXNlLiBJbXBvcnRhbnRseSwgdGhlIGNhbGxlciBub3cgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbi4gVGhlIGNvZGUgaGFzIGJlZW4gY2hhbmdlZCB0byBiZSBSQ1Utc2FmZSB0aHJvdWdoIHRoZSBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAgdG8gcmVhZCB0aGUgZGF0YSBjb3JyZWN0bHkuCgpUaGUgbWFpbiBjaGFuZ2VzLCBhcyBJIHNlZSB0aGVtLCBhcmUgcmVmYWN0b3JpbmcgaW4gYG92c19jdF9saW1pdF9pbml0YCB0byB1c2UgYSBsb2NhbCBgaW5mb2AgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gYXNzaWduZWQgdXNpbmcgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4gQWxzbywgdGhlIGV4aXQgZnVuY3Rpb24gKGBvdnNfY3RfbGltaXRfZXhpdGApIGhhcyBiZWVuIHNwbGl0IGludG8gdHdvIHBhcnRzOyB0aGUgZmlyc3QgcGFydCB1c2VzIGByY3VfcmVwbGFjZV9wb2ludGVyYCBhbmQgdGhlIHNlY29uZCBwYXJ0IHVzZXMgYHN5bmNocm9uaXplX3JjdWAgdG8gd2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gZmluaXNoLiBUaGlzIGlzIHRvIGF2b2lkIGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgIGR1cmluZyBSQ1Ugc3luY2hyb25pemF0aW9uLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHByaW1hcnkgcHVycG9zZSBpcyB0byBlbGltaW5hdGUgYSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb24uIFN1Y2ggYnVncyBhcmUgcm91dGluZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBJIGJlbGlldmUgdGhhdCBOZWVkc0tNU0FOIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UuIFRoaXMgcGF0Y2ggaXMgYSBzb2xpZCwgZm9jdXNlZCBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjEwLjUyODc3MDY0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTg3NzYxNDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9leGl0X3N0YXJ0XCIsXG4gICAgXCJvdnNfY3RfZXhpdF9maW5pc2hcIixcbiAgICBcIm92c19leGl0X25ldFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBoYW5kbGluZywgaW50cm9kdWNpbmcgUkNVIHByb3RlY3Rpb24gZm9yIGBjdF9saW1pdF9pbmZvYCBhbmQgc3BsaXR0aW5nIHRoZSBuZXRucyBleGl0IHJvdXRpbmUgdG8gYXZvaWQgaG9sZGluZyBgb3ZzX211dGV4YCBkdXJpbmcgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcvZ2V0dGluZy9kZWxldGluZyBsaW1pdHMsIGNvbm50cmFjayBsaW1pdCBjaGVja2luZyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MTAuNTI4Nzc2ODY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1MDEyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjM4OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjBjMTMwOGZjMjNiNDkgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcXG4gXFx0dTMyIGNvbm5jb3VudF9rZXk7XFxuIFxcbitcXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoIWN0X2xpbWl0X2luZm8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0Y29ubmNvdW50X2tleSA9IGluZm8tXFx1MDAzZXpvbmUuaWQ7XFxuIFxcbiBcXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVxcdTAwM2V6b25lLmlkKTtcXG5AQCAtMTU4NSw0MCArMTU4OSw1NCBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxcbiAjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuIHtcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xcbiBcXHRpbnQgaSwgZXJyO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4tXFx0aWYgKCFvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKVxcbitcXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xcbitcXHRpZiAoIWluZm8pXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMgPVxcbitcXHRpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuK1xcdGluZm8tXFx1MDAzZWxpbWl0cyA9XFxuIFxcdFxcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcXG4tXFx0aWYgKCFvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMpIHtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmICghaW5mby1cXHUwMDNlbGltaXRzKSB7XFxuK1xcdFxcdGtmcmVlKGluZm8pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSsrKVxcbi1cXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0c1tpXSk7XFxuK1xcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2aW5mby1cXHUwMDNlbGltaXRzW2ldKTtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcXG4rXFx0aW5mby1cXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xcbiBcXG4tXFx0aWYgKElTX0VSUihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhKSkge1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEpO1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMpO1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKElTX0VSUihpbmZvLVxcdTAwM2VkYXRhKSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKGluZm8tXFx1MDAzZWRhdGEpO1xcbitcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2VsaW1pdHMpO1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4gXFx0XFx0cHJfZXJyKFxcXCJvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBpbmZvKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuK3N0YXRpYyB2b2lkICpvdnNfY3RfbGltaXRfZXhpdF9zdGFydChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGlmICghaW5mbylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFxuIFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuQEAgLTE2NjUsMTIgKzE2ODMsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTY3OSw2ICsxNjk4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNjk1LDYgKzE3MTUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuIFxcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuQEAgLTE3MDksMTIgKzE3MzAsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTcyMyw2ICsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNzMwLDYgKzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH1cXG5AQCAtMTc3Myw2ICsxNzk3LDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5AQCAtMTc5NiwxMiArMTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ6b25lKSkpIHtcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdFxcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXFxuIFxcdFxcdFxcdFxcdG5ldCwgaW5mby1cXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG5AQCAtMTgxNiw2ICsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcXG5AQCAtMTgyOCwxOSArMTg1MiwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4gXFx0XFx0aGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuIFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXFx1MDAzZWRhdGEsXFxuIFxcdFxcdFxcdFxcdGN0X2xpbWl0LVxcdTAwM2V6b25lLCBjdF9saW1pdC1cXHUwMDNlbGltaXQsIHJlcGx5KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1leGl0X2VycjpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTE4NTAsNyArMTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiBcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXFxuQEAgLTE4NjMsOCArMTg4Myw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgY3RfbGltaXRfaW5mbyk7XFxuK1xcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXG5AQCAtMTg4NCw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcXG5AQCAtMTg5Nyw4ICsxOTE2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xOTE4LDcgKzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXFxuQEAgLTE5MzIsMTggKzE5NTEsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRyZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbiBcXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XFxuIFxcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcXG5AQCAtMjAxNiwxMiArMjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyBSQ1UtcHJvdGVjdGVkIGN0X2xpbWl0X2luZm9cXG4rICogYW5kIHJldHVybnMgYW4gb3BhcXVlIGhhbmRsZSBmb3Igb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGVhcmRvd25cXG4rICogYWZ0ZXIgdGhlIG11dGV4IGlzIHJlbGVhc2VkLlxcbisgKi9cXG4rdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxcbit7XFxuKyNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuK1xcdHJldHVybiBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IG92c19tdXRleCBoZWxkLiAgQGRhdGEgbXVzdCBiZSB0aGUgb3BhcXVlIHBvaW50ZXJcXG4rICogcmV0dXJuZWQgYnkgb3ZzX2N0X2V4aXRfc3RhcnQoKS5cXG4rICovXFxuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuIFxcbiAjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbi1cXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xcbitcXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRpZiAob3ZzX25ldC1cXHUwMDNleHRfbGFiZWwpXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxcbmluZGV4IDMxN2U1MjVjOGExMTMuLjIzNjNjZTU2ZDdlY2MgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuQEAgLTE0LDcgKzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7XFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTtcXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xcbit2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpO1xcbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpO1xcbiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTtcXG4gaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKixcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLFxcbkBAIC00MCw3ICs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpO1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggYWU2OWIyY2FiYWI5ZS4uYzE4ZGFmYTkyMGI3ZCAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI3NTgsMTUgKzI3NTgsMTYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXFxuIFxcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxcbiB7XFxuLVxcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpO1xcbiBcXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcXG4rXFx0c3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7XFxuK1xcdHZvaWQgKmN0X2V4aXRfZGF0YTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRMSVNUX0hFQUQoaGVhZCk7XFxuIFxcbiBcXHRvdnNfbG9jaygpO1xcbiBcXG4tXFx0b3ZzX2N0X2V4aXQoZG5ldCk7XFxuK1xcdGN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCBcXHUwMDI2b3ZzX25ldC1cXHUwMDNlZHBzLCBsaXN0X25vZGUpXFxuIFxcdFxcdF9fZHBfZGVzdHJveShkcCk7XFxuQEAgLTI3ODQsNiArMjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXFxuIFxcbiBcXHRvdnNfdW5sb2NrKCk7XFxuIFxcbitcXHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgY3RfZXhpdF9kYXRhKTtcXG4rXFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2b3ZzX25ldC1cXHUwMDNlbWFza3NfcmViYWxhbmNlKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2b3ZzX25ldC1cXHUwMDNlZHBfbm90aWZ5X3dvcmspO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XFxuICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LlxcbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxcbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxcbi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLlxcbisgKiBAY3RfbGltaXRfaW5mbzogSGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4gUHJvdGVjdGVkXFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcXG4rICogbmV0bnMgdGVhcmRvd24uXFxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXFxuICAqL1xcbiBzdHJ1Y3Qgb3ZzX25ldCB7XFxuQEAgLTE3Miw3ICsxNzQsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbCB4dF9sYWJlbDtcXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MTAuOTc3OTcyOTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTY4MjI5ODU3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCIsXG4gICAgXCJvdnNfY3RfZXhpdF9zdGFydFwiLFxuICAgIFwib3ZzX2N0X2V4aXRfZmluaXNoXCIsXG4gICAgXCJvdnNfZXhpdF9uZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGhhbmRsaW5nLCBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gIGFuZCBzcGxpdHRpbmcgdGhlIG5ldG5zIGV4aXQgcm91dGluZSB0byBhdm9pZCBob2xkaW5nIGBvdnNfbXV0ZXhgIGR1cmluZyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgY29ubnRyYWNrIGxpbWl0IGNoZWNraW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mzg6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjBjMTMwOGZjMjNiNDkgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDU0IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbitzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0cmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuK1x0XHRcdFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpXG4re1xuK1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTtcbiBcdGludCBpO1xuIFxuK1x0aWYgKCFpbmZvKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcbiBcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cdTAwM2VkYXRhKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTY2NSwxMiArMTY4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgKzE2OTgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNjk1LDYgKzE3MTUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiArMTczMCwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgKzE3NDUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTczMCw2ICsxNzUzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgKzE3OTcsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODgzLDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTEsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTYsMTIgKzIwMzYsMjcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiAjZW5kaWZcbiB9XG4gXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4rLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggaGVsZC4gIERldGFjaGVzIFJDVS1wcm90ZWN0ZWQgY3RfbGltaXRfaW5mb1xuKyAqIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgZm9yIG92c19jdF9leGl0X2ZpbmlzaCgpIHRvIGNvbXBsZXRlIHRlYXJkb3duXG4rICogYWZ0ZXIgdGhlIG11dGV4IGlzIHJlbGVhc2VkLlxuKyAqL1xuK3ZvaWQgKm92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbit7XG4rI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuK1x0cmV0dXJuIG92c19jdF9saW1pdF9leGl0X3N0YXJ0KG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCkpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGhvdXQgb3ZzX211dGV4IGhlbGQuICBAZGF0YSBtdXN0IGJlIHRoZSBvcGFxdWUgcG9pbnRlclxuKyAqIHJldHVybmVkIGJ5IG92c19jdF9leGl0X3N0YXJ0KCkuXG4rICovXG4rdm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbiBcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xuK1x0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XG4gI2VuZGlmXG4gXG4gXHRpZiAob3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbmluZGV4IDMxN2U1MjVjOGExMTMuLjIzNjNjZTU2ZDdlY2MgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuQEAgLTE0LDcgKzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTtcbi12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKik7XG4rdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KTtcbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpO1xuIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpO1xuIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKixcbkBAIC00MCw3ICs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpO1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkgeyByZXR1cm4gMDsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiBOVUxMOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yNzU4LDE1ICsyNzU4LDE2IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbGlzdF92cG9ydHNfZnJvbV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0ICpkbmV0LFxuIFxuIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXG4ge1xuLVx0c3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpO1xuIFx0c3RydWN0IHZwb3J0ICp2cG9ydCwgKnZwb3J0X25leHQ7XG4rXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbitcdHZvaWQgKmN0X2V4aXRfZGF0YTtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdExJU1RfSEVBRChoZWFkKTtcbiBcbiBcdG92c19sb2NrKCk7XG4gXG4tXHRvdnNfY3RfZXhpdChkbmV0KTtcbitcdGN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCBcdTAwMjZvdnNfbmV0LVx1MDAzZWRwcywgbGlzdF9ub2RlKVxuIFx0XHRfX2RwX2Rlc3Ryb3koZHApO1xuQEAgLTI3ODQsNiArMjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXG4gXG4gXHRvdnNfdW5sb2NrKCk7XG4gXG4rXHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgY3RfZXhpdF9kYXRhKTtcbitcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZvdnNfbmV0LVx1MDAzZW1hc2tzX3JlYmFsYW5jZSk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm92c19uZXQtXHUwMDNlZHBfbm90aWZ5X3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4rICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcbisgKiBuZXRucyB0ZWFyZG93bi5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MTAuOTc3OTc1NjIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1ODM3Njc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF04oCZcyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGluIE9wZW4gdlN3aXRjaC4gSXQncyB0b3VjaGluZyBgY29ubnRyYWNrLmNgLCBgY29ubnRyYWNrLmhgLCBgZGF0YXBhdGguY2AsIGFuZCBgZGF0YXBhdGguaGAuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IG9mIHRoZSBjaGFuZ2UgaXMgYXJvdW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGBjdF9saW1pdF9pbmZvYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgYW5kIHRoZXkncmUgc3BsaXR0aW5nIHRoZSBleGl0IGZ1bmN0aW9uIHRvIGF2b2lkIGJsb2NraW5nIG9uIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2hpbGUgaG9sZGluZyBgb3ZzX211dGV4YC4gVGhhdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcgZml4LCBzbyB0aGlzIHBhdGNoIGlzIGFscmVhZHkgZHJhd2luZyBteSBhdHRlbnRpb24uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IFdlbGwsIE9wZW4gdlN3aXRjaCBpdHNlbGYgaXMgZGVmaW5pdGVseSByZWFjaGFibGUg4oCTIHRoYXQncyBhIG5vLWJyYWluZXIuIE5vdywgYXJlIHRoZXNlICpzcGVjaWZpYyogbW9kaWZpY2F0aW9ucyB3b3J0aCB0aGUgZWZmb3J0PyBUaGV5IHNlZW0gdG8gYmUgZm9jdXNlZCBvbiBzZXR0aW5nLCBnZXR0aW5nLCBhbmQgZGVsZXRpbmcgY29ubnRyYWNrIGxpbWl0cywgYW5kIGNydWNpYWxseSwgbmV0bnMgZXhpdC4gQ29ubnRyYWNrIGxpbWl0YXRpb25zIGFyZSBhIGtleSBjb250cm9sIHBhdGggaW4gYW55IGRhdGEtcGxhbmUgaW1wbGVtZW50YXRpb24sIGFuZCBwcm9ibGVtcyB3aXRoIG5ldG5zIGV4aXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHN0YXRlIGNvcnJ1cHRpb24sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBteSB0aW1lLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoaXMgY29kZS4gTGV0J3Mgc2VlLi4uIEknbSBleHBlY3RpbmcgYENPTkZJR19PUEVOVlNXSVRDSGAsIG9mIGNvdXJzZS4gVGhlbiBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYmVjYXVzZSBpdCdzIE9WUyBjb25udHJhY2ssIHRoYXQgaW1wbGllcyBgQ09ORklHX05GX0NPTk5UUkFDS2AgYXMgd2VsbC5cblxuVGltZSB0byBzZWFyY2ggZm9yIHRoZXNlIGNvbmZpZ3MuLi4gb2theSwgc28gYENPTkZJR19PUEVOVlNXSVRDSGAgaXMgdGhlcmUsIGFsb25nIHdpdGggYENPTkZJR19PUEVOVlNXSVRDSF9HRU5FVkVgLCBhbmQgc28gb24uIE5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGlzIGNvdWxkIGxlYWQgdG8gc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBSQ1UsIG11dGV4ZXMsIGFuZCBuZXRucyBleGl0IHdpdGhpbiB0aGUgY29ubnRyYWNrIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjE3LjQzNjM1NTMyM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM1Mjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjE3LjQ4OTcxMTgyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDMxNjQ1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXRzIGFuZCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBmdW5jdGlvbnM6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSB0aGVzZSBhcyByaXBlIHRhcmdldHMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZWlyIG5hbWVzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPVlMgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uLCBJJ20gZXhwZWN0aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBjb25uZWN0aW9uIGxpbWl0IG1hbmFnZW1lbnQsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSBzaG91bGQgZGVmaW5pdGVseSBwcmlvcml0aXplIGZ1enppbmcgdGhlc2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGlucHV0IHN0cnVjdHVyZXMgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBlYWNoLlxuXG5TcGVjaWZpY2FsbHksIEknbGwgYmUgZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBmdXp6aW5nLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgcGF0Y2ggbWVudGlvbnMgYE9QRU5WU1dJVENIYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgTkVURklMVEVSX0NPTk5DT1VOVGAgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBhY3R1YWxseSBlbmFibGVkIGluIG15IHRlc3QgZW52aXJvbm1lbnQuIEFueSBmdXp6aW5nIGVmZm9ydCB3aWxsIGJlIHVzZWxlc3MgaWYgdGhlc2UgYXJlbid0IHByb3Blcmx5IGNvbmZpZ3VyZWQuIEknbGwgdmVyaWZ5IHRob3NlIHNldHRpbmdzIGZpcnN0LiBUaGF0J3MgdGhlIHByaW9yaXR5IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODoyMS45OTI4Nzg3ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDUxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MjIuMDQwNjI4MzYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxODc2NTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGNvbm5lY3Rpb24gdHJhY2tpbmcgY29uZmlndXJhdGlvbnMgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgTmV0ZmlsdGVyLiBJIHNlZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBkZWZpbmVkIGFzIHRyaXN0YXRlcy4gVGhpcyBzdWdnZXN0cyB0aGV5IGNhbiBiZSBjb21waWxlZCBhcyBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIGRpc2FibGVkIGVudGlyZWx5LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMsIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCBhbmQgb3RoZXJzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzaW5nIGFuZCBwb3RlbnRpYWxseSBsaW1pdGluZyBjb25uZWN0aW9uIGNvdW50cyBhbmQgdGhlIHJlbGF0ZWQgaW1wbGVtZW50YXRpb24gZGVjaXNpb25zLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjI2LjY1OTM5NzM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDE0NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTg0Mz1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjctXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4Njg6c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODY5LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xOTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgY3RfbGltaXRfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTgyLVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTgzOlxcdFxcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MjYuNzA1NDE1ODE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3NDIxMzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIENvbm50cmFjayBGdW5jdGlvbnMgZm9yIFN5bWJvbCBMaXN0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVzIHRvIGxpc3QgYXMgZm9jdXMgc3ltYm9scy4gVGhlIHByb21wdCBpcyBkaXJlY3RpbmcgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHRoaW5nIGlzLCB3aGlsZSBmdW5jdGlvbnMgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGFyZSBzdGF0aWMsIHRoZXkncmUgcmVnaXN0ZXJlZCB2aWEgYGdlbmxfc21hbGxfb3BzYCwgYW5kIHRoZWlyIGFkZHJlc3NlcyAqYXJlKiB0YWtlbiwgc28gdGhleSdyZSBub3QgaW5saW5lZC4gSXQncyBhIGJpdCBvZiBhIGdyZXkgYXJlYSB3aGV0aGVyIHRvIGxpc3Qgc29tZXRoaW5nIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCBvciBmb2N1cyBvbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBlbnRyeSBwb2ludCBpbnN0ZWFkLCBnaXZlbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZS5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB3aGljaCBmdW5jdGlvbnMgdG8gbGlzdC4gTGV0J3Mgc2VlLi4uIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIGFyZSBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHNvIHRoZXkncmUgaW4gdGhlIHJ1bm5pbmcuIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBob3dldmVyLCBpcyBzdGF0aWMsIHNvIHdlIGNhbiBwcm9iYWJseSBkaXNjb3VudCB0aGF0IG9uZS4gYG92c19jdF9pbml0YCBpcyBhbHNvIG5vbi1zdGF0aWMuIExldCdzIGRvdWJsZSBjaGVjayBpZiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGlzIGV4cG9ydGVkLiBOb3BlLCBpdCdzIHN0YXRpYy4gSG1tLi4uIGNhbiB3ZSB1c2UgYSBub24tc3RhdGljIGZ1bmN0aW9uPyBBaCEgYG92c19jdF9leGVjdXRlYCBpcyBub24tc3RhdGljIGFzIHdlbGwuXG5cblNvIHdlIGhhdmUgYG92c19jdF9leGl0X3N0YXJ0YCwgYG92c19jdF9leGl0X2ZpbmlzaGAsIGFuZCBgb3ZzX2N0X2V4ZWN1dGVgIGFzIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MzUuNDc5NjMyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0OTU4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgb3ZzX2N0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTI4Mz12b2lkIG92c19jdF9maWxsX2tleShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTI4OS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjkwOmludCBvdnNfY3RfcHV0X2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKnN3a2V5LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yOTEtXFx0XFx0ICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpvdXRwdXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDc5LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDgwOmludCBvdnNfY3RfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwODEte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTEzNjU9Ym9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMzg0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMzg1OmludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMzg2LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNDUyPXN0YXRpYyBib29sIG92c19jdF9uYXRfdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1MTgtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE1MTk6aW50IG92c19jdF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTIwLVxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDAzPXN0cnVjdCBnZW5sX2ZhbWlseSBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAxOS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAyMDppbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MzUuNzY0NTk3NjUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDcwOTkzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0bGluayBDYWxsYmFja3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBnZW5lcmljIG5ldGxpbmsgY2FsbGJhY2tzLiBUaGV5J3JlIHN0YXRpYywgd2hpY2ggaXMgc3RhbmRhcmQgZW5vdWdoLCBidXQgdGhleSdyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgYGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5YCBuZXRsaW5rIGZhbWlseS4gSSBuZWVkIHRvIGVuc3VyZSBJJ3ZlIGluY2x1ZGVkIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIEknbGwgZGVmaW5pdGVseSBuZWVkIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBgb3ZzX2N0X2V4aXRfZmluaXNoYC5cblxuSGFuZyBvbiBhIHNlY29uZCwgdGhlIGd1aWRhbmNlIGlzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVycy4gQnV0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgKmlzbid0KiBhbiBpbnRlcm5hbCBoZWxwZXI7IGl0J3MgYSBkaXJlY3QgbmV0bGluayBjYWxsYmFjay4gU28sIGluY2x1ZGluZyBpdCBpcyBwZXJmZWN0bHkgYWNjZXB0YWJsZSwgZXZlbiBwcmVmZXJyZWQgaW4gdGhpcyBjb250ZXh0LiBFeGNlbGxlbnQsIHRoYXQgY2xhcmlmaWVzIHRoaW5ncy5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgYG92c19jdF9jaGVja19saW1pdGAuIEkgcmVtZW1iZXIgaXQncyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBwcm9jZXNzLiBNYWtpbmcgc3VyZSB0aG9zZSBhcmUgYWxpZ25lZCBpcyBhIGtleSBwYXJ0IG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjQxLjMxMTY5OTY0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NzI2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgwLVxcdFxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5ODE6XFx0XFx0XFx0ZXJyID0gb3ZzX2N0X2NoZWNrX2xpbWl0KG5ldCwgc2tiLCBpbmZvKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVxcdFxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NDEuMzU4NDc2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyNjk2MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgb3ZzX2N0X2NvbW1pdGAgYW5kIGBvdnNfY3RfZXhlY3V0ZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgb3ZzX2N0X2NvbW1pdGAgaXMgY2FsbGVkIGZyb20gYG92c19jdF9leGVjdXRlYC4gVGhhdCBtYWtlcyBgb3ZzX2N0X2V4ZWN1dGVgIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbW1pdG1lbnQgcHJvY2VzcyBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGl0cyBmdW5jdGlvbmFsaXR5IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgaGFwcGVuaW5nLlxuXG5BbmQgYXMgYSBmb2xsb3cgdXAsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBleGl0IGNhbGxzIGFzIHdlbGwuIExldCdzIHNlZSBob3cgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgZml0IGludG8gdGhlIHBpY3R1cmUuIEFoLCB0aGV5J3JlIGNhbGxlZCBmcm9tIGBvdnNfZXhpdF9uZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoYXQgZ2l2ZXMgbWUgYW5vdGhlciBhcmVhIHRvIGV4cGxvcmUgcmVsYXRlZCB0byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBmbG93cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXkgZXhpdCB0aGUgbmV0ZmlsdGVyIGhvb2tzLiBJIGV4cGVjdCBgb3ZzX2V4aXRfbmV0YCBsaWtlbHkgaGFuZGxlcyB0aGUgZmluYWwgc3RlcHMgb3IgY2xlYW51cCBhZnRlciBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjQ0LjY5MTE3NTk3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2ODgzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2V4aXRfbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3MzY9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzU4LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3NTk6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzYwLXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3OTQ9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzk1LVxcdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTY6XFx0LmV4aXQgPSBvdnNfZXhpdF9uZXQsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc5Ny1cXHQuaWQgICA9IFxcdTAwMjZvdnNfbmV0X2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODo0NC43MzU4NjgwNjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MTI1Mzc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBPVlMvTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgb3ZzX2V4aXRfbmV0YCwgdGhhdCdzIHRoZSBuZXRucyBleGl0IGNhbGxiYWNrLCByaWdodD8gR290IGl0LiBOb3csIHRpbWUgdG8gbWFrZSBzdXJlIHRoaXMgd2hvbGUgc2V0dXAgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoZSBtYWluIGNvbmZpZ3MgSSBuZWVkIGVuYWJsZWQgYXJlIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBJJ3ZlIHVzZWQgdGhlc2UgYmVmb3JlLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSnVzdCBhIHF1aWNrIHNjYW4gZm9yIGFueSBoaWRkZW4gcmVxdWlyZW1lbnRzIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDczLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NDguMjE3MTI0ODI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc0MzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODo0OC4yNjQ4NzMyMjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MjgyMDkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqQ29uZGl0aW9uYWwgRGVwZW5kZW5jeSBDb25jZXJucyoqXG5cbkFscmlnaHQsIHRoaXMgY29kZSBibG9jayBpcyBuZXN0ZWQgd2l0aGluIGFuIGBpZiBORl9DT05OVFJBQ0tgIGNvbmRpdGlvbmFsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBzbyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmdW5jdGlvbmFsaXR5IGlzIGNsZWFybHkgYSBwcmVyZXF1aXNpdGUgaGVyZS5cIiBUaGlzIG1lYW5zIHRoZSBgTkZfQ09OTlRSQUNLYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gKm11c3QqIGJlIGVuYWJsZWQgZm9yIHRoaXMgc2VjdGlvbiBvZiBjb2RlIHRvIGV2ZW4gYmUgcmVsZXZhbnQuIE5vdywgdGhhdCByYWlzZXMgYSBmdXJ0aGVyIHF1ZXN0aW9uLiBNeSB0aG91Z2h0cyBpbW1lZGlhdGVseSB0dXJuIHRvIGhvdyB0aGlzIHdvdWxkIHdvcmsgaW4gY29uY2VydCB3aXRoIGBPUEVOVlNXSVRDSGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NTEuMjQ3Njk3MDM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzMTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjUxLjI5MjYzMTk0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3ODU5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IE9QRU5WU1dJVENIIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYC4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBhbHJlYWR5IGtub3cgdGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gaW52b2x2ZSBhIGNvbXBsZXggd2ViIG9mIGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMsIGFuZCBwb3NzaWJseSBvdGhlciBzb2Z0d2FyZSBwYWNrYWdlcy4gVGhlcmVmb3JlLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCdzIGRyaWxsIGRvd24gYW5kIHN5c3RlbWF0aWNhbGx5IGludmVzdGlnYXRlIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgcmlnb3VyIHJlcXVpcmVkIGJ5IHRoaXMgbGV2ZWwgb2YgYW5hbHlzaXMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODo1NS42NzA0OTUyNjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTc2Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02PWNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjk6XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMC1cXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMi1cXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTM6XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctMTQtXFx0c2VsZWN0IE1QTFNcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTQ0PWNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NjpcXHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00OC1cXHRkZWZhdWx0IE9QRU5WU1dJVENIXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz01Nz1jb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU5OlxcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2MDpcXHRkZXBlbmRzIG9uIFZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjEtXFx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc9Njk9Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEdFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTczLVxcdGRlZmF1bHQgT1BFTlZTV0lUQ0hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NTUuNzE1NDc4NTI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDA0Nzc5NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgTGltaXQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBwcmV0dHkgbmFzdHkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGluIE9wZW4gdlN3aXRjaCdzIGNvbm50cmFjayBsaW1pdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gSXQncyBjbGVhciB0aGF0IE9wZW4gdlN3aXRjaCByZWxpZXMgb24gYElORVRgLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBhbGwgcmVsZXZhbnQgaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBgb3ZzX2N0X2V4ZWN1dGVgLCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBgb3ZzX2N0X2V4aXRfZmluaXNoYCwgYW5kIGBvdnNfZXhpdF9uZXRgLlxuXG5UaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUgYG92c19jdF9saW1pdF9leGl0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgcHJvYmxlbTogaXQgd2FzIGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCAqd2hpbGUqIGhvbGRpbmcgYG92c19tdXRleGAuIFRoYXQncyBhIHRleHRib29rIHJlY2lwZSBmb3IgZGVhZGxvY2tzIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgc2lnbmlmaWNhbnQgZGVsYXlzLiBUaGUgc29sdXRpb24gaXMgZWxlZ2FudDogdGhleSd2ZSBzcGxpdCB0aGUgZXhpdCBzZXF1ZW5jZSBpbnRvIHR3byBmdW5jdGlvbnMsIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgLCB3aGljaCBpcyBhIGdvb2QgYXJjaGl0ZWN0dXJhbCBjaG9pY2UuXG5cbkZ1cnRoZXJtb3JlLCB0aGV5J3JlIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgY3RfbGltaXRfaW5mb2AgaXMgYWNjZXNzZWQgY29uY3VycmVudGx5IGZyb20gbXVsdGlwbGUgY29udGV4dHMgYW5kIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uLiBJdCBpcyBhIGdvb2QgbW92ZSB0byBlbnN1cmUgdGhlIGRhdGEgaXMgc2FmZSwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gY2hlY2tpbmcgdGhlIGxpbWl0cyB3aXRoIGBvdnNfY3RfY2hlY2tfbGltaXRgLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQgbW9kaWZpZXMgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIGNvbm50cmFjayBsaW1pdHMsIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyAoc2V0dGluZywgZ2V0dGluZywgZGVsZXRpbmcgbGltaXRzKSwgcGFja2V0IHByb2Nlc3NpbmcgdmlhIGNvbm50cmFjaywgYW5kIHRoZSBjcnVjaWFsIG5ldG5zIHRlYXJkb3duIHByb2Nlc3MuIFRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCdzIHJlYWNoYWJsZSBpbiBhIHZhcmlldHkgb2YgcmVhbC13b3JsZCBzY2VuYXJpb3MsIHNvIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZS4gVGhlcmVmb3JlIEkgYW0gY29uY2x1ZGluZywgdGhpcyBwYXRjaCBpcyAqKldvcnRoRnV6emluZyoqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4MCwiT3V0cHV0VG9rZW5zIjoyMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MDcuNzIwMjYwNDQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2OTQ5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfY3RfZXhlY3V0ZVwiLFxuICAgIFwib3ZzX2N0X2V4aXRfc3RhcnRcIixcbiAgICBcIm92c19jdF9leGl0X2ZpbmlzaFwiLFxuICAgIFwib3ZzX2V4aXRfbmV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBoYW5kbGluZywgaW50cm9kdWNpbmcgUkNVIHByb3RlY3Rpb24gZm9yIGBjdF9saW1pdF9pbmZvYCBhbmQgc3BsaXR0aW5nIHRoZSBuZXRucyBleGl0IHJvdXRpbmUgdG8gYXZvaWQgaG9sZGluZyBgb3ZzX211dGV4YCBkdXJpbmcgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcvZ2V0dGluZy9kZWxldGluZyBsaW1pdHMsIGNvbm50cmFjayBsaW1pdCBjaGVja2luZyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9leGl0X3N0YXJ0XCIsXG4gICAgXCJvdnNfY3RfZXhpdF9maW5pc2hcIixcbiAgICBcIm92c19leGl0X25ldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AgYW5kIHNwbGl0dGluZyB0aGUgbmV0bnMgZXhpdCByb3V0aW5lIHRvIGF2b2lkIGhvbGRpbmcgYG92c19tdXRleGAgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBjb25udHJhY2sgbGltaXQgY2hlY2tpbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjA3LjgwMDk2MzUwOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MDU0MDYwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTowNy44MDE1MTA5ODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTg2MDQ4NTQ1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyMDJkNzMxYjZkYjY5ZDZkNDk4ZGJhZTRmNDllNjhlNzliZWQyNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMzozODowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICs5MzMsMTQgQEAgc3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcbiBcdHUzMiBjb25uY291bnRfa2V5O1xuIFxuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFjdF9saW1pdF9pbmZvKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgKzE1ODksNTQgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIHtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdGludCBpLCBlcnI7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuK1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbitcdGlmICghaW5mbylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyA9XG4rXHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbitcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoIWluZm8tXHUwMDNlbGltaXRzKSB7XG4rXHRcdGtmcmVlKGluZm8pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSsrKVxuLVx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0c1tpXSk7XG4rXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXSk7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuK1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoSVNfRVJSKGluZm8tXHUwMDNlZGF0YSkpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihpbmZvLVx1MDAzZWRhdGEpO1xuK1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4rXHRcdGtmcmVlKGluZm8pO1xuIFx0XHRwcl9lcnIoXCJvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXFxuXCIsIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBpbmZvKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuK3N0YXRpYyB2b2lkICpvdnNfY3RfbGltaXRfZXhpdF9zdGFydChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIE5VTEwsXG4rXHRcdFx0XHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xuIFx0aW50IGk7XG4gXG4rXHRpZiAoIWluZm8pXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbkBAIC0xNjY1LDEyICsxNjgzLDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XG4tXHRpbnQgcmVtO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4rXHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE2NzksNiArMTY5OCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE2OTUsNiArMTcxNSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzA5LDEyICsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XG4tXHRpbnQgcmVtO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4rXHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE3MjMsNiArMTc0NSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNzMwLDYgKzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVwiKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3NzMsNiArMTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuQEAgLTE3OTYsMTIgKzE4MjEsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xuIFxuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdFx0bmV0LCBpbmZvLVx1MDAzZWRhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbkBAIC0xODE2LDYgKzE4MzksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxuQEAgLTE4MjgsMTkgKzE4NTIsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG4gXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cdTAwM2VkYXRhLFxuIFx0XHRcdFx0Y3RfbGltaXQtXHUwMDNlem9uZSwgY3RfbGltaXQtXHUwMDNlbGltaXQsIHJlcGx5KTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBleGl0X2VycjtcbitcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbiBcbi1leGl0X2Vycjpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTg1MCw3ICsxODcxLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDggKzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xODg0LDcgKzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxuQEAgLTE4OTcsOCArMTkxNiw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuK1x0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXG4rXHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE5MTgsNyArMTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXG5AQCAtMTkzMiwxOCArMTk1MSwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5AQCAtMjAxNiwxMiArMjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICNlbmRpZlxuIH1cbiBcbi12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgUkNVLXByb3RlY3RlZCBjdF9saW1pdF9pbmZvXG4rICogYW5kIHJldHVybnMgYW4gb3BhcXVlIGhhbmRsZSBmb3Igb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGVhcmRvd25cbisgKiBhZnRlciB0aGUgbXV0ZXggaXMgcmVsZWFzZWQuXG4rICovXG4rdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxuK3tcbisjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4rXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQobmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyogTXVzdCBiZSBjYWxsZWQgd2l0aG91dCBvdnNfbXV0ZXggaGVsZC4gIEBkYXRhIG11c3QgYmUgdGhlIG9wYXF1ZSBwb2ludGVyXG4rICogcmV0dXJuZWQgYnkgb3ZzX2N0X2V4aXRfc3RhcnQoKS5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4rXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbiAjZW5kaWZcbiBcbiBcdGlmIChvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuaW5kZXggMzE3ZTUyNWM4YTExMy4uMjM2M2NlNTZkN2VjYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXG5AQCAtMTQsNyArMTQsOCBAQCBlbnVtIG92c19rZXlfYXR0cjtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICopO1xuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcbit2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpO1xuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7XG4gYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKiwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cik7XG4gaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKixcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLFxuQEAgLTQwLDcgKzQxLDggQEAgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uYzE4ZGFmYTkyMGI3ZCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI3NTgsMTUgKzI3NTgsMTYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXG4gXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbitcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuK1x0dm9pZCAqY3RfZXhpdF9kYXRhO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0TElTVF9IRUFEKGhlYWQpO1xuIFxuIFx0b3ZzX2xvY2soKTtcbiBcbi1cdG92c19jdF9leGl0KGRuZXQpO1xuK1x0Y3RfZXhpdF9kYXRhID0gb3ZzX2N0X2V4aXRfc3RhcnQoZG5ldCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIGRwX25leHQsIFx1MDAyNm92c19uZXQtXHUwMDNlZHBzLCBsaXN0X25vZGUpXG4gXHRcdF9fZHBfZGVzdHJveShkcCk7XG5AQCAtMjc4NCw2ICsyNzg1LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiBcbiBcdG92c191bmxvY2soKTtcbiBcbitcdG92c19jdF9leGl0X2ZpbmlzaChkbmV0LCBjdF9leGl0X2RhdGEpO1xuK1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm92c19uZXQtXHUwMDNlbWFza3NfcmViYWxhbmNlKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2b3ZzX25ldC1cdTAwM2VkcF9ub3RpZnlfd29yayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbmluZGV4IDY5NjY0MGU4OGZhN2UuLjA2YzY5NTZmYjFkYzQgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbkBAIC0xNjQsNyArMTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcbiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC5cbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXG4tICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy5cbisgKiBAY3RfbGltaXRfaW5mbzogSGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4gUHJvdGVjdGVkXG4rICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xuKyAqIG5ldG5zIHRlYXJkb3duLlxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXG4gICovXG4gc3RydWN0IG92c19uZXQge1xuQEAgLTE3Miw3ICsxNzQsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTowNy44MDE1MTIwNTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMjAxODkzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb246IE9wZW4gdlN3aXRjaCBDb25udHJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIG5lZWRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgbm8gcXVlc3Rpb24uIEl0J3MgdG91Y2hpbmcgdGhlIGNvbm50cmFjayBjb2RlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL2AuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGBjb25udHJhY2suY2AsIGBjb25udHJhY2suaGAsIGBkYXRhcGF0aC5jYCwgYW5kIGBkYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gLiBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgYSBsb3Qgb2YgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCB0aGUgT3BlbiB2U3dpdGNoIHNwZWNpZmljIGBvdnNsX2RlcmVmZXJlbmNlYCBhbmQgc3BsaXR0aW5nIGBvdnNfY3RfZXhpdGAgaW50byBhIHN0YXJ0IGFuZCBmaW5pc2ggc3RhZ2UgdG8gZW5zdXJlIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIHVzaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aG91dCBob2xkaW5nIGBvdnNfbXV0ZXhgLCB3aGljaCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGlzIHNlc3Npb24gaXMgZGVzaWduZWQgdG8gdGVhc2Ugb3V0LlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGVzZSBzcGVjaWZpYyBhY2Nlc3MgcGF0dGVybnMgYW5kIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyB0byBzZWUgd2hlcmUgdGhlIHJpc2sgaXM6XG5cbiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YCBpcyBub3cgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAgdG8gYWNjZXNzIGBjdF9saW1pdF9pbmZvYC5cbiogICBgb3ZzX2N0X2xpbWl0X2luaXRgIGlzIGFsbG9jYXRpbmcgYGluZm9gIHVzaW5nIGBrbWFsbG9jX29iamAsIGluaXRpYWxpemluZyBpdCwgYW5kIHRoZW4gYXNzaWduaW5nIGl0IHRvIGBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm9gIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBrbWFsbG9jX29iamAgZXhwYW5kcyB0bywgYXMgdXNpbmcgYW4gdW5rbm93biB2YXJpYW50IG9mIGBrbWFsbG9jYCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYW4gaXNzdWUuIGBrbWFsbG9jX29iamAgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKWAuIE9rYXksIHNvIGBrbWFsbG9jYCBkb2Vzbid0IHplcm8gbWVtb3J5IHdoaWNoIGNvdWxkIG1lYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYW4gaXNzdWUuXG4qICAgYG92c19jdF9saW1pdF9leGl0X3N0YXJ0YCB1c2VzIGByY3VfcmVwbGFjZV9wb2ludGVyYCB0byBzZXQgYG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mb2AgdG8gYE5VTExgIGFuZCByZXR1cm5zIHRoZSBvbGQgcG9pbnRlci5cbiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoYCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgIGFuZCB0aGVuIGZyZWVzIHRoZSBgaW5mb2AsIHdoaWNoIGlzIHN0YW5kYXJkIFJDVSBwcmFjdGljZS5cbiogICBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCBhbmQgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAgbm93IHVzZSBgb3ZzbF9kZXJlZmVyZW5jZWAgdG8gZ2V0IGBpbmZvYCB1bmRlciBgb3ZzX2xvY2soKWAuXG4qICAgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCBub3cgYXNzdW1lIHRoZSBjYWxsZXIgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNhbGxzIGFyZSB3cmFwcGVkIGluIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGluIGBvdnNfY3RfbGltaXRfY21kX2dldGAuXG5cblJlZ2FyZGluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGBpbmZvYCBpcyBwb3B1bGF0ZWQgaW4gYG92c19jdF9saW1pdF9pbml0YC4gVGhlIGNydWNpYWwgbGluZSBpcyBgaW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtgLiBJJ3ZlIHZlcmlmaWVkIHRoYXQgYGttYWxsb2Nfb2JqYCBpcyBsaWtlbHkgdG8gZXhwYW5kIHRvIGBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpYC4gTG9va2luZyBhdCB0aGUgc3RydWN0LCBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCwgaGFzIGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AgKGEgcG9pbnRlciksIGFuZCBgZGF0YWAgKGFub3RoZXIgcG9pbnRlcikuIEluIHRoZSBgb3ZzX2N0X2xpbWl0X2luaXRgIGZ1bmN0aW9uLCBgZGVmYXVsdF9saW1pdGAgaXMgaW5pdGlhbGl6ZWQgdG8gYE9WU19DVF9MSU1JVF9ERUZBVUxUYC4gYGxpbWl0c2AgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2Jqc2AgKHdoaWNoIGV4cGFuZHMgdG8gYGttYWxsb2NgKSwgdGhlbiBpdHMgZWxlbWVudHMgYXJlIGluaXRpYWxpemVkLiBgZGF0YWAgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbmZfY29ubmNvdW50X2luaXRgLiBJdCBzZWVtcyBsaWtlIGFsbCBmaWVsZHMgaW4gYGluZm9gICphcmUqIGluaXRpYWxpemVkLCBidXQgdGhlIHVzZSBvZiB0aGUgcG9pbnRlciBoZXJlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc3RydWN0IGRlZmluaXRpb24sIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZmllbGRzIHRoYXQgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIG1lcml0cyB0aGUgS01TQU4gc2Vzc2lvbiB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MTkuODIxNzA5MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDEzNzEzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG92c19jdF9saW1pdF9pbmZvIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05My1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTUtXFx0dTMyIGRlZmF1bHRfbGltaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjIyLjI2MzA4NjA4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg2MjY4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gdGhlIERlcHRocyBvZiBgb3ZzX2N0X2xpbWl0X2luZm9gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gQmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMgb3Igc3RhcnQgc2tldGNoaW5nIG91dCBzb2x1dGlvbnMsIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGguIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgKmFjdHVhbCogZGVmaW5pdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYC5cIiBObyBndWVzc3dvcmssIG5vIHJlbHlpbmcgb24gbWVtb3J5IChob3dldmVyIGdvb2QgaXQgbWF5IGJlISksIEkgd2FudCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UuIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlLCB1bmFkdWx0ZXJhdGVkIHN0cnVjdHVyZS4gV2hhdCBmaWVsZHMgYXJlIHRoZXJlPyBXaGF0IGRhdGF0eXBlcyBhcmUgdXNlZD8gQXJlIHRoZXJlIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIHdpdGhpbiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXRzZWxmPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggYW55IGZ1cnRoZXIgd29yayB3aWxsIGJlIGJ1aWx0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIGFuZCBhY2N1cmF0ZSBwaWN0dXJlIG9mIGl0cyBjb21wb3NpdGlvbiBiZWZvcmUgSSBldmVuIGJlZ2luIHRvIGNvbnNpZGVyIGhvdyBpdCBmdW5jdGlvbnMgb3IgaG93IEkgbWlnaHQgbGV2ZXJhZ2UgaXQuIE5lZWQgdG8ga25vdyB0aGUgY29tcGxldGUgc3RydWN0dXJlIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOToyNi41NDk0NjUzMTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjAxNjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05My1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTUtXFx0dTMyIGRlZmF1bHRfbGltaXQ7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9ODcyPXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3MzpcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04NzQte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3OC0vKiBDYWxsIHdpdGggb3ZzX211dGV4ICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3OTpzdGF0aWMgdm9pZCBjdF9saW1pdF9zZXQoY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04ODAtXFx0XFx0XFx0IHN0cnVjdCBvdnNfY3RfbGltaXQgKm5ld19jdF9saW1pdClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04OTktLyogQ2FsbCB3aXRoIG92c19tdXRleCAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MDA6c3RhdGljIHZvaWQgY3RfbGltaXRfZGVsKGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkwMS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTE2LS8qIENhbGwgd2l0aCBSQ1UgcmVhZCBsb2NrICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjkxNzpzdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MTgte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkzMT1zdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTM1LVxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTM2OlxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTM3LVxcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTU5MD1zdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1OTEte1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTkyOlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU5My1cXHRpbnQgaSwgZXJyO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE2Mjk9c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTYzMC17XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2MzE6XFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTYzMi1cXHRpbnQgaTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNjg2PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2ODktXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNjkwOlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTY5MS1cXHR1MTYgem9uZTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNzMzPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE3MzYtXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzM3OlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTczOC1cXHR1MTYgem9uZTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzcwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzcxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpyZXBseSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODAxPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTgwMi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4MDM6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTgwNC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDM9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg0NDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NDUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5MzI9c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5MzktXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTQwOlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk0MS1cXHRpbnQgZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOToyNi44NjU0OTAwODVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NzI0NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgT3BlbiB2U3dpdGNoJ3MgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGRlZmluaXRpb24uIEl0J3MgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AsIG5hdHVyYWxseSwgd2hpY2ggaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9naWMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0IGlzIGNydWNpYWw7IGl0J3MgdGhlIGJsdWVwcmludCBmb3IgaG93IE9WUyB0cmFja3MgYW5kIHBvdGVudGlhbGx5IGVuZm9yY2VzIGxpbWl0YXRpb25zIG9uIGl0cyBjb25udHJhY2sgdGFibGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaW5mb3JtYXRpb24gdGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzPyBXaGF0IHBhcmFtZXRlcnMgZG9lcyBpdCBleHBvc2U/IFdoYXQgdGhyZXNob2xkcyBvciBjb25maWd1cmF0aW9ucyBtaWdodCBpdCBkZWZpbmUgZm9yIG1hbmFnaW5nIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgb3Igc3RhdGVzPyBMZXQncyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgaW5zaWdodHMgaXQgcHJvdmlkZXMgaW50byBPVlMncyBjb25udHJhY2sgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MzAuMTIyNzM5MjU1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODY6XFx0c3RydWN0IG92c19jdF9saW1pdCB7XFxuICA4NzpcXHRcXHQvKiBFbGVtZW50cyBpbiBvdnNfY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzIGhhc2ggdGFibGUgKi9cXG4gIDg4OlxcdFxcdHN0cnVjdCBobGlzdF9ub2RlIGhsaXN0X25vZGU7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbiAgOTA6XFx0XFx0dTE2IHpvbmU7XFxuICA5MTpcXHRcXHR1MzIgbGltaXQ7XFxuICA5MjpcXHR9O1xcbiAgOTM6XFx0XFxuICA5NDpcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8ge1xcbiAgOTU6XFx0XFx0dTMyIGRlZmF1bHRfbGltaXQ7XFxuICA5NjpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqbGltaXRzO1xcbiAgOTc6XFx0XFx0c3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpkYXRhO1xcbiAgOTg6XFx0fTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X2xpbWl0X3BvbGljeVtPVlNfQ1RfTElNSVRfQVRUUl9NQVggKyAxXSA9IHtcXG4gMTAxOlxcdFxcdFtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVELCB9LFxcbiAxMDI6XFx0fTtcXG4gMTAzOlxcdCNlbmRpZlxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRzdGF0aWMgYm9vbCBsYWJlbHNfbm9uemVybyhjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjMwLjEyMjg2NTk1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzIwNzQ5ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFNldHVwKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIEkgbG9va2VkIGF0IGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBkZWZhdWx0X2xpbWl0YCAoYSBgdTMyYCksIGEgaGFzaCBsaXN0IChgbGltaXRzYCksIGFuZCBzb21lIGNvbm5lY3Rpb24gY291bnQgZGF0YSAoYGRhdGFgKS4gVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBzZWVtcyBjbGVhbi4gSXQgYWxsb2NhdGVzIHRoZSBgb3ZzX2N0X2xpbWl0X2luZm9gIHN0cnVjdHVyZSwgc2V0cyB0aGUgYGRlZmF1bHRfbGltaXRgIHRvIGEgZGVmYXVsdCB2YWx1ZSwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgYGxpbWl0c2AgaGFzaCBsaXN0LCBhbmQgdGhlbiBpbml0aWFsaXplcyB0aGUgY29ubmVjdGlvbiBjb3VudCBkYXRhLiBBbGwgZmllbGRzIHNlZW0gZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gbm8gb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgZnVuY3Rpb24gaXMgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAuIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBzZXR0aW5nIGxpbWl0cyBmb3Igc3BlY2lmaWMgem9uZXMuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYSBzZXJpZXMgb2YgYHN0cnVjdCBvdnNfem9uZV9saW1pdGAgZW50cmllcy4gSWYgdGhlIHpvbmUgSUQgaXMgdGhlIGRlZmF1bHQsIGl0IHVwZGF0ZXMgYGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdGAuIElmIGl0J3MgYSBzcGVjaWZpYyB6b25lLCB3ZSBhbGxvY2F0ZSBhIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0YCB1c2luZyBga21hbGxvY2AuXG5cbkhlcmUncyB0aGUgY3JpdGljYWwgYml0OiBXaXRoaW4gdGhlIHNwZWNpZmljIHpvbmUgaGFuZGxpbmcsIGBjdF9saW1pdC1cdTAwM2V6b25lYCBhbmQgYGN0X2xpbWl0LVx1MDAzZWxpbWl0YCBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZC4gSG93ZXZlciwgSSdtIGltbWVkaWF0ZWx5IGNvbmNlcm5lZCBhYm91dCBgY3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZWAgYW5kIGBjdF9saW1pdC1cdTAwM2VyY3VgLiBUaGVzZSBhcmUgbWVtYmVycyBvZiB0aGUgYGN0X2xpbWl0YCBzdHJ1Y3QsIGFuZCB0aGV5IGRvbid0IHNlZW0gdG8gYmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiBgY3RfbGltaXRfc2V0YCBpcyBjYWxsZWQuIEl0J3MgbGlrZWx5IGBjdF9saW1pdF9zZXRgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlbSwgYnV0IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyBpcyB3aGVyZSBhIHBvdGVudGlhbCBtZW1vcnkgZXhwb3N1cmUgbWlnaHQgZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MzguODQzNjE5MzM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODc4OlxcdC8qIENhbGwgd2l0aCBvdnNfbXV0ZXggKi9cXG4gODc5OlxcdHN0YXRpYyB2b2lkIGN0X2xpbWl0X3NldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxuIDg4MDpcXHRcXHRcXHRcXHQgc3RydWN0IG92c19jdF9saW1pdCAqbmV3X2N0X2xpbWl0KVxcbiA4ODE6XFx0e1xcbiA4ODI6XFx0XFx0c3RydWN0IG92c19jdF9saW1pdCAqY3RfbGltaXQ7XFxuIDg4MzpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0aGVhZCA9IGN0X2xpbWl0X2hhc2hfYnVja2V0KGluZm8sIG5ld19jdF9saW1pdC1cXHUwMDNlem9uZSk7XFxuIDg4NjpcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUsXFxuIDg4NzpcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSkge1xcbiA4ODg6XFx0XFx0XFx0aWYgKGN0X2xpbWl0LVxcdTAwM2V6b25lID09IG5ld19jdF9saW1pdC1cXHUwMDNlem9uZSkge1xcbiA4ODk6XFx0XFx0XFx0XFx0aGxpc3RfcmVwbGFjZV9yY3UoXFx1MDAyNmN0X2xpbWl0LVxcdTAwM2VobGlzdF9ub2RlLFxcbiA4OTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV3X2N0X2xpbWl0LVxcdTAwM2VobGlzdF9ub2RlKTtcXG4gODkxOlxcdFxcdFxcdFxcdGtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTtcXG4gODkyOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH1cXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZuZXdfY3RfbGltaXQtXFx1MDAzZWhsaXN0X25vZGUsIGhlYWQpO1xcbiA4OTc6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTozOC44NDM3MzY2NThaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNjcwMjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkNVIFBhdGNoIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBobGlzdF9yZXBsYWNlX3JjdWAgYW5kIGBobGlzdF9hZGRfaGVhZF9yY3VgIGFyZSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGBuZXdfY3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGRhdGEgc3RydWN0dXJlLiBUaGUgYHJjdWAgZmllbGQgaGVyZSBpcyBvbmx5IHJlbGV2YW50IHdoZW4gd2UncmUgZnJlZWluZyB0aGUgbWVtb3J5IHVzaW5nIGBrZnJlZV9yY3VgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZSBgY3RfbGltaXRgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIFJDVSBwcm90ZWN0aW9uIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCwgYW5kIHRoaXMgcmluZ3MgYSBiZWxsLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHNvbHZlIGEgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXMgYmVpbmcgdG9ybiBkb3duLiBUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgYSBcInN5ei1jbHVzdGVyXCIgZml4LCBzbyBpdCBzZWVtcyBsaWtlIHRoaXMgd2FzIGZvdW5kIGJ5IGEgZnV6emVyLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSwgYnV0IHRoZSBpbnRlbnRpb24gaXMgY2xlYXI6IHByb3RlY3QgYGN0X2xpbWl0X2luZm9gIHdpdGggUkNVLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCB3YXMgYWNjZXNzZWQgZGlyZWN0bHkuIER1cmluZyBgb3ZzX2V4aXRfbmV0YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgb3ZzX2N0X2V4aXRgLCBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCB3YXMgZnJlZWQuIEhvd2V2ZXIsIHRoZXJlIHdlcmUgY29uY3VycmVudCByZWFkZXJzLCBsaWtlIGBvdnNfY3RfY2hlY2tfbGltaXRgIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCB3aGljaCBjb3VsZCBhY2Nlc3MgdGhlIG5vdy1mcmVlZCBtZW1vcnksIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBtaXRpZ2F0ZXMgdGhhdCByaXNrIGJ5IHVzaW5nIFJDVSBtZWNoYW5pc21zLlxuXG5Ob3csIGEga2V5IGNvbmNlcm46IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzPyBBZnRlciBhIHF1aWNrIGxvb2ssIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBtb2RpZmllcyBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIHRvIGhvbGQgYHJjdV9yZWFkX2xvY2soKWAgYW5kIHVzZSBgcmN1X2RlcmVmZXJlbmNlKClgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC4gVGhlIGRhdGEgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgaXMgYHpvbmVfbGltaXRgLCB3aGljaCwgZnJvbSB3aGF0IEkga25vdywgY29tZXMgZnJvbSBgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTo0NS43NTA0NDE4MjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzc1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzc1OlxcdFxcdFxcdC56b25lX2lkID0gT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FLFxcbjE3NzY6XFx0XFx0XFx0LmxpbWl0ICAgPSBpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0LFxcbjE3Nzc6XFx0XFx0fTtcXG4xNzc4OlxcdFxcbjE3Nzk6XFx0XFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbjE3ODA6XFx0fVxcbjE3ODE6XFx0XFxuMTc4MjpcXHRzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4xNzgzOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubmNvdW50X2RhdGEgKmRhdGEsXFxuMTc4NDpcXHRcXHRcXHRcXHRcXHRcXHQgdTE2IHpvbmVfaWQsIHUzMiBsaW1pdCxcXG4xNzg1OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXFxuMTc4NjpcXHR7XFxuMTc4NzpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcXG4xNzg4OlxcdFxcdHN0cnVjdCBvdnNfem9uZV9saW1pdCB6b25lX2xpbWl0O1xcbjE3ODk6XFx0XFx0dTMyIGNvbm5jb3VudF9rZXkgPSB6b25lX2lkO1xcbjE3OTA6XFx0XFxuMTc5MTpcXHRcXHR6b25lX2xpbWl0LnpvbmVfaWQgPSB6b25lX2lkO1xcbjE3OTI6XFx0XFx0em9uZV9saW1pdC5saW1pdCA9IGxpbWl0O1xcbjE3OTM6XFx0XFx0bmZfY3Rfem9uZV9pbml0KFxcdTAwMjZjdF96b25lLCB6b25lX2lkLCBORl9DVF9ERUZBVUxUX1pPTkVfRElSLCAwKTtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0em9uZV9saW1pdC5jb3VudCA9IG5mX2Nvbm5jb3VudF9jb3VudF9za2IobmV0LCBOVUxMLCAwLCBkYXRhLFxcbjE3OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y29ubmNvdW50X2tleSk7XFxuMTc5NzpcXHRcXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcXHUwMDI2em9uZV9saW1pdCk7XFxuMTc5ODpcXHR9XFxuMTc5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NDUuNzUwNTU5ODI3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzE2OTAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBab25lIExpbWl0IFN0cnVjdCoqXG5cbk9rYXksIHNvIGB6b25lX2xpbWl0YCBpcyBkZWZpbmVkIGFzIGEgYHN0cnVjdCBvdnNfem9uZV9saW1pdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdmVyaWZ5IGl0cyBkZWZpbml0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgbWVudGFsIGNoZWNrbGlzdCBvZiB3aGF0IEkgZXhwZWN0IHRvIGZpbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlOiBsaWtlbHkgbGltaXRzIG9uIHRoaW5ncyBsaWtlIFZMQU4gSURzLCB0dW5uZWxpbmcgcHJvdG9jb2xzLCBvciBvdGhlciB6b25lLXNwZWNpZmljIHBhcmFtZXRlcnMgcmVsZXZhbnQgdG8gdGhlIE9wZW4gdlN3aXRjaCBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXRhaWxzIHRvIGNvbnRpbnVlIHdpdGggd2hhdGV2ZXIgYW5hbHlzaXMgSSdtIGRvaW5nLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhhdCBkZWZpbml0aW9uIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NDguNzIyMjUzNTU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA2NjIyODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBvdnNfem9uZV9saW1pdCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaD0xMTc4PWVudW0gb3ZzX2N0X2xpbWl0X2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaDoxMTg4OnN0cnVjdCBvdnNfem9uZV9saW1pdCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4OS1cXHRpbnQgem9uZV9pZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NTEuMTI4OTAwNjMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDIwODYxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBvdnNfem9uZV9saW1pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgIGRlZmluaXRpb24uIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyB0aGlzIHN0cnVjdHVyZSBoYXMgZm9yIHRyYWZmaWMgY2xhc3NpZmljYXRpb24gYW5kIHBvbGljaW5nIHdpdGhpbiBPcGVuIHZTd2l0Y2guIFRoaXMgcHJvYmFibHkgaG9sZHMgdGhlIGtleSB0byBob3cgem9uZS1iYXNlZCBsaW1pdGF0aW9ucyBhcmUgZW5mb3JjZWQsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBtZW1iZXJzIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgZmxvdyBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgZGVmaW5lIHRoZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIG9mIHRoZXNlIHpvbmVzLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBsaW1pdHMgYXJlIGltcGxlbWVudGVkIGluIGhhcmR3YXJlLiBBcmUgdGhlIGxpbWl0cyBwZXItZmxvdywgcGVyLXpvbmUsIG9yIHNvbWUgY29tYmluYXRpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDU3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NTQuNjcwOTg5NTk1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExODgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExODg6XFx0c3RydWN0IG92c196b25lX2xpbWl0IHtcXG4xMTg5OlxcdFxcdGludCB6b25lX2lkO1xcbjExOTA6XFx0XFx0X191MzIgbGltaXQ7XFxuMTE5MTpcXHRcXHRfX3UzMiBjb3VudDtcXG4xMTkyOlxcdH07XFxuMTE5MzpcXHRcXG4xMTk0OlxcdGVudW0gb3ZzX2RlY190dGxfYXR0ciB7XFxuMTE5NTpcXHRcXHRPVlNfREVDX1RUTF9BVFRSX1VOU1BFQyxcXG4xMTk2OlxcdFxcdE9WU19ERUNfVFRMX0FUVFJfQUNUSU9OLFxcdC8qIE5lc3RlZCBzdHJ1Y3QgbmxhdHRyICovXFxuMTE5NzpcXHRcXHRfX09WU19ERUNfVFRMX0FUVFJfTUFYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjU0LjY3MTA4NzUxNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTczNTIzODE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIGluIE9WUy4gSSd2ZSBleGFtaW5lZCB0aGUgYHN0cnVjdCBvdnNfem9uZV9saW1pdGA7IGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCB3aXRoIGFsbCBmaWVsZHMgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlJ3Mgbm8gaW5oZXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgc3RydWN0dXJlIGxldmVsLiBUaGUgc3RydWN0IGl0c2VsZiBpcyAxMiBieXRlcyB0b3RhbCwgbm8gcGFkZGluZy5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgdGhlIGBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIGZpZWxkcyBvZiB0aGUgYHpvbmVfbGltaXRgIHN0cnVjdCBiZWZvcmUgdXNlLiBJbXBvcnRhbnRseSwgdGhlIGNhbGxlciBub3cgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbi4gVGhlIGNvZGUgaGFzIGJlZW4gY2hhbmdlZCB0byBiZSBSQ1Utc2FmZSB0aHJvdWdoIHRoZSBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAgdG8gcmVhZCB0aGUgZGF0YSBjb3JyZWN0bHkuXG5cblRoZSBtYWluIGNoYW5nZXMsIGFzIEkgc2VlIHRoZW0sIGFyZSByZWZhY3RvcmluZyBpbiBgb3ZzX2N0X2xpbWl0X2luaXRgIHRvIHVzZSBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBhc3NpZ25lZCB1c2luZyBgcmN1X2Fzc2lnbl9wb2ludGVyYC4gVGhpcyBpcyBnb29kIHByYWN0aWNlLiBBbHNvLCB0aGUgZXhpdCBmdW5jdGlvbiAoYG92c19jdF9saW1pdF9leGl0YCkgaGFzIGJlZW4gc3BsaXQgaW50byB0d28gcGFydHM7IHRoZSBmaXJzdCBwYXJ0IHVzZXMgYHJjdV9yZXBsYWNlX3BvaW50ZXJgIGFuZCB0aGUgc2Vjb25kIHBhcnQgdXNlcyBgc3luY2hyb25pemVfcmN1YCB0byB3YWl0IGZvciBSQ1UgcmVhZGVycyB0byBmaW5pc2guIFRoaXMgaXMgdG8gYXZvaWQgaG9sZGluZyB0aGUgYG92c19tdXRleGAgZHVyaW5nIFJDVSBzeW5jaHJvbml6YXRpb24uXG5cbkdpdmVuIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGUgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGVsaW1pbmF0ZSBhIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbi4gU3VjaCBidWdzIGFyZSByb3V0aW5lbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIEkgYmVsaWV2ZSB0aGF0IE5lZWRzS01TQU4gc2hvdWxkIGJlIHNldCB0byBmYWxzZS4gVGhpcyBwYXRjaCBpcyBhIHNvbGlkLCBmb2N1c2VkIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MjYsIk91dHB1dFRva2VucyI6MjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjQwOjA2LjQwNjMzMzc0NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 03:36:16 +0000 UTC FinishedAt: 2026-08-17 03:40:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "2dfafd98-7012-4b7a-bf96-bcdbb70c00c2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_execute", "ovs_ct_exit_start", "ovs_ct_exit_finish", "ovs_exit_net" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfc3RhcnQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfZmluaXNoJiMzNDssCiAgICAmIzM0O292c19leGl0X25ldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGhhbmRsaW5nLCBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gIGFuZCBzcGxpdHRpbmcgdGhlIG5ldG5zIGV4aXQgcm91dGluZSB0byBhdm9pZCBob2xkaW5nIGBvdnNfbXV0ZXhgIGR1cmluZyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgY29ubnRyYWNrIGxpbWl0IGNoZWNraW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTIwMmQ3MzFiNmRiNjlkNmQ0OThkYmFlNGY0OWU2OGU3OWJlZDI1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjM4OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDU0IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiYjNDM7c3RhdGljIHZvaWQgKm92c19jdF9saW1pdF9leGl0X3N0YXJ0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aWYgKCFpbmZvKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgJiM0MzsxNjgzLDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4mIzQzO1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgJiM0MzsxNjk4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE2OTUsNiAmIzQzOzE3MTUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbiYjNDM7XHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3MDksMTIgJiM0MzsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4mIzQzO1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNzMwLDYgJiM0MzsxNzUzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgJiM0MzsxNzk3LDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcdTAwMjZ6b25lX2xpbWl0KTtcbiB9XG4gXG4mIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuQEAgLTE3OTYsMTIgJiM0MzsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZVwmIzM0Oyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xuIFxuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdFx0bmV0LCBpbmZvLVx1MDAzZWRhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbkBAIC0xODE2LDYgJiM0MzsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG5AQCAtMTgyOCwxOSAmIzQzOzE4NTIsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XG4gXHRcdFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRjdF9saW1pdC1cdTAwM2V6b25lLCBjdF9saW1pdC1cdTAwM2VsaW1pdCwgcmVwbHkpO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGV4aXRfZXJyO1xuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbiBcbi1leGl0X2Vycjpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTg1MCw3ICYjNDM7MTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICYjNDM7MTg4Myw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxuJiM0MztcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICYjNDM7MTkwNCw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5Nyw4ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuJiM0MztcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTkxOCw3ICYjNDM7MTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggJiM0MzsxOTUxLDE5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTYsMTIgJiM0MzsyMDM2LDI3IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gI2VuZGlmXG4gfVxuIFxuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgUkNVLXByb3RlY3RlZCBjdF9saW1pdF9pbmZvXG4mIzQzOyAqIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgZm9yIG92c19jdF9leGl0X2ZpbmlzaCgpIHRvIGNvbXBsZXRlIHRlYXJkb3duXG4mIzQzOyAqIGFmdGVyIHRoZSBtdXRleCBpcyByZWxlYXNlZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgKm92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbiYjNDM7e1xuJiM0MzsjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4mIzQzO1x0cmV0dXJuIG92c19jdF9saW1pdF9leGl0X3N0YXJ0KG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTXVzdCBiZSBjYWxsZWQgd2l0aG91dCBvdnNfbXV0ZXggaGVsZC4gIEBkYXRhIG11c3QgYmUgdGhlIG9wYXF1ZSBwb2ludGVyXG4mIzQzOyAqIHJldHVybmVkIGJ5IG92c19jdF9leGl0X3N0YXJ0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4mIzQzO1x0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XG4gI2VuZGlmXG4gXG4gXHRpZiAob3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbmluZGV4IDMxN2U1MjVjOGExMTMuLjIzNjNjZTU2ZDdlY2MgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuQEAgLTE0LDcgJiM0MzsxNCw4IEBAIGVudW0gb3ZzX2tleV9hdHRyO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xuJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpO1xuJiM0Mzt2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpO1xuIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpO1xuIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKixcbkBAIC00MCw3ICYjNDM7NDEsOCBAQCB2b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yNzU4LDE1ICYjNDM7Mjc1OCwxNiBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCxcbiBcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxuIHtcbi1cdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhkbmV0LCBvdnNfbmV0X2lkKTtcbiBcdHN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0O1xuJiM0MztcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuJiM0MztcdHZvaWQgKmN0X2V4aXRfZGF0YTtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdExJU1RfSEVBRChoZWFkKTtcbiBcbiBcdG92c19sb2NrKCk7XG4gXG4tXHRvdnNfY3RfZXhpdChkbmV0KTtcbiYjNDM7XHRjdF9leGl0X2RhdGEgPSBvdnNfY3RfZXhpdF9zdGFydChkbmV0KTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgZHBfbmV4dCwgXHUwMDI2b3ZzX25ldC1cdTAwM2VkcHMsIGxpc3Rfbm9kZSlcbiBcdFx0X19kcF9kZXN0cm95KGRwKTtcbkBAIC0yNzg0LDYgJiM0MzsyNzg1LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiBcbiBcdG92c191bmxvY2soKTtcbiBcbiYjNDM7XHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgY3RfZXhpdF9kYXRhKTtcbiYjNDM7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2b3ZzX25ldC1cdTAwM2VtYXNrc19yZWJhbGFuY2UpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZvdnNfbmV0LVx1MDAzZWRwX25vdGlmeV93b3JrKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uMDZjNjk1NmZiMWRjNCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE2NCw3ICYjNDM7MTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcbiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC5cbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXG4tICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy5cbiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuJiM0MzsgKiBieSBSQ1U7IHVwZGF0ZXMgYW5kIHRlYXJkb3duIGFyZSBzZXJpYWxpemVkIGJ5IG92c19tdXRleC4gTWF5IGJlIE5VTEwgZHVyaW5nXG4mIzQzOyAqIG5ldG5zIHRlYXJkb3duLlxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXG4gICovXG4gc3RydWN0IG92c19uZXQge1xuQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9zdGFydCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9maW5pc2gmIzM0OywKICAgICYjMzQ7b3ZzX2V4aXRfbmV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AgYW5kIHNwbGl0dGluZyB0aGUgbmV0bnMgZXhpdCByb3V0aW5lIHRvIGF2b2lkIGhvbGRpbmcgYG92c19tdXRleGAgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBjb25udHJhY2sgbGltaXQgY2hlY2tpbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mzg6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw1NCBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKJiM0MztzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJcmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhOwogCWludCBpOwogCiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsKIAluZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tJmd0O2RhdGEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CkBAIC0xNjY1LDEyICYjNDM7MTY4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTY3OSw2ICYjNDM7MTY5OCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNjk1LDYgJiM0MzsxNzE1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3MDksMTIgJiM0MzsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNzIzLDYgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE3MzAsNiAmIzQzOzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTc3Myw2ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksICZhbXA7em9uZV9saW1pdCk7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCkBAIC0xNzk2LDEyICYjNDM7MTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQkJJmFtcDt6b25lKSkpIHsKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewotCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7CiAKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJCW5ldCwgaW5mby0mZ3Q7ZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xODE2LDYgJiM0MzsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiAwOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpCkBAIC0xODI4LDE5ICYjNDM7MTg1MiwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHsKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby0mZ3Q7ZGF0YSwKIAkJCQljdF9saW1pdC0mZ3Q7em9uZSwgY3RfbGltaXQtJmd0O2xpbWl0LCByZXBseSk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKLWV4aXRfZXJyOgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NTAsNyAmIzQzOzE4NzEsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCwKQEAgLTE4NjMsOCAmIzQzOzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xODg0LDcgJiM0MzsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsCkBAIC0xODk3LDggJiM0MzsxOTE2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTkxOCw3ICYjNDM7MTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsCkBAIC0xOTMyLDE4ICYjNDM7MTk1MSwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQluZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sCiAJCQlyZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0gZWxzZSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLAogCQkJCQkJICAgICAgcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2VycjsKIAogCW5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTsKIAlnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7CkBAIC0yMDE2LDEyICYjNDM7MjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogI2VuZGlmCiB9CiAKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQomIzQzOy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyBSQ1UtcHJvdGVjdGVkIGN0X2xpbWl0X2luZm8KJiM0MzsgKiBhbmQgcmV0dXJucyBhbiBvcGFxdWUgaGFuZGxlIGZvciBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0ZWFyZG93bgomIzQzOyAqIGFmdGVyIHRoZSBtdXRleCBpcyByZWxlYXNlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOyNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQomIzQzOwlyZXR1cm4gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQobmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IG92c19tdXRleCBoZWxkLiAgQGRhdGEgbXVzdCBiZSB0aGUgb3BhcXVlIHBvaW50ZXIKJiM0MzsgKiByZXR1cm5lZCBieSBvdnNfY3RfZXhpdF9zdGFydCgpLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCW92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CW92c19jdF9saW1pdF9leGl0X2ZpbmlzaChuZXQsIGRhdGEpOwogI2VuZGlmCiAKIAlpZiAob3ZzX25ldC0mZ3Q7eHRfbGFiZWwpCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKaW5kZXggMzE3ZTUyNWM4YTExMy4uMjM2M2NlNTZkN2VjYyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaApAQCAtMTQsNyAmIzQzOzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTsKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTsKJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7CiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTsKIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKiwKQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpOwogCiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yNzU4LDE1ICYjNDM7Mjc1OCwxNiBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCwKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIHsKLQlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpOwogCXN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0OwomIzQzOwlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKJiM0MzsJdm9pZCAqY3RfZXhpdF9kYXRhOwogCXN0cnVjdCBuZXQgKm5ldDsKIAlMSVNUX0hFQUQoaGVhZCk7CiAKIAlvdnNfbG9jaygpOwogCi0Jb3ZzX2N0X2V4aXQoZG5ldCk7CiYjNDM7CWN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCAmYW1wO292c19uZXQtJmd0O2RwcywgbGlzdF9ub2RlKQogCQlfX2RwX2Rlc3Ryb3koZHApOwpAQCAtMjc4NCw2ICYjNDM7Mjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiAKIAlvdnNfdW5sb2NrKCk7CiAKJiM0MzsJb3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIGN0X2V4aXRfZGF0YSk7CiYjNDM7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7bWFza3NfcmViYWxhbmNlKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7ZHBfbm90aWZ5X3dvcmspOwogfQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAppbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaApAQCAtMTY0LDcgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuCiAgKi8KIHN0cnVjdCBvdnNfbmV0IHsKQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgT3BlbiB2U3dpdGNoIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF04oCZcyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGluIE9wZW4gdlN3aXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGNvbm50cmFjay5jYCwgYGNvbm50cmFjay5oYCwgYGRhdGFwYXRoLmNgLCBhbmQgYGRhdGFwYXRoLmhgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBvZiB0aGUgY2hhbmdlIGlzIGFyb3VuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgYGN0X2xpbWl0X2luZm9gLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgYW5kIHRoZXkmIzM5O3JlIHNwbGl0dGluZyB0aGUgZXhpdCBmdW5jdGlvbiB0byBhdm9pZCBibG9ja2luZyBvbiBgc3luY2hyb25pemVfcmN1KClgIHdoaWxlIGhvbGRpbmcgYG92c19tdXRleGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZyBmaXgsIHNvIHRoaXMgcGF0Y2ggaXMgYWxyZWFkeSBkcmF3aW5nIG15IGF0dGVudGlvbi4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IFdlbGwsIE9wZW4gdlN3aXRjaCBpdHNlbGYgaXMgZGVmaW5pdGVseSByZWFjaGFibGUg4oCTIHRoYXQmIzM5O3MgYSBuby1icmFpbmVyLiBOb3csIGFyZSB0aGVzZSAqc3BlY2lmaWMqIG1vZGlmaWNhdGlvbnMgd29ydGggdGhlIGVmZm9ydD8gVGhleSBzZWVtIHRvIGJlIGZvY3VzZWQgb24gc2V0dGluZywgZ2V0dGluZywgYW5kIGRlbGV0aW5nIGNvbm50cmFjayBsaW1pdHMsIGFuZCBjcnVjaWFsbHksIG5ldG5zIGV4aXQuIENvbm50cmFjayBsaW1pdGF0aW9ucyBhcmUgYSBrZXkgY29udHJvbCBwYXRoIGluIGFueSBkYXRhLXBsYW5lIGltcGxlbWVudGF0aW9uLCBhbmQgcHJvYmxlbXMgd2l0aCBuZXRucyBleGl0IGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBzdGF0ZSBjb3JydXB0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggbXkgdGltZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZXhwZWN0aW5nIGBDT05GSUdfT1BFTlZTV0lUQ0hgLCBvZiBjb3Vyc2UuIFRoZW4gYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGJlY2F1c2UgaXQmIzM5O3MgT1ZTIGNvbm50cmFjaywgdGhhdCBpbXBsaWVzIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBhcyB3ZWxsLgoKVGltZSB0byBzZWFyY2ggZm9yIHRoZXNlIGNvbmZpZ3MuLi4gb2theSwgc28gYENPTkZJR19PUEVOVlNXSVRDSGAgaXMgdGhlcmUsIGFsb25nIHdpdGggYENPTkZJR19PUEVOVlNXSVRDSF9HRU5FVkVgLCBhbmQgc28gb24uIE5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGlzIGNvdWxkIGxlYWQgdG8gc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBSQ1UsIG11dGV4ZXMsIGFuZCBuZXRucyBleGl0IHdpdGhpbiB0aGUgY29ubnRyYWNrIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldHMgYW5kIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBmdW5jdGlvbnM6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSB0aGVzZSBhcyByaXBlIHRhcmdldHMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZWlyIG5hbWVzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPVlMgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIGV4cGVjdGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBsaW1pdCBtYW5hZ2VtZW50LCBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZXNlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnB1dCBzdHJ1Y3R1cmVzIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gZWFjaC4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZnV6emluZywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIHBhdGNoIG1lbnRpb25zIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgYWN0dWFsbHkgZW5hYmxlZCBpbiBteSB0ZXN0IGVudmlyb25tZW50LiBBbnkgZnV6emluZyBlZmZvcnQgd2lsbCBiZSB1c2VsZXNzIGlmIHRoZXNlIGFyZW4mIzM5O3QgcHJvcGVybHkgY29uZmlndXJlZC4gSSYjMzk7bGwgdmVyaWZ5IHRob3NlIHNldHRpbmdzIGZpcnN0LiBUaGF0JiMzOTtzIHRoZSBwcmlvcml0eSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTItXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25uZWN0aW9uIHRyYWNraW5nIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIE5ldGZpbHRlci4gSSBzZWUgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgZGVmaW5lZCBhcyB0cmlzdGF0ZXMuIFRoaXMgc3VnZ2VzdHMgdGhleSBjYW4gYmUgY29tcGlsZWQgYXMgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBkaXNhYmxlZCBlbnRpcmVseS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzLCBsaWtlIGBvdnNfY3RfbGltaXRfY21kX3NldGAgYW5kIG90aGVycyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgdXNpbmcgYW5kIHBvdGVudGlhbGx5IGxpbWl0aW5nIGNvbm5lY3Rpb24gY291bnRzIGFuZCB0aGUgcmVsYXRlZCBpbXBsZW1lbnRhdGlvbiBkZWNpc2lvbnMsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQzPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjctXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2ODpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2OS17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTgyLVx0XHRcdFx0XHQgICAgICAgKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTgzOlx0XHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgRnVuY3Rpb25zIGZvciBTeW1ib2wgTGlzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVzIHRvIGxpc3QgYXMgZm9jdXMgc3ltYm9scy4gVGhlIHByb21wdCBpcyBkaXJlY3RpbmcgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHRoaW5nIGlzLCB3aGlsZSBmdW5jdGlvbnMgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGFyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIHJlZ2lzdGVyZWQgdmlhIGBnZW5sX3NtYWxsX29wc2AsIGFuZCB0aGVpciBhZGRyZXNzZXMgKmFyZSogdGFrZW4sIHNvIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGdyZXkgYXJlYSB3aGV0aGVyIHRvIGxpc3Qgc29tZXRoaW5nIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCBvciBmb2N1cyBvbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBlbnRyeSBwb2ludCBpbnN0ZWFkLCBnaXZlbiB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHdoaWNoIGZ1bmN0aW9ucyB0byBsaXN0LiBMZXQmIzM5O3Mgc2VlLi4uIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIGFyZSBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGluIHRoZSBydW5uaW5nLiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgaG93ZXZlciwgaXMgc3RhdGljLCBzbyB3ZSBjYW4gcHJvYmFibHkgZGlzY291bnQgdGhhdCBvbmUuIGBvdnNfY3RfaW5pdGAgaXMgYWxzbyBub24tc3RhdGljLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgZXhwb3J0ZWQuIE5vcGUsIGl0JiMzOTtzIHN0YXRpYy4gSG1tLi4uIGNhbiB3ZSB1c2UgYSBub24tc3RhdGljIGZ1bmN0aW9uPyBBaCEgYG92c19jdF9leGVjdXRlYCBpcyBub24tc3RhdGljIGFzIHdlbGwuCgpTbyB3ZSBoYXZlIGBvdnNfY3RfZXhpdF9zdGFydGAsIGBvdnNfY3RfZXhpdF9maW5pc2hgLCBhbmQgYG92c19jdF9leGVjdXRlYCBhcyBub24tc3RhdGljIGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBmaWxlIGFnYWluIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgb3ZzX2N0XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjgzPXZvaWQgb3ZzX2N0X2ZpbGxfa2V5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTI4OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoyOTA6aW50IG92c19jdF9wdXRfa2V5KGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqc3drZXksXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjkxLVx0XHQgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKm91dHB1dCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQyLVx0XHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA3OS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDgwOmludCBvdnNfY3RfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA4MS17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTEzNjU9Ym9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTM4NC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMzg1OmludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEzODYtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTQ1Mj1zdGF0aWMgYm9vbCBvdnNfY3RfbmF0X3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTUxOC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTE5OmludCBvdnNfY3RfYWN0aW9uX3RvX2F0dHIoY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTIwLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAwMz1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDE5LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMjA6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0bGluayBDYWxsYmFja3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGdlbmVyaWMgbmV0bGluayBjYWxsYmFja3MuIFRoZXkmIzM5O3JlIHN0YXRpYywgd2hpY2ggaXMgc3RhbmRhcmQgZW5vdWdoLCBidXQgdGhleSYjMzk7cmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseWAgbmV0bGluayBmYW1pbHkuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgaW5jbHVkZWQgdGhlIGNvcnJlY3QgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBhbmQgYG92c19jdF9leGl0X3N0YXJ0YCwgYG92c19jdF9leGl0X2ZpbmlzaGAuCgpIYW5nIG9uIGEgc2Vjb25kLCB0aGUgZ3VpZGFuY2UgaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXJzLiBCdXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCAqaXNuJiMzOTt0KiBhbiBpbnRlcm5hbCBoZWxwZXI7IGl0JiMzOTtzIGEgZGlyZWN0IG5ldGxpbmsgY2FsbGJhY2suIFNvLCBpbmNsdWRpbmcgaXQgaXMgcGVyZmVjdGx5IGFjY2VwdGFibGUsIGV2ZW4gcHJlZmVycmVkIGluIHRoaXMgY29udGV4dC4gRXhjZWxsZW50LCB0aGF0IGNsYXJpZmllcyB0aGluZ3MuCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgYG92c19jdF9jaGVja19saW1pdGAuIEkgcmVtZW1iZXIgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG92c19jdF9jb21taXRgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHJvY2Vzcy4gTWFraW5nIHN1cmUgdGhvc2UgYXJlIGFsaWduZWQgaXMgYSBrZXkgcGFydCBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzAtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05ODAtXHRcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjk4MTpcdFx0XHRlcnIgPSBvdnNfY3RfY2hlY2tfbGltaXQobmV0LCBza2IsIGluZm8pO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cdFx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYG92c19jdF9jb21taXRgIGFuZCBgb3ZzX2N0X2V4ZWN1dGVgKioKCk9rYXksIHNvIEkgc2VlIGBvdnNfY3RfY29tbWl0YCBpcyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2V4ZWN1dGVgLiBUaGF0IG1ha2VzIGBvdnNfY3RfZXhlY3V0ZWAgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tbWl0bWVudCBwcm9jZXNzIGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGl0cyBmdW5jdGlvbmFsaXR5IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCkFuZCBhcyBhIGZvbGxvdyB1cCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGV4aXQgY2FsbHMgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBob3cgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgZml0IGludG8gdGhlIHBpY3R1cmUuIEFoLCB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgb3ZzX2V4aXRfbmV0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGF0IGdpdmVzIG1lIGFub3RoZXIgYXJlYSB0byBleHBsb3JlIHJlbGF0ZWQgdG8gaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgZmxvd3MgYXJlIGhhbmRsZWQgd2hlbiB0aGV5IGV4aXQgdGhlIG5ldGZpbHRlciBob29rcy4gSSBleHBlY3QgYG92c19leGl0X25ldGAgbGlrZWx5IGhhbmRsZXMgdGhlIGZpbmFsIHN0ZXBzIG9yIGNsZWFudXAgYWZ0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2V4aXRfbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjczNj1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzU4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjc1OTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc2MC17XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9Mjc5ND1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG92c19uZXRfb3BzID0ge1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc5NS1cdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjc5NjpcdC5leGl0ID0gb3ZzX2V4aXRfbmV0LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc5Ny1cdC5pZCAgID0gXHUwMDI2b3ZzX25ldF9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBPVlMvTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBvdnNfZXhpdF9uZXRgLCB0aGF0JiMzOTtzIHRoZSBuZXRucyBleGl0IGNhbGxiYWNrLCByaWdodD8gR290IGl0LiBOb3csIHRpbWUgdG8gbWFrZSBzdXJlIHRoaXMgd2hvbGUgc2V0dXAgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoZSBtYWluIGNvbmZpZ3MgSSBuZWVkIGVuYWJsZWQgYXJlIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBJJiMzOTt2ZSB1c2VkIHRoZXNlIGJlZm9yZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEp1c3QgYSBxdWljayBzY2FuIGZvciBhbnkgaGlkZGVuIHJlcXVpcmVtZW50cyBiZWZvcmUgSSBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQga2VybmVsIGludGVybmFsczoKCioqQ29uZGl0aW9uYWwgRGVwZW5kZW5jeSBDb25jZXJucyoqCgpBbHJpZ2h0LCB0aGlzIGNvZGUgYmxvY2sgaXMgbmVzdGVkIHdpdGhpbiBhbiBgaWYgTkZfQ09OTlRSQUNLYCBjb25kaXRpb25hbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgc28gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eSBpcyBjbGVhcmx5IGEgcHJlcmVxdWlzaXRlIGhlcmUuJiMzNDsgVGhpcyBtZWFucyB0aGUgYE5GX0NPTk5UUkFDS2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uICptdXN0KiBiZSBlbmFibGVkIGZvciB0aGlzIHNlY3Rpb24gb2YgY29kZSB0byBldmVuIGJlIHJlbGV2YW50LiBOb3csIHRoYXQgcmFpc2VzIGEgZnVydGhlciBxdWVzdGlvbi4gTXkgdGhvdWdodHMgaW1tZWRpYXRlbHkgdHVybiB0byBob3cgdGhpcyB3b3VsZCB3b3JrIGluIGNvbmNlcnQgd2l0aCBgT1BFTlZTV0lUQ0hgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgTGFuZHNjYXBlOiBPUEVOVlNXSVRDSCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgT1BFTlZTV0lUQ0hgLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkga25vdyB0aGlzIGlzIGxpa2VseSBnb2luZyB0byBpbnZvbHZlIGEgY29tcGxleCB3ZWIgb2YgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcywgYW5kIHBvc3NpYmx5IG90aGVyIHNvZnR3YXJlIHBhY2thZ2VzLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHN5c3RlbWF0aWNhbGx5IGludmVzdGlnYXRlIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0byBhcHByb2FjaCB0aGlzIHdpdGggdGhlIHJpZ291ciByZXF1aXJlZCBieSB0aGlzIGxldmVsIG9mIGFuYWx5c2lzLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02PWNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xubmV0L29wZW52c3dpdGNoL0tjb25maWc6ODpcdGRlcGVuZHMgb24gSU5FVFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6OTpcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctMTAtXHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMi1cdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjEzOlx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xNC1cdHNlbGVjdCBNUExTXG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc9NDQ9Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NjpcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ3Olx0ZGVwZW5kcyBvbiBORVRfSVBHUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ4LVx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTU3PWNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU5Olx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NjA6XHRkZXBlbmRzIG9uIFZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02MS1cdGRlZmF1bHQgT1BFTlZTV0lUQ0hcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02OT1jb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjcxOlx0ZGVwZW5kcyBvbiBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIEdFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzMtXHRkZWZhdWx0IE9QRU5WU1dJVENIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODgwCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIExpbWl0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBwcmV0dHkgbmFzdHkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGluIE9wZW4gdlN3aXRjaCYjMzk7cyBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIEl0JiMzOTtzIGNsZWFyIHRoYXQgT3BlbiB2U3dpdGNoIHJlbGllcyBvbiBgSU5FVGAsIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYE9QRU5WU1dJVENIYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYE5GX0NPTk5UUkFDS2AgYXJlIGFsbCByZWxldmFudCBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfZXhlY3V0ZWAsIGBvdnNfY3RfZXhpdF9zdGFydGAsIGBvdnNfY3RfZXhpdF9maW5pc2hgLCBhbmQgYG92c19leGl0X25ldGAuCgpUaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUgYG92c19jdF9saW1pdF9leGl0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgcHJvYmxlbTogaXQgd2FzIGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCAqd2hpbGUqIGhvbGRpbmcgYG92c19tdXRleGAuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayByZWNpcGUgZm9yIGRlYWRsb2NrcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHNpZ25pZmljYW50IGRlbGF5cy4gVGhlIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IHRoZXkmIzM5O3ZlIHNwbGl0IHRoZSBleGl0IHNlcXVlbmNlIGludG8gdHdvIGZ1bmN0aW9ucywgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAsIHdoaWNoIGlzIGEgZ29vZCBhcmNoaXRlY3R1cmFsIGNob2ljZS4KCkZ1cnRoZXJtb3JlLCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGN0X2xpbWl0X2luZm9gIGlzIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSBmcm9tIG11bHRpcGxlIGNvbnRleHRzIGFuZCB0aGF0IHRoZXkgYXJlIHRyeWluZyB0byBmaXggYSByYWNlIGNvbmRpdGlvbi4gSXQgaXMgYSBnb29kIG1vdmUgdG8gZW5zdXJlIHRoZSBkYXRhIGlzIHNhZmUsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIGNoZWNraW5nIHRoZSBsaW1pdHMgd2l0aCBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4KCkZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBtb2RpZmllcyBob3cgT3BlbiB2U3dpdGNoIGhhbmRsZXMgY29ubnRyYWNrIGxpbWl0cywgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIChzZXR0aW5nLCBnZXR0aW5nLCBkZWxldGluZyBsaW1pdHMpLCBwYWNrZXQgcHJvY2Vzc2luZyB2aWEgY29ubnRyYWNrLCBhbmQgdGhlIGNydWNpYWwgbmV0bnMgdGVhcmRvd24gcHJvY2Vzcy4gVGhpcyBpcyBhYnNvbHV0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHJlYWNoYWJsZSBpbiBhIHZhcmlldHkgb2YgcmVhbC13b3JsZCBzY2VuYXJpb3MsIHNvIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZS4gVGhlcmVmb3JlIEkgYW0gY29uY2x1ZGluZywgdGhpcyBwYXRjaCBpcyAqKldvcnRoRnV6emluZyoqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9zdGFydCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhpdF9maW5pc2gmIzM0OywKICAgICYjMzQ7b3ZzX2V4aXRfbmV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AgYW5kIHNwbGl0dGluZyB0aGUgbmV0bnMgZXhpdCByb3V0aW5lIHRvIGF2b2lkIGhvbGRpbmcgYG92c19tdXRleGAgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBjb25udHJhY2sgbGltaXQgY2hlY2tpbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfc3RhcnQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4aXRfZmluaXNoJiMzNDssCiAgICAmIzM0O292c19leGl0X25ldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGhhbmRsaW5nLCBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gIGFuZCBzcGxpdHRpbmcgdGhlIG5ldG5zIGV4aXQgcm91dGluZSB0byBhdm9pZCBob2xkaW5nIGBvdnNfbXV0ZXhgIGR1cmluZyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgY29ubnRyYWNrIGxpbWl0IGNoZWNraW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mzg6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpOwotCWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKIAl1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zOwogCXUzMiBjb25uY291bnRfa2V5OwogCiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWNvbm5jb3VudF9rZXkgPSBpbmZvLSZndDt6b25lLmlkOwogCiAJcGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby0mZ3Q7em9uZS5pZCk7CkBAIC0xNTg1LDQwICYjNDM7MTU4OSw1NCBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKQogI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKLQlpZiAoIW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pCiYjNDM7CWluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7Ci0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzID0KJiM0MzsJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwomIzQzOwlpbmZvLSZndDtsaW1pdHMgPQogCQlrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpIHsKLQkJa2ZyZWUob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghaW5mby0mZ3Q7bGltaXRzKSB7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspCi0JCUlOSVRfSExJU1RfSEVBRCgmYW1wO292c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0c1tpXSk7CiYjNDM7CQlJTklUX0hMSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtsaW1pdHNbaV0pOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwomIzQzOwlpbmZvLSZndDtkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7CiAKLQlpZiAoSVNfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpKSB7Ci0JCWVyciA9IFBUUl9FUlIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGF0YSk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyk7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKGluZm8tJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGluZm8tJmd0O2RhdGEpOwomIzQzOwkJa2ZyZWUoaW5mby0mZ3Q7bGltaXRzKTsKJiM0MzsJCWtmcmVlKGluZm8pOwogCQlwcl9lcnIoJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXG4mIzM0OywgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCkKJiM0MztzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJcmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgTlVMTCwKJiM0MzsJCQkJICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhOwogCWludCBpOwogCiYjNDM7CWlmICghaW5mbykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsKIAluZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tJmd0O2RhdGEpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7CiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CkBAIC0xNjY1LDEyICYjNDM7MTY4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCi0JCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbykKJiM0MztzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KQogewogCXN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDsKLQlpbnQgcmVtOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJdTE2IHpvbmU7CiYjNDM7CWludCByZW07CiAKIAlyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpOwogCXpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpOwpAQCAtMTY3OSw2ICYjNDM7MTY5OCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiAJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCkBAIC0xNjk1LDYgJiM0MzsxNzE1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0KQEAgLTE3MDksMTIgJiM0MzsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNzIzLDYgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKIAkJCW92c191bmxvY2soKTsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZCgKQEAgLTE3MzAsNiAmIzQzOzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewogCQkJb3ZzX2xvY2soKTsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAkJCWN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTsKIAkJCW92c191bmxvY2soKTsKIAkJfQpAQCAtMTc3Myw2ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksICZhbXA7em9uZV9saW1pdCk7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCkBAIC0xNzk2LDEyICYjNDM7MTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCQkJJmFtcDt6b25lKSkpIHsKIAkJCU9WU19OTEVSUih0cnVlLCAmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlJiMzNDspOwogCQl9IGVsc2UgewotCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJbGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7CiAKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KAogCQkJCW5ldCwgaW5mby0mZ3Q7ZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xODE2LDYgJiM0MzsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiAwOwogfQogCiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqLwogc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpCkBAIC0xODI4LDE5ICYjNDM7MTg1MiwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJaGVhZCA9ICZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHsKIAkJCWVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby0mZ3Q7ZGF0YSwKIAkJCQljdF9saW1pdC0mZ3Q7em9uZSwgY3RfbGltaXQtJmd0O2xpbWl0LCByZXBseSk7CiAJCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKLWV4aXRfZXJyOgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NTAsNyAmIzQzOzE4NzEsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCwKQEAgLTE4NjMsOCAmIzQzOzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xODg0LDcgJiM0MzsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsCkBAIC0xODk3LDggJiM0MzsxOTE2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAotCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAotCQkJCQkgIGN0X2xpbWl0X2luZm8pOwomIzQzOwllcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCwKJiM0MzsJCQkJCSAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2VycjsKIApAQCAtMTkxOCw3ICYjNDM7MTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsCkBAIC0xOTMyLDE4ICYjNDM7MTk1MSwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKIAlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQluZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sCiAJCQlyZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0gZWxzZSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLAogCQkJCQkJICAgICAgcmVwbHkpOwotCQlpZiAoZXJyKQotCQkJZ290byBleGl0X2VycjsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2VycjsKIAogCW5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTsKIAlnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7CkBAIC0yMDE2LDEyICYjNDM7MjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogI2VuZGlmCiB9CiAKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQomIzQzOy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyBSQ1UtcHJvdGVjdGVkIGN0X2xpbWl0X2luZm8KJiM0MzsgKiBhbmQgcmV0dXJucyBhbiBvcGFxdWUgaGFuZGxlIGZvciBvdnNfY3RfZXhpdF9maW5pc2goKSB0byBjb21wbGV0ZSB0ZWFyZG93bgomIzQzOyAqIGFmdGVyIHRoZSBtdXRleCBpcyByZWxlYXNlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOyNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQomIzQzOwlyZXR1cm4gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQobmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IG92c19tdXRleCBoZWxkLiAgQGRhdGEgbXVzdCBiZSB0aGUgb3BhcXVlIHBvaW50ZXIKJiM0MzsgKiByZXR1cm5lZCBieSBvdnNfY3RfZXhpdF9zdGFydCgpLgomIzQzOyAqLwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZCkKIHsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCW92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CW92c19jdF9saW1pdF9leGl0X2ZpbmlzaChuZXQsIGRhdGEpOwogI2VuZGlmCiAKIAlpZiAob3ZzX25ldC0mZ3Q7eHRfbGFiZWwpCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKaW5kZXggMzE3ZTUyNWM4YTExMy4uMjM2M2NlNTZkN2VjYyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaApAQCAtMTQsNyAmIzQzOzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTsKLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTsKJiM0Mzt2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpOwomIzQzO3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7CiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTsKIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKiwKQEAgLTQwLDcgJiM0Mzs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpOwogCiBzdGF0aWMgaW5saW5lIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIDA7IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yNzU4LDE1ICYjNDM7Mjc1OCwxNiBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGxpc3RfdnBvcnRzX2Zyb21fbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqZG5ldCwKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldCkKIHsKLQlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpOwogCXN0cnVjdCB2cG9ydCAqdnBvcnQsICp2cG9ydF9uZXh0OwomIzQzOwlzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDsKJiM0MzsJdm9pZCAqY3RfZXhpdF9kYXRhOwogCXN0cnVjdCBuZXQgKm5ldDsKIAlMSVNUX0hFQUQoaGVhZCk7CiAKIAlvdnNfbG9jaygpOwogCi0Jb3ZzX2N0X2V4aXQoZG5ldCk7CiYjNDM7CWN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCAmYW1wO292c19uZXQtJmd0O2RwcywgbGlzdF9ub2RlKQogCQlfX2RwX2Rlc3Ryb3koZHApOwpAQCAtMjc4NCw2ICYjNDM7Mjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpCiAKIAlvdnNfdW5sb2NrKCk7CiAKJiM0MzsJb3ZzX2N0X2V4aXRfZmluaXNoKGRuZXQsIGN0X2V4aXRfZGF0YSk7CiYjNDM7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7bWFza3NfcmViYWxhbmNlKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7b3ZzX25ldC0mZ3Q7ZHBfbm90aWZ5X3dvcmspOwogfQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAppbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaApAQCAtMTY0LDcgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gewogICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguCiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLgogICogQG1hc2tzX3JlYmFsYW5jZTogQSB3b3JrIHRvIHBlcmlvZGljYWxseSBvcHRpbWl6ZSBmbG93IHRhYmxlIGNhY2hlcy4KLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuCiYjNDM7ICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZAomIzQzOyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmcKJiM0MzsgKiBuZXRucyB0ZWFyZG93bi4KICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuCiAgKi8KIHN0cnVjdCBvdnNfbmV0IHsKQEAgLTE3Miw3ICYjNDM7MTc0LDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDg0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbmVlZHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBubyBxdWVzdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvbm50cmFjayBjb2RlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL2AuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGBjb25udHJhY2suY2AsIGBjb25udHJhY2suaGAsIGBkYXRhcGF0aC5jYCwgYW5kIGBkYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gLiBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgYSBsb3Qgb2YgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCB0aGUgT3BlbiB2U3dpdGNoIHNwZWNpZmljIGBvdnNsX2RlcmVmZXJlbmNlYCBhbmQgc3BsaXR0aW5nIGBvdnNfY3RfZXhpdGAgaW50byBhIHN0YXJ0IGFuZCBmaW5pc2ggc3RhZ2UgdG8gZW5zdXJlIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIHVzaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aG91dCBob2xkaW5nIGBvdnNfbXV0ZXhgLCB3aGljaCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGlzIHNlc3Npb24gaXMgZGVzaWduZWQgdG8gdGVhc2Ugb3V0LgoKTGV0IG1lIGJyZWFrIGRvd24gdGhlc2Ugc3BlY2lmaWMgYWNjZXNzIHBhdHRlcm5zIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgdG8gc2VlIHdoZXJlIHRoZSByaXNrIGlzOgoKKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgIGlzIG5vdyB1c2luZyBgcmN1X2RlcmVmZXJlbmNlYCB0byBhY2Nlc3MgYGN0X2xpbWl0X2luZm9gLgoqICAgYG92c19jdF9saW1pdF9pbml0YCBpcyBhbGxvY2F0aW5nIGBpbmZvYCB1c2luZyBga21hbGxvY19vYmpgLCBpbml0aWFsaXppbmcgaXQsIGFuZCB0aGVuIGFzc2lnbmluZyBpdCB0byBgb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mb2AgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgYGttYWxsb2Nfb2JqYCBleHBhbmRzIHRvLCBhcyB1c2luZyBhbiB1bmtub3duIHZhcmlhbnQgb2YgYGttYWxsb2NgIGlzIGEgc3Ryb25nIGluZGljYXRvciBvZiBhbiBpc3N1ZS4gYGttYWxsb2Nfb2JqYCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpYC4gT2theSwgc28gYGttYWxsb2NgIGRvZXNuJiMzOTt0IHplcm8gbWVtb3J5IHdoaWNoIGNvdWxkIG1lYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYW4gaXNzdWUuCiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnRgIHVzZXMgYHJjdV9yZXBsYWNlX3BvaW50ZXJgIHRvIHNldCBgb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mb2AgdG8gYE5VTExgIGFuZCByZXR1cm5zIHRoZSBvbGQgcG9pbnRlci4KKiAgIGBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2hgIGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIHRoZW4gZnJlZXMgdGhlIGBpbmZvYCwgd2hpY2ggaXMgc3RhbmRhcmQgUkNVIHByYWN0aWNlLgoqICAgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIG5vdyB1c2UgYG92c2xfZGVyZWZlcmVuY2VgIHRvIGdldCBgaW5mb2AgdW5kZXIgYG92c19sb2NrKClgLgoqICAgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCBub3cgYXNzdW1lIHRoZSBjYWxsZXIgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNhbGxzIGFyZSB3cmFwcGVkIGluIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGluIGBvdnNfY3RfbGltaXRfY21kX2dldGAuCgpSZWdhcmRpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBgaW5mb2AgaXMgcG9wdWxhdGVkIGluIGBvdnNfY3RfbGltaXRfaW5pdGAuIFRoZSBjcnVjaWFsIGxpbmUgaXMgYGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7YC4gSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBga21hbGxvY19vYmpgIGlzIGxpa2VseSB0byBleHBhbmQgdG8gYGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTClgLiBMb29raW5nIGF0IHRoZSBzdHJ1Y3QsIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLCBoYXMgYGRlZmF1bHRfbGltaXRgLCBgbGltaXRzYCAoYSBwb2ludGVyKSwgYW5kIGBkYXRhYCAoYW5vdGhlciBwb2ludGVyKS4gSW4gdGhlIGBvdnNfY3RfbGltaXRfaW5pdGAgZnVuY3Rpb24sIGBkZWZhdWx0X2xpbWl0YCBpcyBpbml0aWFsaXplZCB0byBgT1ZTX0NUX0xJTUlUX0RFRkFVTFRgLiBgbGltaXRzYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpzYCAod2hpY2ggZXhwYW5kcyB0byBga21hbGxvY2ApLCB0aGVuIGl0cyBlbGVtZW50cyBhcmUgaW5pdGlhbGl6ZWQuIGBkYXRhYCBpcyBpbml0aWFsaXplZCB3aXRoIGBuZl9jb25uY291bnRfaW5pdGAuIEl0IHNlZW1zIGxpa2UgYWxsIGZpZWxkcyBpbiBgaW5mb2AgKmFyZSogaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgdXNlIG9mIHRoZSBwb2ludGVyIGhlcmUgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc3RydWN0IGRlZmluaXRpb24sIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZmllbGRzIHRoYXQgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIG1lcml0cyB0aGUgS01TQU4gc2Vzc2lvbiB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NS1cdHUzMiBkZWZhdWx0X2xpbWl0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzgwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBEZXB0aHMgb2YgYG92c19jdF9saW1pdF9pbmZvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gQmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMgb3Igc3RhcnQgc2tldGNoaW5nIG91dCBzb2x1dGlvbnMsIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSAqYWN0dWFsKiBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLiYjMzQ7IE5vIGd1ZXNzd29yaywgbm8gcmVseWluZyBvbiBtZW1vcnkgKGhvd2V2ZXIgZ29vZCBpdCBtYXkgYmUhKSwgSSB3YW50IHRoZSBkZWZpbml0aXZlIHNvdXJjZS4gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUsIHVuYWR1bHRlcmF0ZWQgc3RydWN0dXJlLiBXaGF0IGZpZWxkcyBhcmUgdGhlcmU/IFdoYXQgZGF0YXR5cGVzIGFyZSB1c2VkPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpdHNlbGY/IFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBhbnkgZnVydGhlciB3b3JrIHdpbGwgYmUgYnVpbHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgYW5kIGFjY3VyYXRlIHBpY3R1cmUgb2YgaXRzIGNvbXBvc2l0aW9uIGJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgaG93IGl0IGZ1bmN0aW9ucyBvciBob3cgSSBtaWdodCBsZXZlcmFnZSBpdC4gTmVlZCB0byBrbm93IHRoZSBjb21wbGV0ZSBzdHJ1Y3R1cmUgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG92c19jdF9saW1pdF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05NS1cdHUzMiBkZWZhdWx0X2xpbWl0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04NzI9c3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpjdF9saW1pdF9oYXNoX2J1Y2tldChcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo4NzM6XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3NC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3OC0vKiBDYWxsIHdpdGggb3ZzX211dGV4ICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6ODc5OnN0YXRpYyB2b2lkIGN0X2xpbWl0X3NldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtODgwLVx0XHRcdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0ICpuZXdfY3RfbGltaXQpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg5OS0vKiBDYWxsIHdpdGggb3ZzX211dGV4ICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTAwOnN0YXRpYyB2b2lkIGN0X2xpbWl0X2RlbChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkwMS17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkxNi0vKiBDYWxsIHdpdGggUkNVIHJlYWQgbG9jayAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjkxNzpzdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkxOC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkzMT1zdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzNS1cdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzY6XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTM3LVx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTU5MD1zdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU5MS17XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTU5MjpcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTkzLVx0aW50IGksIGVycjtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTYyOT1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2MzAte1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2MzE6XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2MzItXHRpbnQgaTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTY4Nj1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTY4OS1cdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNjkwOlx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2OTEtXHR1MTYgem9uZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTczMz1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTczNi1cdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzM3Olx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE3MzgtXHR1MTYgem9uZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3MC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzcxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpyZXBseSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTgwMT1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTgwMi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODAzOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODA0LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTg0Mz1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4NDQ6XHRcdFx0XHRcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODQ1LVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5MzI9c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTM5LVx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5NDA6XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk0MS1cdGludCBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIE9wZW4gdlN3aXRjaCYjMzk7cyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGRlZmluaXRpb24uIEl0JiMzOTtzIGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLCBuYXR1cmFsbHksIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3QgaXMgY3J1Y2lhbDsgaXQmIzM5O3MgdGhlIGJsdWVwcmludCBmb3IgaG93IE9WUyB0cmFja3MgYW5kIHBvdGVudGlhbGx5IGVuZm9yY2VzIGxpbWl0YXRpb25zIG9uIGl0cyBjb25udHJhY2sgdGFibGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaW5mb3JtYXRpb24gdGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzPyBXaGF0IHBhcmFtZXRlcnMgZG9lcyBpdCBleHBvc2U/IFdoYXQgdGhyZXNob2xkcyBvciBjb25maWd1cmF0aW9ucyBtaWdodCBpdCBkZWZpbmUgZm9yIG1hbmFnaW5nIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgb3Igc3RhdGVzPyBMZXQmIzM5O3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IHByb3ZpZGVzIGludG8gT1ZTJiMzOTtzIGNvbm50cmFjayBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg2Olx0c3RydWN0IG92c19jdF9saW1pdCB7XG4gIDg3Olx0XHQvKiBFbGVtZW50cyBpbiBvdnNfY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgaGFzaCB0YWJsZSAqL1xuICA4ODpcdFx0c3RydWN0IGhsaXN0X25vZGUgaGxpc3Rfbm9kZTtcbiAgODk6XHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gIDkwOlx0XHR1MTYgem9uZTtcbiAgOTE6XHRcdHUzMiBsaW1pdDtcbiAgOTI6XHR9O1xuICA5MzpcdFxuICA5NDpcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyB7XG4gIDk1Olx0XHR1MzIgZGVmYXVsdF9saW1pdDtcbiAgOTY6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpsaW1pdHM7XG4gIDk3Olx0XHRzdHJ1Y3QgbmZfY29ubmNvdW50X2RhdGEgKmRhdGE7XG4gIDk4Olx0fTtcbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RfbGltaXRfcG9saWN5W09WU19DVF9MSU1JVF9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbiAxMDE6XHRcdFtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVELCB9LFxuIDEwMjpcdH07XG4gMTAzOlx0I2VuZGlmXG4gMTA0Olx0XG4gMTA1Olx0c3RhdGljIGJvb2wgbGFiZWxzX25vbnplcm8oY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBMaW1pdCBTZXR1cCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuCgpGaXJzdCwgSSBsb29rZWQgYXQgYHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mb2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBkZWZhdWx0X2xpbWl0YCAoYSBgdTMyYCksIGEgaGFzaCBsaXN0IChgbGltaXRzYCksIGFuZCBzb21lIGNvbm5lY3Rpb24gY291bnQgZGF0YSAoYGRhdGFgKS4gVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBzZWVtcyBjbGVhbi4gSXQgYWxsb2NhdGVzIHRoZSBgb3ZzX2N0X2xpbWl0X2luZm9gIHN0cnVjdHVyZSwgc2V0cyB0aGUgYGRlZmF1bHRfbGltaXRgIHRvIGEgZGVmYXVsdCB2YWx1ZSwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgYGxpbWl0c2AgaGFzaCBsaXN0LCBhbmQgdGhlbiBpbml0aWFsaXplcyB0aGUgY29ubmVjdGlvbiBjb3VudCBkYXRhLiBBbGwgZmllbGRzIHNlZW0gZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gbm8gb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuCgpOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIGZ1bmN0aW9uIGlzIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgc2V0dGluZyBsaW1pdHMgZm9yIHNwZWNpZmljIHpvbmVzLiBUaGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgIGVudHJpZXMuIElmIHRoZSB6b25lIElEIGlzIHRoZSBkZWZhdWx0LCBpdCB1cGRhdGVzIGBpbmZvLSZndDtkZWZhdWx0X2xpbWl0YC4gSWYgaXQmIzM5O3MgYSBzcGVjaWZpYyB6b25lLCB3ZSBhbGxvY2F0ZSBhIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0YCB1c2luZyBga21hbGxvY2AuCgpIZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBiaXQ6IFdpdGhpbiB0aGUgc3BlY2lmaWMgem9uZSBoYW5kbGluZywgYGN0X2xpbWl0LSZndDt6b25lYCBhbmQgYGN0X2xpbWl0LSZndDtsaW1pdGAgYXJlIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGFib3V0IGBjdF9saW1pdC0mZ3Q7aGxpc3Rfbm9kZWAgYW5kIGBjdF9saW1pdC0mZ3Q7cmN1YC4gVGhlc2UgYXJlIG1lbWJlcnMgb2YgdGhlIGBjdF9saW1pdGAgc3RydWN0LCBhbmQgdGhleSBkb24mIzM5O3Qgc2VlbSB0byBiZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIGBjdF9saW1pdF9zZXRgIGlzIGNhbGxlZC4gSXQmIzM5O3MgbGlrZWx5IGBjdF9saW1pdF9zZXRgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlbSwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgaXMgd2hlcmUgYSBwb3RlbnRpYWwgbWVtb3J5IGV4cG9zdXJlIG1pZ2h0IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODc4Olx0LyogQ2FsbCB3aXRoIG92c19tdXRleCAqL1xuIDg3OTpcdHN0YXRpYyB2b2lkIGN0X2xpbWl0X3NldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gODgwOlx0XHRcdFx0IHN0cnVjdCBvdnNfY3RfbGltaXQgKm5ld19jdF9saW1pdClcbiA4ODE6XHR7XG4gODgyOlx0XHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0ICpjdF9saW1pdDtcbiA4ODM6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xuIDg4NDpcdFxuIDg4NTpcdFx0aGVhZCA9IGN0X2xpbWl0X2hhc2hfYnVja2V0KGluZm8sIG5ld19jdF9saW1pdC1cdTAwM2V6b25lKTtcbiA4ODY6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSxcbiA4ODc6XHRcdFx0XHRcdCBsb2NrZGVwX292c2xfaXNfaGVsZCgpKSB7XG4gODg4Olx0XHRcdGlmIChjdF9saW1pdC1cdTAwM2V6b25lID09IG5ld19jdF9saW1pdC1cdTAwM2V6b25lKSB7XG4gODg5Olx0XHRcdFx0aGxpc3RfcmVwbGFjZV9yY3UoXHUwMDI2Y3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZSxcbiA4OTA6XHRcdFx0XHRcdFx0ICBcdTAwMjZuZXdfY3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZSk7XG4gODkxOlx0XHRcdFx0a2ZyZWVfcmN1KGN0X2xpbWl0LCByY3UpO1xuIDg5MjpcdFx0XHRcdHJldHVybjtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0fVxuIDg5NTpcdFxuIDg5NjpcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNm5ld19jdF9saW1pdC1cdTAwM2VobGlzdF9ub2RlLCBoZWFkKTtcbiA4OTc6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDIxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSQ1UgUGF0Y2ggZm9yIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgaGxpc3RfcmVwbGFjZV9yY3VgIGFuZCBgaGxpc3RfYWRkX2hlYWRfcmN1YCBhcmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBgbmV3X2N0X2xpbWl0LSZndDtobGlzdF9ub2RlYCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBgcmN1YCBmaWVsZCBoZXJlIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB3ZSYjMzk7cmUgZnJlZWluZyB0aGUgbWVtb3J5IHVzaW5nIGBrZnJlZV9yY3VgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZSBgY3RfbGltaXRgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBSQ1UgcHJvdGVjdGlvbiBmb3IgYG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm9gLCBhbmQgdGhpcyByaW5ncyBhIGJlbGwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gc29sdmUgYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiB3aGVuIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBiZWluZyB0b3JuIGRvd24uIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBhICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyBmaXgsIHNvIGl0IHNlZW1zIGxpa2UgdGhpcyB3YXMgZm91bmQgYnkgYSBmdXp6ZXIsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGRvbiYjMzk7dCBoYXZlIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSwgYnV0IHRoZSBpbnRlbnRpb24gaXMgY2xlYXI6IHByb3RlY3QgYGN0X2xpbWl0X2luZm9gIHdpdGggUkNVLgoKQmVmb3JlIHRoZSBwYXRjaCwgYG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm9gIHdhcyBhY2Nlc3NlZCBkaXJlY3RseS4gRHVyaW5nIGBvdnNfZXhpdF9uZXRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBvdnNfY3RfZXhpdGAsIGBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvYCB3YXMgZnJlZWQuIEhvd2V2ZXIsIHRoZXJlIHdlcmUgY29uY3VycmVudCByZWFkZXJzLCBsaWtlIGBvdnNfY3RfY2hlY2tfbGltaXRgIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCB3aGljaCBjb3VsZCBhY2Nlc3MgdGhlIG5vdy1mcmVlZCBtZW1vcnksIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBtaXRpZ2F0ZXMgdGhhdCByaXNrIGJ5IHVzaW5nIFJDVSBtZWNoYW5pc21zLgoKTm93LCBhIGtleSBjb25jZXJuOiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcz8gQWZ0ZXIgYSBxdWljayBsb29rLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBvdnNfY3RfbGltaXRfY21kX2dldGAgdG8gaG9sZCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgdXNlIGByY3VfZGVyZWZlcmVuY2UoKWAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4gVGhlIGRhdGEgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgaXMgYHpvbmVfbGltaXRgLCB3aGljaCwgZnJvbSB3aGF0IEkga25vdywgY29tZXMgZnJvbSBgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NzU6XHRcdFx0LnpvbmVfaWQgPSBPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUsXG4xNzc2Olx0XHRcdC5saW1pdCAgID0gaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0LFxuMTc3NzpcdFx0fTtcbjE3Nzg6XHRcbjE3Nzk6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc4MDpcdH1cbjE3ODE6XHRcbjE3ODI6XHRzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbjE3ODM6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZl9jb25uY291bnRfZGF0YSAqZGF0YSxcbjE3ODQ6XHRcdFx0XHRcdFx0IHUxNiB6b25lX2lkLCB1MzIgbGltaXQsXG4xNzg1Olx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXG4xNzg2Olx0e1xuMTc4NzpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIGN0X3pvbmU7XG4xNzg4Olx0XHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgem9uZV9saW1pdDtcbjE3ODk6XHRcdHUzMiBjb25uY291bnRfa2V5ID0gem9uZV9pZDtcbjE3OTA6XHRcbjE3OTE6XHRcdHpvbmVfbGltaXQuem9uZV9pZCA9IHpvbmVfaWQ7XG4xNzkyOlx0XHR6b25lX2xpbWl0LmxpbWl0ID0gbGltaXQ7XG4xNzkzOlx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgem9uZV9pZCwgTkZfQ1RfREVGQVVMVF9aT05FX0RJUiwgMCk7XG4xNzk0Olx0XG4xNzk1Olx0XHR6b25lX2xpbWl0LmNvdW50ID0gbmZfY29ubmNvdW50X2NvdW50X3NrYihuZXQsIE5VTEwsIDAsIGRhdGEsXG4xNzk2Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjb25uY291bnRfa2V5KTtcbjE3OTc6XHRcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuMTc5ODpcdH1cbjE3OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWm9uZSBMaW1pdCBTdHJ1Y3QqKgoKT2theSwgc28gYHpvbmVfbGltaXRgIGlzIGRlZmluZWQgYXMgYSBgc3RydWN0IG92c196b25lX2xpbWl0YC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB2ZXJpZnkgaXRzIGRlZmluaXRpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgbWVudGFsIGNoZWNrbGlzdCBvZiB3aGF0IEkgZXhwZWN0IHRvIGZpbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlOiBsaWtlbHkgbGltaXRzIG9uIHRoaW5ncyBsaWtlIFZMQU4gSURzLCB0dW5uZWxpbmcgcHJvdG9jb2xzLCBvciBvdGhlciB6b25lLXNwZWNpZmljIHBhcmFtZXRlcnMgcmVsZXZhbnQgdG8gdGhlIE9wZW4gdlN3aXRjaCBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXRhaWxzIHRvIGNvbnRpbnVlIHdpdGggd2hhdGV2ZXIgYW5hbHlzaXMgSSYjMzk7bSBkb2luZy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGF0IGRlZmluaXRpb24gYW5kIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgYW5kIGZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIG15IG5leHQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBvdnNfem9uZV9saW1pdCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg9MTE3OD1lbnVtIG92c19jdF9saW1pdF9hdHRyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaC0xMTg3LVxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmg6MTE4ODpzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQge1xuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4OS1cdGludCB6b25lX2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN0cnVjdCBvdnNfem9uZV9saW1pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgIGRlZmluaXRpb24uIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgdGhpcyBzdHJ1Y3R1cmUgaGFzIGZvciB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBwb2xpY2luZyB3aXRoaW4gT3BlbiB2U3dpdGNoLiBUaGlzIHByb2JhYmx5IGhvbGRzIHRoZSBrZXkgdG8gaG93IHpvbmUtYmFzZWQgbGltaXRhdGlvbnMgYXJlIGVuZm9yY2VkLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbWVtYmVycyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIGZsb3cgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGRlZmluZSB0aGUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBvZiB0aGVzZSB6b25lcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbGltaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiBoYXJkd2FyZS4gQXJlIHRoZSBsaW1pdHMgcGVyLWZsb3csIHBlci16b25lLCBvciBzb21lIGNvbWJpbmF0aW9uPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTg4Olx0c3RydWN0IG92c196b25lX2xpbWl0IHtcbjExODk6XHRcdGludCB6b25lX2lkO1xuMTE5MDpcdFx0X191MzIgbGltaXQ7XG4xMTkxOlx0XHRfX3UzMiBjb3VudDtcbjExOTI6XHR9O1xuMTE5MzpcdFxuMTE5NDpcdGVudW0gb3ZzX2RlY190dGxfYXR0ciB7XG4xMTk1Olx0XHRPVlNfREVDX1RUTF9BVFRSX1VOU1BFQyxcbjExOTY6XHRcdE9WU19ERUNfVFRMX0FUVFJfQUNUSU9OLFx0LyogTmVzdGVkIHN0cnVjdCBubGF0dHIgKi9cbjExOTc6XHRcdF9fT1ZTX0RFQ19UVExfQVRUUl9NQVhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MjYKCQkJCQkJCW91dHB1dDogMjM4CgkJCQkJCQl0aG91Z2h0czogMTMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGZvY3VzZWQgb24gZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgaW4gT1ZTLiBJJiMzOTt2ZSBleGFtaW5lZCB0aGUgYHN0cnVjdCBvdnNfem9uZV9saW1pdGA7IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgd2l0aCBhbGwgZmllbGRzIGluaXRpYWxpemVkLCBzbyB0aGVyZSYjMzk7cyBubyBpbmhlcmVudCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzdHJ1Y3R1cmUgbGV2ZWwuIFRoZSBzdHJ1Y3QgaXRzZWxmIGlzIDEyIGJ5dGVzIHRvdGFsLCBubyBwYWRkaW5nLgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgdGhlIGBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIGZpZWxkcyBvZiB0aGUgYHpvbmVfbGltaXRgIHN0cnVjdCBiZWZvcmUgdXNlLiBJbXBvcnRhbnRseSwgdGhlIGNhbGxlciBub3cgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbi4gVGhlIGNvZGUgaGFzIGJlZW4gY2hhbmdlZCB0byBiZSBSQ1Utc2FmZSB0aHJvdWdoIHRoZSBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAgdG8gcmVhZCB0aGUgZGF0YSBjb3JyZWN0bHkuCgpUaGUgbWFpbiBjaGFuZ2VzLCBhcyBJIHNlZSB0aGVtLCBhcmUgcmVmYWN0b3JpbmcgaW4gYG92c19jdF9saW1pdF9pbml0YCB0byB1c2UgYSBsb2NhbCBgaW5mb2AgdmFyaWFibGUsIHdoaWNoIGlzIHRoZW4gYXNzaWduZWQgdXNpbmcgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4gQWxzbywgdGhlIGV4aXQgZnVuY3Rpb24gKGBvdnNfY3RfbGltaXRfZXhpdGApIGhhcyBiZWVuIHNwbGl0IGludG8gdHdvIHBhcnRzOyB0aGUgZmlyc3QgcGFydCB1c2VzIGByY3VfcmVwbGFjZV9wb2ludGVyYCBhbmQgdGhlIHNlY29uZCBwYXJ0IHVzZXMgYHN5bmNocm9uaXplX3JjdWAgdG8gd2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gZmluaXNoLiBUaGlzIGlzIHRvIGF2b2lkIGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgIGR1cmluZyBSQ1Ugc3luY2hyb25pemF0aW9uLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHByaW1hcnkgcHVycG9zZSBpcyB0byBlbGltaW5hdGUgYSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb24uIFN1Y2ggYnVncyBhcmUgcm91dGluZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBJIGJlbGlldmUgdGhhdCBOZWVkc0tNU0FOIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UuIFRoaXMgcGF0Y2ggaXMgYSBzb2xpZCwgZm9jdXNlZCBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjEwLjUyODc3MDY0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTg3NzYxNDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9leGl0X3N0YXJ0XCIsXG4gICAgXCJvdnNfY3RfZXhpdF9maW5pc2hcIixcbiAgICBcIm92c19leGl0X25ldFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBoYW5kbGluZywgaW50cm9kdWNpbmcgUkNVIHByb3RlY3Rpb24gZm9yIGBjdF9saW1pdF9pbmZvYCBhbmQgc3BsaXR0aW5nIHRoZSBuZXRucyBleGl0IHJvdXRpbmUgdG8gYXZvaWQgaG9sZGluZyBgb3ZzX211dGV4YCBkdXJpbmcgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcvZ2V0dGluZy9kZWxldGluZyBsaW1pdHMsIGNvbm50cmFjayBsaW1pdCBjaGVja2luZyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MTAuNTI4Nzc2ODY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1MDEyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjM4OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjBjMTMwOGZjMjNiNDkgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcXG4gXFx0dTMyIGNvbm5jb3VudF9rZXk7XFxuIFxcbitcXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoIWN0X2xpbWl0X2luZm8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0Y29ubmNvdW50X2tleSA9IGluZm8tXFx1MDAzZXpvbmUuaWQ7XFxuIFxcbiBcXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVxcdTAwM2V6b25lLmlkKTtcXG5AQCAtMTU4NSw0MCArMTU4OSw1NCBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxcbiAjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuIHtcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xcbiBcXHRpbnQgaSwgZXJyO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4tXFx0aWYgKCFvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKVxcbitcXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8pO1xcbitcXHRpZiAoIWluZm8pXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMgPVxcbitcXHRpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuK1xcdGluZm8tXFx1MDAzZWxpbWl0cyA9XFxuIFxcdFxcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcXG4tXFx0aWYgKCFvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMpIHtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmICghaW5mby1cXHUwMDNlbGltaXRzKSB7XFxuK1xcdFxcdGtmcmVlKGluZm8pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSsrKVxcbi1cXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0c1tpXSk7XFxuK1xcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2aW5mby1cXHUwMDNlbGltaXRzW2ldKTtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcXG4rXFx0aW5mby1cXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xcbiBcXG4tXFx0aWYgKElTX0VSUihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhKSkge1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEpO1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMpO1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKElTX0VSUihpbmZvLVxcdTAwM2VkYXRhKSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKGluZm8tXFx1MDAzZWRhdGEpO1xcbitcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2VsaW1pdHMpO1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4gXFx0XFx0cHJfZXJyKFxcXCJvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBpbmZvKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuK3N0YXRpYyB2b2lkICpvdnNfY3RfbGltaXRfZXhpdF9zdGFydChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGlmICghaW5mbylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFxuIFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuQEAgLTE2NjUsMTIgKzE2ODMsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTY3OSw2ICsxNjk4LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNjk1LDYgKzE3MTUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuIFxcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuQEAgLTE3MDksMTIgKzE3MzAsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XFxuLVxcdGludCByZW07XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0dTE2IHpvbmU7XFxuK1xcdGludCByZW07XFxuIFxcbiBcXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xcbiBcXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcXG5AQCAtMTcyMyw2ICsxNzQ1LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbkBAIC0xNzMwLDYgKzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH1cXG5AQCAtMTc3Myw2ICsxNzk3LDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFxcdTAwMjZ6b25lX2xpbWl0KTtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5AQCAtMTc5NiwxMiArMTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ6b25lKSkpIHtcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdFxcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXFxuIFxcdFxcdFxcdFxcdG5ldCwgaW5mby1cXHUwMDNlZGF0YSwgem9uZSwgbGltaXQsIHJlcGx5KTtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG5AQCAtMTgxNiw2ICsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcXG5AQCAtMTgyOCwxOSArMTg1MiwxNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4gXFx0XFx0aGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuIFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXFx1MDAzZWRhdGEsXFxuIFxcdFxcdFxcdFxcdGN0X2xpbWl0LVxcdTAwM2V6b25lLCBjdF9saW1pdC1cXHUwMDNlbGltaXQsIHJlcGx5KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1leGl0X2VycjpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTE4NTAsNyArMTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiBcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXFxuQEAgLTE4NjMsOCArMTg4Myw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgY3RfbGltaXRfaW5mbyk7XFxuK1xcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXG5AQCAtMTg4NCw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcXG5AQCAtMTg5Nyw4ICsxOTE2LDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xOTE4LDcgKzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXFxuQEAgLTE5MzIsMTggKzE5NTEsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuIFxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRyZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXBseSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbiBcXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XFxuIFxcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcXG5AQCAtMjAxNiwxMiArMjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IGhlbGQuICBEZXRhY2hlcyBSQ1UtcHJvdGVjdGVkIGN0X2xpbWl0X2luZm9cXG4rICogYW5kIHJldHVybnMgYW4gb3BhcXVlIGhhbmRsZSBmb3Igb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGVhcmRvd25cXG4rICogYWZ0ZXIgdGhlIG11dGV4IGlzIHJlbGVhc2VkLlxcbisgKi9cXG4rdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxcbit7XFxuKyNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuK1xcdHJldHVybiBvdnNfY3RfbGltaXRfZXhpdF9zdGFydChuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IG92c19tdXRleCBoZWxkLiAgQGRhdGEgbXVzdCBiZSB0aGUgb3BhcXVlIHBvaW50ZXJcXG4rICogcmV0dXJuZWQgYnkgb3ZzX2N0X2V4aXRfc3RhcnQoKS5cXG4rICovXFxuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuIFxcbiAjaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbi1cXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xcbitcXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRpZiAob3ZzX25ldC1cXHUwMDNleHRfbGFiZWwpXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxcbmluZGV4IDMxN2U1MjVjOGExMTMuLjIzNjNjZTU2ZDdlY2MgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXFxuQEAgLTE0LDcgKzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7XFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTtcXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xcbit2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpO1xcbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpO1xcbiBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqLCBlbnVtIG92c19rZXlfYXR0ciBhdHRyKTtcXG4gaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKixcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLFxcbkBAIC00MCw3ICs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpO1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcXG4ge1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggYWU2OWIyY2FiYWI5ZS4uYzE4ZGFmYTkyMGI3ZCAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI3NTgsMTUgKzI3NTgsMTYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXFxuIFxcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG92c19leGl0X25ldChzdHJ1Y3QgbmV0ICpkbmV0KVxcbiB7XFxuLVxcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpO1xcbiBcXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcXG4rXFx0c3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7XFxuK1xcdHZvaWQgKmN0X2V4aXRfZGF0YTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRMSVNUX0hFQUQoaGVhZCk7XFxuIFxcbiBcXHRvdnNfbG9jaygpO1xcbiBcXG4tXFx0b3ZzX2N0X2V4aXQoZG5ldCk7XFxuK1xcdGN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCBcXHUwMDI2b3ZzX25ldC1cXHUwMDNlZHBzLCBsaXN0X25vZGUpXFxuIFxcdFxcdF9fZHBfZGVzdHJveShkcCk7XFxuQEAgLTI3ODQsNiArMjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXFxuIFxcbiBcXHRvdnNfdW5sb2NrKCk7XFxuIFxcbitcXHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgY3RfZXhpdF9kYXRhKTtcXG4rXFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2b3ZzX25ldC1cXHUwMDNlbWFza3NfcmViYWxhbmNlKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2b3ZzX25ldC1cXHUwMDNlZHBfbm90aWZ5X3dvcmspO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XFxuICAqIFByb3RlY3RlZCBieSBnZW5sX211dGV4LlxcbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxcbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxcbi0gKiBAY3RfbGltaXRfaW5mbzogQSBoYXNoIHRhYmxlIG9mIGNvbm50cmFjayB6b25lIGNvbm5lY3Rpb24gbGltaXRzLlxcbisgKiBAY3RfbGltaXRfaW5mbzogSGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4gUHJvdGVjdGVkXFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcXG4rICogbmV0bnMgdGVhcmRvd24uXFxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXFxuICAqL1xcbiBzdHJ1Y3Qgb3ZzX25ldCB7XFxuQEAgLTE3Miw3ICsxNzQsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbCB4dF9sYWJlbDtcXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MTAuOTc3OTcyOTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTY4MjI5ODU3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCIsXG4gICAgXCJvdnNfY3RfZXhpdF9zdGFydFwiLFxuICAgIFwib3ZzX2N0X2V4aXRfZmluaXNoXCIsXG4gICAgXCJvdnNfZXhpdF9uZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggY29ubnRyYWNrIGxpbWl0IGhhbmRsaW5nLCBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gIGFuZCBzcGxpdHRpbmcgdGhlIG5ldG5zIGV4aXQgcm91dGluZSB0byBhdm9pZCBob2xkaW5nIGBvdnNfbXV0ZXhgIGR1cmluZyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgY29ubnRyYWNrIGxpbWl0IGNoZWNraW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIG5ldHdvcmsgbmFtZXNwYWNlIHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMjAyZDczMWI2ZGI2OWQ2ZDQ5OGRiYWU0ZjQ5ZTY4ZTc5YmVkMjVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mzg6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjBjMTMwOGZjMjNiNDkgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDU0IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbitzdGF0aWMgdm9pZCAqb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQoc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0cmV0dXJuIHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuK1x0XHRcdFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpXG4re1xuK1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTtcbiBcdGludCBpO1xuIFxuK1x0aWYgKCFpbmZvKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcbiBcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cdTAwM2VkYXRhKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgKytpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTY2NSwxMiArMTY4MywxMyBAQCBzdGF0aWMgYm9vbCBjaGVja196b25lX2lkKGludCB6b25lX2lkLCB1MTYgKnB6b25lKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDYgKzE2OTgsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNjk1LDYgKzE3MTUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG5AQCAtMTcwOSwxMiArMTczMCwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDYgKzE3NDUsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuIFx0XHRcdG92c19sb2NrKCk7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG5AQCAtMTczMCw2ICsxNzUzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzczLDYgKzE3OTcsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODgzLDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTEsMTkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRyZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfZXJyO1xuIFxuIFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuQEAgLTIwMTYsMTIgKzIwMzYsMjcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiAjZW5kaWZcbiB9XG4gXG4tdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4rLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggaGVsZC4gIERldGFjaGVzIFJDVS1wcm90ZWN0ZWQgY3RfbGltaXRfaW5mb1xuKyAqIGFuZCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgZm9yIG92c19jdF9leGl0X2ZpbmlzaCgpIHRvIGNvbXBsZXRlIHRlYXJkb3duXG4rICogYWZ0ZXIgdGhlIG11dGV4IGlzIHJlbGVhc2VkLlxuKyAqL1xuK3ZvaWQgKm92c19jdF9leGl0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCBfX21heWJlX3VudXNlZClcbit7XG4rI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuK1x0cmV0dXJuIG92c19jdF9saW1pdF9leGl0X3N0YXJ0KG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCkpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qIE11c3QgYmUgY2FsbGVkIHdpdGhvdXQgb3ZzX211dGV4IGhlbGQuICBAZGF0YSBtdXN0IGJlIHRoZSBvcGFxdWUgcG9pbnRlclxuKyAqIHJldHVybmVkIGJ5IG92c19jdF9leGl0X3N0YXJ0KCkuXG4rICovXG4rdm9pZCBvdnNfY3RfZXhpdF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbiBcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRvdnNfY3RfbGltaXRfZXhpdChuZXQsIG92c19uZXQpO1xuK1x0b3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKG5ldCwgZGF0YSk7XG4gI2VuZGlmXG4gXG4gXHRpZiAob3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmggYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbmluZGV4IDMxN2U1MjVjOGExMTMuLjIzNjNjZTU2ZDdlY2MgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuQEAgLTE0LDcgKzE0LDggQEAgZW51bSBvdnNfa2V5X2F0dHI7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqKTtcbi12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKik7XG4rdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KTtcbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpO1xuIGJvb2wgb3ZzX2N0X3ZlcmlmeShzdHJ1Y3QgbmV0ICosIGVudW0gb3ZzX2tleV9hdHRyIGF0dHIpO1xuIGludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICosXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKiwgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKixcbkBAIC00MCw3ICs0MSw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpO1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkgeyByZXR1cm4gMDsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiBOVUxMOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgaW50IGF0dHIpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmMxOGRhZmE5MjBiN2QgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yNzU4LDE1ICsyNzU4LDE2IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbGlzdF92cG9ydHNfZnJvbV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0ICpkbmV0LFxuIFxuIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXG4ge1xuLVx0c3RydWN0IGRhdGFwYXRoICpkcCwgKmRwX25leHQ7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKGRuZXQsIG92c19uZXRfaWQpO1xuIFx0c3RydWN0IHZwb3J0ICp2cG9ydCwgKnZwb3J0X25leHQ7XG4rXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbitcdHZvaWQgKmN0X2V4aXRfZGF0YTtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdExJU1RfSEVBRChoZWFkKTtcbiBcbiBcdG92c19sb2NrKCk7XG4gXG4tXHRvdnNfY3RfZXhpdChkbmV0KTtcbitcdGN0X2V4aXRfZGF0YSA9IG92c19jdF9leGl0X3N0YXJ0KGRuZXQpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBkcF9uZXh0LCBcdTAwMjZvdnNfbmV0LVx1MDAzZWRwcywgbGlzdF9ub2RlKVxuIFx0XHRfX2RwX2Rlc3Ryb3koZHApO1xuQEAgLTI3ODQsNiArMjc4NSw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgb3ZzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKmRuZXQpXG4gXG4gXHRvdnNfdW5sb2NrKCk7XG4gXG4rXHRvdnNfY3RfZXhpdF9maW5pc2goZG5ldCwgY3RfZXhpdF9kYXRhKTtcbitcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZvdnNfbmV0LVx1MDAzZW1hc2tzX3JlYmFsYW5jZSk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm92c19uZXQtXHUwMDNlZHBfbm90aWZ5X3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi4wNmM2OTU2ZmIxZGM0IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTY0LDcgKzE2NCw5IEBAIHN0cnVjdCBkcF91cGNhbGxfaW5mbyB7XG4gICogUHJvdGVjdGVkIGJ5IGdlbmxfbXV0ZXguXG4gICogQGRwX25vdGlmeV93b3JrOiBBIHdvcmsgbm90aWZpZXIgdG8gaGFuZGxlIHBvcnQgdW5yZWdpc3RlcmluZy5cbiAgKiBAbWFza3NfcmViYWxhbmNlOiBBIHdvcmsgdG8gcGVyaW9kaWNhbGx5IG9wdGltaXplIGZsb3cgdGFibGUgY2FjaGVzLlxuLSAqIEBjdF9saW1pdF9pbmZvOiBBIGhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuXG4rICogQGN0X2xpbWl0X2luZm86IEhhc2ggdGFibGUgb2YgY29ubnRyYWNrIHpvbmUgY29ubmVjdGlvbiBsaW1pdHMuIFByb3RlY3RlZFxuKyAqIGJ5IFJDVTsgdXBkYXRlcyBhbmQgdGVhcmRvd24gYXJlIHNlcmlhbGl6ZWQgYnkgb3ZzX211dGV4LiBNYXkgYmUgTlVMTCBkdXJpbmdcbisgKiBuZXRucyB0ZWFyZG93bi5cbiAgKiBAeHRfbGFiZWw6IFdoZXRoZXIgY29ubmxhYmxlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhlIG5ldHdvcmsgb3Igbm90LlxuICAqL1xuIHN0cnVjdCBvdnNfbmV0IHtcbkBAIC0xNzIsNyArMTc0LDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MTAuOTc3OTc1NjIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1ODM3Njc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF04oCZcyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGluIE9wZW4gdlN3aXRjaC4gSXQncyB0b3VjaGluZyBgY29ubnRyYWNrLmNgLCBgY29ubnRyYWNrLmhgLCBgZGF0YXBhdGguY2AsIGFuZCBgZGF0YXBhdGguaGAuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IG9mIHRoZSBjaGFuZ2UgaXMgYXJvdW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGBjdF9saW1pdF9pbmZvYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgYW5kIHRoZXkncmUgc3BsaXR0aW5nIHRoZSBleGl0IGZ1bmN0aW9uIHRvIGF2b2lkIGJsb2NraW5nIG9uIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2hpbGUgaG9sZGluZyBgb3ZzX211dGV4YC4gVGhhdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcgZml4LCBzbyB0aGlzIHBhdGNoIGlzIGFscmVhZHkgZHJhd2luZyBteSBhdHRlbnRpb24uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzOiBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IFdlbGwsIE9wZW4gdlN3aXRjaCBpdHNlbGYgaXMgZGVmaW5pdGVseSByZWFjaGFibGUg4oCTIHRoYXQncyBhIG5vLWJyYWluZXIuIE5vdywgYXJlIHRoZXNlICpzcGVjaWZpYyogbW9kaWZpY2F0aW9ucyB3b3J0aCB0aGUgZWZmb3J0PyBUaGV5IHNlZW0gdG8gYmUgZm9jdXNlZCBvbiBzZXR0aW5nLCBnZXR0aW5nLCBhbmQgZGVsZXRpbmcgY29ubnRyYWNrIGxpbWl0cywgYW5kIGNydWNpYWxseSwgbmV0bnMgZXhpdC4gQ29ubnRyYWNrIGxpbWl0YXRpb25zIGFyZSBhIGtleSBjb250cm9sIHBhdGggaW4gYW55IGRhdGEtcGxhbmUgaW1wbGVtZW50YXRpb24sIGFuZCBwcm9ibGVtcyB3aXRoIG5ldG5zIGV4aXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHN0YXRlIGNvcnJ1cHRpb24sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBteSB0aW1lLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCB0byB0cmlnZ2VyIHRoaXMgY29kZS4gTGV0J3Mgc2VlLi4uIEknbSBleHBlY3RpbmcgYENPTkZJR19PUEVOVlNXSVRDSGAsIG9mIGNvdXJzZS4gVGhlbiBgQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYmVjYXVzZSBpdCdzIE9WUyBjb25udHJhY2ssIHRoYXQgaW1wbGllcyBgQ09ORklHX05GX0NPTk5UUkFDS2AgYXMgd2VsbC5cblxuVGltZSB0byBzZWFyY2ggZm9yIHRoZXNlIGNvbmZpZ3MuLi4gb2theSwgc28gYENPTkZJR19PUEVOVlNXSVRDSGAgaXMgdGhlcmUsIGFsb25nIHdpdGggYENPTkZJR19PUEVOVlNXSVRDSF9HRU5FVkVgLCBhbmQgc28gb24uIE5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGlzIGNvdWxkIGxlYWQgdG8gc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBSQ1UsIG11dGV4ZXMsIGFuZCBuZXRucyBleGl0IHdpdGhpbiB0aGUgY29ubnRyYWNrIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjE3LjQzNjM1NTMyM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM1Mjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjE3LjQ4OTcxMTgyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDMxNjQ1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXRzIGFuZCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGtleSBmdW5jdGlvbnM6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuIEltbWVkaWF0ZWx5LCBJIHNlZSB0aGVzZSBhcyByaXBlIHRhcmdldHMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZWlyIG5hbWVzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPVlMgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uLCBJJ20gZXhwZWN0aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBjb25uZWN0aW9uIGxpbWl0IG1hbmFnZW1lbnQsIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSBzaG91bGQgZGVmaW5pdGVseSBwcmlvcml0aXplIGZ1enppbmcgdGhlc2UsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGlucHV0IHN0cnVjdHVyZXMgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBlYWNoLlxuXG5TcGVjaWZpY2FsbHksIEknbGwgYmUgZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBmdXp6aW5nLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgcGF0Y2ggbWVudGlvbnMgYE9QRU5WU1dJVENIYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgTkVURklMVEVSX0NPTk5DT1VOVGAgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBhY3R1YWxseSBlbmFibGVkIGluIG15IHRlc3QgZW52aXJvbm1lbnQuIEFueSBmdXp6aW5nIGVmZm9ydCB3aWxsIGJlIHVzZWxlc3MgaWYgdGhlc2UgYXJlbid0IHByb3Blcmx5IGNvbmZpZ3VyZWQuIEknbGwgdmVyaWZ5IHRob3NlIHNldHRpbmdzIGZpcnN0LiBUaGF0J3MgdGhlIHByaW9yaXR5IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODoyMS45OTI4Nzg3ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDUxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MjIuMDQwNjI4MzYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxODc2NTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGNvbm5lY3Rpb24gdHJhY2tpbmcgY29uZmlndXJhdGlvbnMgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgTmV0ZmlsdGVyLiBJIHNlZSBgTkVURklMVEVSX0NPTk5DT1VOVGAgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBkZWZpbmVkIGFzIHRyaXN0YXRlcy4gVGhpcyBzdWdnZXN0cyB0aGV5IGNhbiBiZSBjb21waWxlZCBhcyBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIGRpc2FibGVkIGVudGlyZWx5LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMsIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCBhbmQgb3RoZXJzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzaW5nIGFuZCBwb3RlbnRpYWxseSBsaW1pdGluZyBjb25uZWN0aW9uIGNvdW50cyBhbmQgdGhlIHJlbGF0ZWQgaW1wbGVtZW50YXRpb24gZGVjaXNpb25zLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjI2LjY1OTM5NzM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDE0NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTg0Mz1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NjctXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4Njg6c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODY5LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xOTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgY3RfbGltaXRfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTgyLVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTgzOlxcdFxcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MjYuNzA1NDE1ODE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3NDIxMzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIENvbm50cmFjayBGdW5jdGlvbnMgZm9yIFN5bWJvbCBMaXN0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVzIHRvIGxpc3QgYXMgZm9jdXMgc3ltYm9scy4gVGhlIHByb21wdCBpcyBkaXJlY3RpbmcgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHRoaW5nIGlzLCB3aGlsZSBmdW5jdGlvbnMgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGFyZSBzdGF0aWMsIHRoZXkncmUgcmVnaXN0ZXJlZCB2aWEgYGdlbmxfc21hbGxfb3BzYCwgYW5kIHRoZWlyIGFkZHJlc3NlcyAqYXJlKiB0YWtlbiwgc28gdGhleSdyZSBub3QgaW5saW5lZC4gSXQncyBhIGJpdCBvZiBhIGdyZXkgYXJlYSB3aGV0aGVyIHRvIGxpc3Qgc29tZXRoaW5nIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCBvciBmb2N1cyBvbiB0aGUgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseSBlbnRyeSBwb2ludCBpbnN0ZWFkLCBnaXZlbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZS5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB3aGljaCBmdW5jdGlvbnMgdG8gbGlzdC4gTGV0J3Mgc2VlLi4uIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIGFyZSBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHNvIHRoZXkncmUgaW4gdGhlIHJ1bm5pbmcuIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBob3dldmVyLCBpcyBzdGF0aWMsIHNvIHdlIGNhbiBwcm9iYWJseSBkaXNjb3VudCB0aGF0IG9uZS4gYG92c19jdF9pbml0YCBpcyBhbHNvIG5vbi1zdGF0aWMuIExldCdzIGRvdWJsZSBjaGVjayBpZiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGlzIGV4cG9ydGVkLiBOb3BlLCBpdCdzIHN0YXRpYy4gSG1tLi4uIGNhbiB3ZSB1c2UgYSBub24tc3RhdGljIGZ1bmN0aW9uPyBBaCEgYG92c19jdF9leGVjdXRlYCBpcyBub24tc3RhdGljIGFzIHdlbGwuXG5cblNvIHdlIGhhdmUgYG92c19jdF9leGl0X3N0YXJ0YCwgYG92c19jdF9leGl0X2ZpbmlzaGAsIGFuZCBgb3ZzX2N0X2V4ZWN1dGVgIGFzIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgZmlsZSBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MzUuNDc5NjMyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0OTU4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgb3ZzX2N0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTI4Mz12b2lkIG92c19jdF9maWxsX2tleShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTI4OS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjkwOmludCBvdnNfY3RfcHV0X2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKnN3a2V5LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yOTEtXFx0XFx0ICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpvdXRwdXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwNDE6aW50IG92c19jdF9leGVjdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTA0Mi1cXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDc5LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDgwOmludCBvdnNfY3RfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwODEte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTEzNjU9Ym9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMzg0LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMzg1OmludCBvdnNfY3RfY29weV9hY3Rpb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMzg2LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNDUyPXN0YXRpYyBib29sIG92c19jdF9uYXRfdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1MTgtXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE1MTk6aW50IG92c19jdF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNTIwLVxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0yMDAzPXN0cnVjdCBnZW5sX2ZhbWlseSBkcF9jdF9saW1pdF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAxOS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAyMDppbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6MzUuNzY0NTk3NjUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDcwOTkzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0bGluayBDYWxsYmFja3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBnZW5lcmljIG5ldGxpbmsgY2FsbGJhY2tzLiBUaGV5J3JlIHN0YXRpYywgd2hpY2ggaXMgc3RhbmRhcmQgZW5vdWdoLCBidXQgdGhleSdyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgYGRwX2N0X2xpbWl0X2dlbmxfZmFtaWx5YCBuZXRsaW5rIGZhbWlseS4gSSBuZWVkIHRvIGVuc3VyZSBJJ3ZlIGluY2x1ZGVkIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIEknbGwgZGVmaW5pdGVseSBuZWVkIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGFuZCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBgb3ZzX2N0X2V4aXRfZmluaXNoYC5cblxuSGFuZyBvbiBhIHNlY29uZCwgdGhlIGd1aWRhbmNlIGlzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVycy4gQnV0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgKmlzbid0KiBhbiBpbnRlcm5hbCBoZWxwZXI7IGl0J3MgYSBkaXJlY3QgbmV0bGluayBjYWxsYmFjay4gU28sIGluY2x1ZGluZyBpdCBpcyBwZXJmZWN0bHkgYWNjZXB0YWJsZSwgZXZlbiBwcmVmZXJyZWQgaW4gdGhpcyBjb250ZXh0LiBFeGNlbGxlbnQsIHRoYXQgY2xhcmlmaWVzIHRoaW5ncy5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgYG92c19jdF9jaGVja19saW1pdGAuIEkgcmVtZW1iZXIgaXQncyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiB0cmFja2luZyBwcm9jZXNzLiBNYWtpbmcgc3VyZSB0aG9zZSBhcmUgYWxpZ25lZCBpcyBhIGtleSBwYXJ0IG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjQxLjMxMTY5OTY0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NzI2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MzItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgwLVxcdFxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5ODE6XFx0XFx0XFx0ZXJyID0gb3ZzX2N0X2NoZWNrX2xpbWl0KG5ldCwgc2tiLCBpbmZvKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVxcdFxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NDEuMzU4NDc2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyNjk2MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgb3ZzX2N0X2NvbW1pdGAgYW5kIGBvdnNfY3RfZXhlY3V0ZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgb3ZzX2N0X2NvbW1pdGAgaXMgY2FsbGVkIGZyb20gYG92c19jdF9leGVjdXRlYC4gVGhhdCBtYWtlcyBgb3ZzX2N0X2V4ZWN1dGVgIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbW1pdG1lbnQgcHJvY2VzcyBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGl0cyBmdW5jdGlvbmFsaXR5IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgaGFwcGVuaW5nLlxuXG5BbmQgYXMgYSBmb2xsb3cgdXAsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBleGl0IGNhbGxzIGFzIHdlbGwuIExldCdzIHNlZSBob3cgYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgZml0IGludG8gdGhlIHBpY3R1cmUuIEFoLCB0aGV5J3JlIGNhbGxlZCBmcm9tIGBvdnNfZXhpdF9uZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoYXQgZ2l2ZXMgbWUgYW5vdGhlciBhcmVhIHRvIGV4cGxvcmUgcmVsYXRlZCB0byBob3cgY29ubmVjdGlvbiB0cmFja2luZyBmbG93cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXkgZXhpdCB0aGUgbmV0ZmlsdGVyIGhvb2tzLiBJIGV4cGVjdCBgb3ZzX2V4aXRfbmV0YCBsaWtlbHkgaGFuZGxlcyB0aGUgZmluYWwgc3RlcHMgb3IgY2xlYW51cCBhZnRlciBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjQ0LjY5MTE3NTk3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2ODgzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2V4aXRfbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3MzY9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzU4LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3NTk6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzYwLXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3OTQ9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzk1LVxcdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTY6XFx0LmV4aXQgPSBvdnNfZXhpdF9uZXQsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc5Ny1cXHQuaWQgICA9IFxcdTAwMjZvdnNfbmV0X2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODo0NC43MzU4NjgwNjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MTI1Mzc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBPVlMvTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgb3ZzX2V4aXRfbmV0YCwgdGhhdCdzIHRoZSBuZXRucyBleGl0IGNhbGxiYWNrLCByaWdodD8gR290IGl0LiBOb3csIHRpbWUgdG8gbWFrZSBzdXJlIHRoaXMgd2hvbGUgc2V0dXAgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoZSBtYWluIGNvbmZpZ3MgSSBuZWVkIGVuYWJsZWQgYXJlIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBJJ3ZlIHVzZWQgdGhlc2UgYmVmb3JlLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSnVzdCBhIHF1aWNrIHNjYW4gZm9yIGFueSBoaWRkZW4gcmVxdWlyZW1lbnRzIGJlZm9yZSBJIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDczLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NDguMjE3MTI0ODI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc0MzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODo0OC4yNjQ4NzMyMjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MjgyMDkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqQ29uZGl0aW9uYWwgRGVwZW5kZW5jeSBDb25jZXJucyoqXG5cbkFscmlnaHQsIHRoaXMgY29kZSBibG9jayBpcyBuZXN0ZWQgd2l0aGluIGFuIGBpZiBORl9DT05OVFJBQ0tgIGNvbmRpdGlvbmFsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBzbyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmdW5jdGlvbmFsaXR5IGlzIGNsZWFybHkgYSBwcmVyZXF1aXNpdGUgaGVyZS5cIiBUaGlzIG1lYW5zIHRoZSBgTkZfQ09OTlRSQUNLYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gKm11c3QqIGJlIGVuYWJsZWQgZm9yIHRoaXMgc2VjdGlvbiBvZiBjb2RlIHRvIGV2ZW4gYmUgcmVsZXZhbnQuIE5vdywgdGhhdCByYWlzZXMgYSBmdXJ0aGVyIHF1ZXN0aW9uLiBNeSB0aG91Z2h0cyBpbW1lZGlhdGVseSB0dXJuIHRvIGhvdyB0aGlzIHdvdWxkIHdvcmsgaW4gY29uY2VydCB3aXRoIGBPUEVOVlNXSVRDSGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NTEuMjQ3Njk3MDM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzMTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM4OjUxLjI5MjYzMTk0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3ODU5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IE9QRU5WU1dJVENIIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYC4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBhbHJlYWR5IGtub3cgdGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gaW52b2x2ZSBhIGNvbXBsZXggd2ViIG9mIGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMsIGFuZCBwb3NzaWJseSBvdGhlciBzb2Z0d2FyZSBwYWNrYWdlcy4gVGhlcmVmb3JlLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCdzIGRyaWxsIGRvd24gYW5kIHN5c3RlbWF0aWNhbGx5IGludmVzdGlnYXRlIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgcmlnb3VyIHJlcXVpcmVkIGJ5IHRoaXMgbGV2ZWwgb2YgYW5hbHlzaXMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozODo1NS42NzA0OTUyNjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTc2Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02PWNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjk6XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMC1cXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMi1cXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTM6XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctMTQtXFx0c2VsZWN0IE1QTFNcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTQ0PWNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NjpcXHRkZXBlbmRzIG9uIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00OC1cXHRkZWZhdWx0IE9QRU5WU1dJVENIXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz01Nz1jb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU5OlxcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2MDpcXHRkZXBlbmRzIG9uIFZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjEtXFx0ZGVmYXVsdCBPUEVOVlNXSVRDSFxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc9Njk9Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEdFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTczLVxcdGRlZmF1bHQgT1BFTlZTV0lUQ0hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzg6NTUuNzE1NDc4NTI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDA0Nzc5NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9wZW4gdlN3aXRjaCBDb25udHJhY2sgTGltaXQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBwcmV0dHkgbmFzdHkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGluIE9wZW4gdlN3aXRjaCdzIGNvbm50cmFjayBsaW1pdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gSXQncyBjbGVhciB0aGF0IE9wZW4gdlN3aXRjaCByZWxpZXMgb24gYElORVRgLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBhbGwgcmVsZXZhbnQgaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBgb3ZzX2N0X2V4ZWN1dGVgLCBgb3ZzX2N0X2V4aXRfc3RhcnRgLCBgb3ZzX2N0X2V4aXRfZmluaXNoYCwgYW5kIGBvdnNfZXhpdF9uZXRgLlxuXG5UaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUgYG92c19jdF9saW1pdF9leGl0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgcHJvYmxlbTogaXQgd2FzIGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCAqd2hpbGUqIGhvbGRpbmcgYG92c19tdXRleGAuIFRoYXQncyBhIHRleHRib29rIHJlY2lwZSBmb3IgZGVhZGxvY2tzIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgc2lnbmlmaWNhbnQgZGVsYXlzLiBUaGUgc29sdXRpb24gaXMgZWxlZ2FudDogdGhleSd2ZSBzcGxpdCB0aGUgZXhpdCBzZXF1ZW5jZSBpbnRvIHR3byBmdW5jdGlvbnMsIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgLCB3aGljaCBpcyBhIGdvb2QgYXJjaGl0ZWN0dXJhbCBjaG9pY2UuXG5cbkZ1cnRoZXJtb3JlLCB0aGV5J3JlIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgY3RfbGltaXRfaW5mb2AgaXMgYWNjZXNzZWQgY29uY3VycmVudGx5IGZyb20gbXVsdGlwbGUgY29udGV4dHMgYW5kIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uLiBJdCBpcyBhIGdvb2QgbW92ZSB0byBlbnN1cmUgdGhlIGRhdGEgaXMgc2FmZSwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gY2hlY2tpbmcgdGhlIGxpbWl0cyB3aXRoIGBvdnNfY3RfY2hlY2tfbGltaXRgLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQgbW9kaWZpZXMgaG93IE9wZW4gdlN3aXRjaCBoYW5kbGVzIGNvbm50cmFjayBsaW1pdHMsIGFmZmVjdHMgbmV0bGluayBjb21tYW5kcyAoc2V0dGluZywgZ2V0dGluZywgZGVsZXRpbmcgbGltaXRzKSwgcGFja2V0IHByb2Nlc3NpbmcgdmlhIGNvbm50cmFjaywgYW5kIHRoZSBjcnVjaWFsIG5ldG5zIHRlYXJkb3duIHByb2Nlc3MuIFRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCdzIHJlYWNoYWJsZSBpbiBhIHZhcmlldHkgb2YgcmVhbC13b3JsZCBzY2VuYXJpb3MsIHNvIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZS4gVGhlcmVmb3JlIEkgYW0gY29uY2x1ZGluZywgdGhpcyBwYXRjaCBpcyAqKldvcnRoRnV6emluZyoqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4MCwiT3V0cHV0VG9rZW5zIjoyMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MDcuNzIwMjYwNDQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2OTQ5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfY3RfZXhlY3V0ZVwiLFxuICAgIFwib3ZzX2N0X2V4aXRfc3RhcnRcIixcbiAgICBcIm92c19jdF9leGl0X2ZpbmlzaFwiLFxuICAgIFwib3ZzX2V4aXRfbmV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgT3BlbiB2U3dpdGNoIGNvbm50cmFjayBsaW1pdCBoYW5kbGluZywgaW50cm9kdWNpbmcgUkNVIHByb3RlY3Rpb24gZm9yIGBjdF9saW1pdF9pbmZvYCBhbmQgc3BsaXR0aW5nIHRoZSBuZXRucyBleGl0IHJvdXRpbmUgdG8gYXZvaWQgaG9sZGluZyBgb3ZzX211dGV4YCBkdXJpbmcgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcvZ2V0dGluZy9kZWxldGluZyBsaW1pdHMsIGNvbm50cmFjayBsaW1pdCBjaGVja2luZyBkdXJpbmcgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgICBcIm92c19jdF9leGl0X3N0YXJ0XCIsXG4gICAgXCJvdnNfY3RfZXhpdF9maW5pc2hcIixcbiAgICBcIm92c19leGl0X25ldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgbGltaXQgaGFuZGxpbmcsIGludHJvZHVjaW5nIFJDVSBwcm90ZWN0aW9uIGZvciBgY3RfbGltaXRfaW5mb2AgYW5kIHNwbGl0dGluZyB0aGUgbmV0bnMgZXhpdCByb3V0aW5lIHRvIGF2b2lkIGhvbGRpbmcgYG92c19tdXRleGAgZHVyaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBjb25udHJhY2sgbGltaXQgY2hlY2tpbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjA3LjgwMDk2MzUwOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MDU0MDYwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTowNy44MDE1MTA5ODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTg2MDQ4NTQ1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcGVudnN3aXRjaCBjb25udHJhY2sgbGltaXQgaW1wbGVtZW50YXRpb24gdG8gdXNlIFJDVSBmb3IgcHJvdGVjdGluZyBgY3RfbGltaXRfaW5mb2AuIEl0IHNwbGl0cyB0aGUgdGVhcmRvd24gcHJvY2VzcyBpbnRvIGBvdnNfY3RfZXhpdF9zdGFydGAgYW5kIGBvdnNfY3RfZXhpdF9maW5pc2hgIHRvIGFsbG93IGNhbGxpbmcgYHN5bmNocm9uaXplX3JjdSgpYCB3aXRob3V0IGhvbGRpbmcgdGhlIGBvdnNfbXV0ZXhgLCBhbmQgcmVwbGFjZXMgZGlyZWN0IHBvaW50ZXIgYWNjZXNzZXMgd2l0aCBgcmN1X2RlcmVmZXJlbmNlYCBhbmQgYG92c2xfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBmaXggYSB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbiBkdXJpbmcgbmV0d29yayBuYW1lc3BhY2UgdGVhcmRvd24uIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSBmaWVsZHMgdW5pbml0aWFsaXplZCAodGhlIGBvdnNfY3RfbGltaXRfaW5mb2AgYW5kIGBvdnNfem9uZV9saW1pdGAgc3RydWN0dXJlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyMDJkNzMxYjZkYjY5ZDZkNDk4ZGJhZTRmNDllNjhlNzliZWQyNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMzozODowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uMGMxMzA4ZmMyM2I0OSAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICs5MzMsMTQgQEAgc3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcbiBcdHUzMiBjb25uY291bnRfa2V5O1xuIFxuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFjdF9saW1pdF9pbmZvKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgKzE1ODksNTQgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuIHtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdGludCBpLCBlcnI7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuK1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbitcdGlmICghaW5mbylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyA9XG4rXHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbitcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoIWluZm8tXHUwMDNlbGltaXRzKSB7XG4rXHRcdGtmcmVlKGluZm8pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSsrKVxuLVx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0c1tpXSk7XG4rXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXSk7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuK1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRpZiAoSVNfRVJSKGluZm8tXHUwMDNlZGF0YSkpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihpbmZvLVx1MDAzZWRhdGEpO1xuK1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4rXHRcdGtmcmVlKGluZm8pO1xuIFx0XHRwcl9lcnIoXCJvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXFxuXCIsIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBpbmZvKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuK3N0YXRpYyB2b2lkICpvdnNfY3RfbGltaXRfZXhpdF9zdGFydChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRyZXR1cm4gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIE5VTEwsXG4rXHRcdFx0XHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBkYXRhO1xuIFx0aW50IGk7XG4gXG4rXHRpZiAoIWluZm8pXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbkBAIC0xNjY1LDEyICsxNjgzLDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XG4tXHRpbnQgcmVtO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4rXHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE2NzksNiArMTY5OCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxuQEAgLTE2OTUsNiArMTcxNSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbkBAIC0xNzA5LDEyICsxNzMwLDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbitzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XG4tXHRpbnQgcmVtO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4rXHRpbnQgcmVtO1xuIFxuIFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcbiBcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopbmxhX2RhdGEobmxhX3pvbmVfbGltaXQpO1xuQEAgLTE3MjMsNiArMTc0NSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbkBAIC0xNzMwLDYgKzE3NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVwiKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuQEAgLTE3NzMsNiArMTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxuQEAgLTE3OTYsMTIgKzE4MjEsMTAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdFx0XHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwiem9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRcdGxpbWl0ID0gY3RfbGltaXRfZ2V0KGluZm8sIHpvbmUpO1xuIFxuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KFxuIFx0XHRcdFx0bmV0LCBpbmZvLVx1MDAzZWRhdGEsIHpvbmUsIGxpbWl0LCByZXBseSk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbkBAIC0xODE2LDYgKzE4MzksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxuQEAgLTE4MjgsMTkgKzE4NTIsMTYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG4gXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cdTAwM2VkYXRhLFxuIFx0XHRcdFx0Y3RfbGltaXQtXHUwMDNlem9uZSwgY3RfbGltaXQtXHUwMDNlbGltaXQsIHJlcGx5KTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBleGl0X2VycjtcbitcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcdH1cbiBcbi1leGl0X2Vycjpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTg1MCw3ICsxODcxLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDggKzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xODg0LDcgKzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxuQEAgLTE4OTcsOCArMTkxNiw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbi1cdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxuLVx0XHRcdFx0XHQgIGN0X2xpbWl0X2luZm8pO1xuK1x0ZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KG92c19uZXQsXG4rXHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE5MTgsNyArMTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9HRVQsXG5AQCAtMTkzMiwxOCArMTk1MSwxOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5AQCAtMjAxNiwxMiArMjAzNiwyNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuICNlbmRpZlxuIH1cbiBcbi12b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBoZWxkLiAgRGV0YWNoZXMgUkNVLXByb3RlY3RlZCBjdF9saW1pdF9pbmZvXG4rICogYW5kIHJldHVybnMgYW4gb3BhcXVlIGhhbmRsZSBmb3Igb3ZzX2N0X2V4aXRfZmluaXNoKCkgdG8gY29tcGxldGUgdGVhcmRvd25cbisgKiBhZnRlciB0aGUgbXV0ZXggaXMgcmVsZWFzZWQuXG4rICovXG4rdm9pZCAqb3ZzX2N0X2V4aXRfc3RhcnQoc3RydWN0IG5ldCAqbmV0IF9fbWF5YmVfdW51c2VkKVxuK3tcbisjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4rXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2V4aXRfc3RhcnQobmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyogTXVzdCBiZSBjYWxsZWQgd2l0aG91dCBvdnNfbXV0ZXggaGVsZC4gIEBkYXRhIG11c3QgYmUgdGhlIG9wYXF1ZSBwb2ludGVyXG4rICogcmV0dXJuZWQgYnkgb3ZzX2N0X2V4aXRfc3RhcnQoKS5cbisgKi9cbit2b2lkIG92c19jdF9leGl0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4ge1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdG92c19jdF9saW1pdF9leGl0KG5ldCwgb3ZzX25ldCk7XG4rXHRvdnNfY3RfbGltaXRfZXhpdF9maW5pc2gobmV0LCBkYXRhKTtcbiAjZW5kaWZcbiBcbiBcdGlmIChvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuaW5kZXggMzE3ZTUyNWM4YTExMy4uMjM2M2NlNTZkN2VjYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oXG5AQCAtMTQsNyArMTQsOCBAQCBlbnVtIG92c19rZXlfYXR0cjtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICopO1xuLXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcbit2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpO1xuK3ZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSk7XG4gYm9vbCBvdnNfY3RfdmVyaWZ5KHN0cnVjdCBuZXQgKiwgZW51bSBvdnNfa2V5X2F0dHIgYXR0cik7XG4gaW50IG92c19jdF9jb3B5X2FjdGlvbihzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKixcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqLFxuQEAgLTQwLDcgKzQxLDggQEAgdm9pZCBvdnNfY3RfZnJlZV9hY3Rpb24oY29uc3Qgc3RydWN0IG5sYXR0ciAqYSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkICpvdnNfY3RfZXhpdF9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpIHsgcmV0dXJuIE5VTEw7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgb3ZzX2N0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSkgeyB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG92c19jdF92ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBpbnQgYXR0cilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uYzE4ZGFmYTkyMGI3ZCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTI3NTgsMTUgKzI3NTgsMTYgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBsaXN0X3Zwb3J0c19mcm9tX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKmRuZXQsXG4gXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiB7XG4tXHRzdHJ1Y3QgZGF0YXBhdGggKmRwLCAqZHBfbmV4dDtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoZG5ldCwgb3ZzX25ldF9pZCk7XG4gXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0LCAqdnBvcnRfbmV4dDtcbitcdHN0cnVjdCBkYXRhcGF0aCAqZHAsICpkcF9uZXh0O1xuK1x0dm9pZCAqY3RfZXhpdF9kYXRhO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0TElTVF9IRUFEKGhlYWQpO1xuIFxuIFx0b3ZzX2xvY2soKTtcbiBcbi1cdG92c19jdF9leGl0KGRuZXQpO1xuK1x0Y3RfZXhpdF9kYXRhID0gb3ZzX2N0X2V4aXRfc3RhcnQoZG5ldCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIGRwX25leHQsIFx1MDAyNm92c19uZXQtXHUwMDNlZHBzLCBsaXN0X25vZGUpXG4gXHRcdF9fZHBfZGVzdHJveShkcCk7XG5AQCAtMjc4NCw2ICsyNzg1LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBvdnNfZXhpdF9uZXQoc3RydWN0IG5ldCAqZG5ldClcbiBcbiBcdG92c191bmxvY2soKTtcbiBcbitcdG92c19jdF9leGl0X2ZpbmlzaChkbmV0LCBjdF9leGl0X2RhdGEpO1xuK1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm92c19uZXQtXHUwMDNlbWFza3NfcmViYWxhbmNlKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2b3ZzX25ldC1cdTAwM2VkcF9ub3RpZnlfd29yayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbmluZGV4IDY5NjY0MGU4OGZhN2UuLjA2YzY5NTZmYjFkYzQgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbkBAIC0xNjQsNyArMTY0LDkgQEAgc3RydWN0IGRwX3VwY2FsbF9pbmZvIHtcbiAgKiBQcm90ZWN0ZWQgYnkgZ2VubF9tdXRleC5cbiAgKiBAZHBfbm90aWZ5X3dvcms6IEEgd29yayBub3RpZmllciB0byBoYW5kbGUgcG9ydCB1bnJlZ2lzdGVyaW5nLlxuICAqIEBtYXNrc19yZWJhbGFuY2U6IEEgd29yayB0byBwZXJpb2RpY2FsbHkgb3B0aW1pemUgZmxvdyB0YWJsZSBjYWNoZXMuXG4tICogQGN0X2xpbWl0X2luZm86IEEgaGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy5cbisgKiBAY3RfbGltaXRfaW5mbzogSGFzaCB0YWJsZSBvZiBjb25udHJhY2sgem9uZSBjb25uZWN0aW9uIGxpbWl0cy4gUHJvdGVjdGVkXG4rICogYnkgUkNVOyB1cGRhdGVzIGFuZCB0ZWFyZG93biBhcmUgc2VyaWFsaXplZCBieSBvdnNfbXV0ZXguIE1heSBiZSBOVUxMIGR1cmluZ1xuKyAqIG5ldG5zIHRlYXJkb3duLlxuICAqIEB4dF9sYWJlbDogV2hldGhlciBjb25ubGFibGVzIGFyZSBjb25maWd1cmVkIGZvciB0aGUgbmV0d29yayBvciBub3QuXG4gICovXG4gc3RydWN0IG92c19uZXQge1xuQEAgLTE3Miw3ICsxNzQsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XG4gI2VuZGlmXG4gXHRib29sIHh0X2xhYmVsO1xuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTowNy44MDE1MTIwNTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMjAxODkzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb246IE9wZW4gdlN3aXRjaCBDb25udHJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIG5lZWRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgbm8gcXVlc3Rpb24uIEl0J3MgdG91Y2hpbmcgdGhlIGNvbm50cmFjayBjb2RlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL2AuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGBjb25udHJhY2suY2AsIGBjb25udHJhY2suaGAsIGBkYXRhcGF0aC5jYCwgYW5kIGBkYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBSQ1UgcHJvdGVjdGlvbiBmb3IgYGN0X2xpbWl0X2luZm9gLiBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgYSBsb3Qgb2YgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCB0aGUgT3BlbiB2U3dpdGNoIHNwZWNpZmljIGBvdnNsX2RlcmVmZXJlbmNlYCBhbmQgc3BsaXR0aW5nIGBvdnNfY3RfZXhpdGAgaW50byBhIHN0YXJ0IGFuZCBmaW5pc2ggc3RhZ2UgdG8gZW5zdXJlIHByb3BlciBSQ1Ugc3luY2hyb25pemF0aW9uIHVzaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgd2l0aG91dCBob2xkaW5nIGBvdnNfbXV0ZXhgLCB3aGljaCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGlzIHNlc3Npb24gaXMgZGVzaWduZWQgdG8gdGVhc2Ugb3V0LlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGVzZSBzcGVjaWZpYyBhY2Nlc3MgcGF0dGVybnMgYW5kIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyB0byBzZWUgd2hlcmUgdGhlIHJpc2sgaXM6XG5cbiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YCBpcyBub3cgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAgdG8gYWNjZXNzIGBjdF9saW1pdF9pbmZvYC5cbiogICBgb3ZzX2N0X2xpbWl0X2luaXRgIGlzIGFsbG9jYXRpbmcgYGluZm9gIHVzaW5nIGBrbWFsbG9jX29iamAsIGluaXRpYWxpemluZyBpdCwgYW5kIHRoZW4gYXNzaWduaW5nIGl0IHRvIGBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm9gIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBrbWFsbG9jX29iamAgZXhwYW5kcyB0bywgYXMgdXNpbmcgYW4gdW5rbm93biB2YXJpYW50IG9mIGBrbWFsbG9jYCBpcyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgYW4gaXNzdWUuIGBrbWFsbG9jX29iamAgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKWAuIE9rYXksIHNvIGBrbWFsbG9jYCBkb2Vzbid0IHplcm8gbWVtb3J5IHdoaWNoIGNvdWxkIG1lYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYW4gaXNzdWUuXG4qICAgYG92c19jdF9saW1pdF9leGl0X3N0YXJ0YCB1c2VzIGByY3VfcmVwbGFjZV9wb2ludGVyYCB0byBzZXQgYG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mb2AgdG8gYE5VTExgIGFuZCByZXR1cm5zIHRoZSBvbGQgcG9pbnRlci5cbiogICBgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoYCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgIGFuZCB0aGVuIGZyZWVzIHRoZSBgaW5mb2AsIHdoaWNoIGlzIHN0YW5kYXJkIFJDVSBwcmFjdGljZS5cbiogICBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCBhbmQgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAgbm93IHVzZSBgb3ZzbF9kZXJlZmVyZW5jZWAgdG8gZ2V0IGBpbmZvYCB1bmRlciBgb3ZzX2xvY2soKWAuXG4qICAgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgYW5kIGBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0YCBub3cgYXNzdW1lIHRoZSBjYWxsZXIgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNhbGxzIGFyZSB3cmFwcGVkIGluIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGluIGBvdnNfY3RfbGltaXRfY21kX2dldGAuXG5cblJlZ2FyZGluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGBpbmZvYCBpcyBwb3B1bGF0ZWQgaW4gYG92c19jdF9saW1pdF9pbml0YC4gVGhlIGNydWNpYWwgbGluZSBpcyBgaW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtgLiBJJ3ZlIHZlcmlmaWVkIHRoYXQgYGttYWxsb2Nfb2JqYCBpcyBsaWtlbHkgdG8gZXhwYW5kIHRvIGBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpYC4gTG9va2luZyBhdCB0aGUgc3RydWN0LCBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYCwgaGFzIGBkZWZhdWx0X2xpbWl0YCwgYGxpbWl0c2AgKGEgcG9pbnRlciksIGFuZCBgZGF0YWAgKGFub3RoZXIgcG9pbnRlcikuIEluIHRoZSBgb3ZzX2N0X2xpbWl0X2luaXRgIGZ1bmN0aW9uLCBgZGVmYXVsdF9saW1pdGAgaXMgaW5pdGlhbGl6ZWQgdG8gYE9WU19DVF9MSU1JVF9ERUZBVUxUYC4gYGxpbWl0c2AgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2Jqc2AgKHdoaWNoIGV4cGFuZHMgdG8gYGttYWxsb2NgKSwgdGhlbiBpdHMgZWxlbWVudHMgYXJlIGluaXRpYWxpemVkLiBgZGF0YWAgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbmZfY29ubmNvdW50X2luaXRgLiBJdCBzZWVtcyBsaWtlIGFsbCBmaWVsZHMgaW4gYGluZm9gICphcmUqIGluaXRpYWxpemVkLCBidXQgdGhlIHVzZSBvZiB0aGUgcG9pbnRlciBoZXJlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc3RydWN0IGRlZmluaXRpb24sIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZmllbGRzIHRoYXQgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIG1lcml0cyB0aGUgS01TQU4gc2Vzc2lvbiB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MTkuODIxNzA5MjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDEzNzEzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG92c19jdF9saW1pdF9pbmZvIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05My1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTUtXFx0dTMyIGRlZmF1bHRfbGltaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjIyLjI2MzA4NjA4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg2MjY4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gdGhlIERlcHRocyBvZiBgb3ZzX2N0X2xpbWl0X2luZm9gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gQmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMgb3Igc3RhcnQgc2tldGNoaW5nIG91dCBzb2x1dGlvbnMsIEkgbmVlZCB0byBnZXQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGguIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgKmFjdHVhbCogZGVmaW5pdGlvbiBvZiBgc3RydWN0IG92c19jdF9saW1pdF9pbmZvYC5cIiBObyBndWVzc3dvcmssIG5vIHJlbHlpbmcgb24gbWVtb3J5IChob3dldmVyIGdvb2QgaXQgbWF5IGJlISksIEkgd2FudCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UuIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlLCB1bmFkdWx0ZXJhdGVkIHN0cnVjdHVyZS4gV2hhdCBmaWVsZHMgYXJlIHRoZXJlPyBXaGF0IGRhdGF0eXBlcyBhcmUgdXNlZD8gQXJlIHRoZXJlIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIHdpdGhpbiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXRzZWxmPyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggYW55IGZ1cnRoZXIgd29yayB3aWxsIGJlIGJ1aWx0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIGFuZCBhY2N1cmF0ZSBwaWN0dXJlIG9mIGl0cyBjb21wb3NpdGlvbiBiZWZvcmUgSSBldmVuIGJlZ2luIHRvIGNvbnNpZGVyIGhvdyBpdCBmdW5jdGlvbnMgb3IgaG93IEkgbWlnaHQgbGV2ZXJhZ2UgaXQuIE5lZWQgdG8ga25vdyB0aGUgY29tcGxldGUgc3RydWN0dXJlIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOToyNi41NDk0NjUzMTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjAxNjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz04Nj1zdHJ1Y3Qgb3ZzX2N0X2xpbWl0IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05My1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTQ6c3RydWN0IG92c19jdF9saW1pdF9pbmZvIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTUtXFx0dTMyIGRlZmF1bHRfbGltaXQ7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9ODcyPXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqY3RfbGltaXRfaGFzaF9idWNrZXQoXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3MzpcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04NzQte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTg3OC0vKiBDYWxsIHdpdGggb3ZzX211dGV4ICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjg3OTpzdGF0aWMgdm9pZCBjdF9saW1pdF9zZXQoY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04ODAtXFx0XFx0XFx0IHN0cnVjdCBvdnNfY3RfbGltaXQgKm5ld19jdF9saW1pdClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy04OTktLyogQ2FsbCB3aXRoIG92c19tdXRleCAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MDA6c3RhdGljIHZvaWQgY3RfbGltaXRfZGVsKGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkwMS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTE2LS8qIENhbGwgd2l0aCBSQ1UgcmVhZCBsb2NrICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjkxNzpzdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05MTgte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkzMT1zdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTM1LVxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTM2OlxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTM3LVxcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTU5MD1zdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE1OTEte1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTkyOlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU5My1cXHRpbnQgaSwgZXJyO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE2Mjk9c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqZGF0YSlcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTYzMC17XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2MzE6XFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gZGF0YTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTYzMi1cXHRpbnQgaTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNjg2PXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2ODktXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNjkwOlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTY5MS1cXHR1MTYgem9uZTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNzMzPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE3MzYtXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzM3OlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTczOC1cXHR1MTYgem9uZTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNzcwLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNzcxOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9kZWZhdWx0X2xpbWl0KHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTc3Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpyZXBseSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODAxPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTgwMi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4MDM6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTgwNC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDM9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg0NDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NDUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5MzI9c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5MzktXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxOTQwOlxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk0MS1cXHRpbnQgZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOToyNi44NjU0OTAwODVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NzI0NjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgT3BlbiB2U3dpdGNoJ3MgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gIGRlZmluaXRpb24uIEl0J3MgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AsIG5hdHVyYWxseSwgd2hpY2ggaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9naWMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0IGlzIGNydWNpYWw7IGl0J3MgdGhlIGJsdWVwcmludCBmb3IgaG93IE9WUyB0cmFja3MgYW5kIHBvdGVudGlhbGx5IGVuZm9yY2VzIGxpbWl0YXRpb25zIG9uIGl0cyBjb25udHJhY2sgdGFibGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaW5mb3JtYXRpb24gdGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzLiBXaGF0IGFyZSB0aGUga2V5IGVsZW1lbnRzPyBXaGF0IHBhcmFtZXRlcnMgZG9lcyBpdCBleHBvc2U/IFdoYXQgdGhyZXNob2xkcyBvciBjb25maWd1cmF0aW9ucyBtaWdodCBpdCBkZWZpbmUgZm9yIG1hbmFnaW5nIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgb3Igc3RhdGVzPyBMZXQncyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgaW5zaWdodHMgaXQgcHJvdmlkZXMgaW50byBPVlMncyBjb25udHJhY2sgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MzAuMTIyNzM5MjU1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODY6XFx0c3RydWN0IG92c19jdF9saW1pdCB7XFxuICA4NzpcXHRcXHQvKiBFbGVtZW50cyBpbiBvdnNfY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzIGhhc2ggdGFibGUgKi9cXG4gIDg4OlxcdFxcdHN0cnVjdCBobGlzdF9ub2RlIGhsaXN0X25vZGU7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbiAgOTA6XFx0XFx0dTE2IHpvbmU7XFxuICA5MTpcXHRcXHR1MzIgbGltaXQ7XFxuICA5MjpcXHR9O1xcbiAgOTM6XFx0XFxuICA5NDpcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8ge1xcbiAgOTU6XFx0XFx0dTMyIGRlZmF1bHRfbGltaXQ7XFxuICA5NjpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqbGltaXRzO1xcbiAgOTc6XFx0XFx0c3RydWN0IG5mX2Nvbm5jb3VudF9kYXRhICpkYXRhO1xcbiAgOTg6XFx0fTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X2xpbWl0X3BvbGljeVtPVlNfQ1RfTElNSVRfQVRUUl9NQVggKyAxXSA9IHtcXG4gMTAxOlxcdFxcdFtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVELCB9LFxcbiAxMDI6XFx0fTtcXG4gMTAzOlxcdCNlbmRpZlxcbiAxMDQ6XFx0XFxuIDEwNTpcXHRzdGF0aWMgYm9vbCBsYWJlbHNfbm9uemVybyhjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjMwLjEyMjg2NTk1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzIwNzQ5ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFNldHVwKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIEkgbG9va2VkIGF0IGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm9gLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBkZWZhdWx0X2xpbWl0YCAoYSBgdTMyYCksIGEgaGFzaCBsaXN0IChgbGltaXRzYCksIGFuZCBzb21lIGNvbm5lY3Rpb24gY291bnQgZGF0YSAoYGRhdGFgKS4gVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBzZWVtcyBjbGVhbi4gSXQgYWxsb2NhdGVzIHRoZSBgb3ZzX2N0X2xpbWl0X2luZm9gIHN0cnVjdHVyZSwgc2V0cyB0aGUgYGRlZmF1bHRfbGltaXRgIHRvIGEgZGVmYXVsdCB2YWx1ZSwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgYGxpbWl0c2AgaGFzaCBsaXN0LCBhbmQgdGhlbiBpbml0aWFsaXplcyB0aGUgY29ubmVjdGlvbiBjb3VudCBkYXRhLiBBbGwgZmllbGRzIHNlZW0gZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gbm8gb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgZnVuY3Rpb24gaXMgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAuIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBzZXR0aW5nIGxpbWl0cyBmb3Igc3BlY2lmaWMgem9uZXMuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYSBzZXJpZXMgb2YgYHN0cnVjdCBvdnNfem9uZV9saW1pdGAgZW50cmllcy4gSWYgdGhlIHpvbmUgSUQgaXMgdGhlIGRlZmF1bHQsIGl0IHVwZGF0ZXMgYGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdGAuIElmIGl0J3MgYSBzcGVjaWZpYyB6b25lLCB3ZSBhbGxvY2F0ZSBhIGBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0YCB1c2luZyBga21hbGxvY2AuXG5cbkhlcmUncyB0aGUgY3JpdGljYWwgYml0OiBXaXRoaW4gdGhlIHNwZWNpZmljIHpvbmUgaGFuZGxpbmcsIGBjdF9saW1pdC1cdTAwM2V6b25lYCBhbmQgYGN0X2xpbWl0LVx1MDAzZWxpbWl0YCBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZC4gSG93ZXZlciwgSSdtIGltbWVkaWF0ZWx5IGNvbmNlcm5lZCBhYm91dCBgY3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZWAgYW5kIGBjdF9saW1pdC1cdTAwM2VyY3VgLiBUaGVzZSBhcmUgbWVtYmVycyBvZiB0aGUgYGN0X2xpbWl0YCBzdHJ1Y3QsIGFuZCB0aGV5IGRvbid0IHNlZW0gdG8gYmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiBgY3RfbGltaXRfc2V0YCBpcyBjYWxsZWQuIEl0J3MgbGlrZWx5IGBjdF9saW1pdF9zZXRgIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlbSwgYnV0IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyBpcyB3aGVyZSBhIHBvdGVudGlhbCBtZW1vcnkgZXhwb3N1cmUgbWlnaHQgZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6MzguODQzNjE5MzM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODc4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODc4OlxcdC8qIENhbGwgd2l0aCBvdnNfbXV0ZXggKi9cXG4gODc5OlxcdHN0YXRpYyB2b2lkIGN0X2xpbWl0X3NldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXFxuIDg4MDpcXHRcXHRcXHRcXHQgc3RydWN0IG92c19jdF9saW1pdCAqbmV3X2N0X2xpbWl0KVxcbiA4ODE6XFx0e1xcbiA4ODI6XFx0XFx0c3RydWN0IG92c19jdF9saW1pdCAqY3RfbGltaXQ7XFxuIDg4MzpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0aGVhZCA9IGN0X2xpbWl0X2hhc2hfYnVja2V0KGluZm8sIG5ld19jdF9saW1pdC1cXHUwMDNlem9uZSk7XFxuIDg4NjpcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUsXFxuIDg4NzpcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSkge1xcbiA4ODg6XFx0XFx0XFx0aWYgKGN0X2xpbWl0LVxcdTAwM2V6b25lID09IG5ld19jdF9saW1pdC1cXHUwMDNlem9uZSkge1xcbiA4ODk6XFx0XFx0XFx0XFx0aGxpc3RfcmVwbGFjZV9yY3UoXFx1MDAyNmN0X2xpbWl0LVxcdTAwM2VobGlzdF9ub2RlLFxcbiA4OTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV3X2N0X2xpbWl0LVxcdTAwM2VobGlzdF9ub2RlKTtcXG4gODkxOlxcdFxcdFxcdFxcdGtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTtcXG4gODkyOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH1cXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZuZXdfY3RfbGltaXQtXFx1MDAzZWhsaXN0X25vZGUsIGhlYWQpO1xcbiA4OTc6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTozOC44NDM3MzY2NThaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNjcwMjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkNVIFBhdGNoIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBobGlzdF9yZXBsYWNlX3JjdWAgYW5kIGBobGlzdF9hZGRfaGVhZF9yY3VgIGFyZSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGBuZXdfY3RfbGltaXQtXHUwMDNlaGxpc3Rfbm9kZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGRhdGEgc3RydWN0dXJlLiBUaGUgYHJjdWAgZmllbGQgaGVyZSBpcyBvbmx5IHJlbGV2YW50IHdoZW4gd2UncmUgZnJlZWluZyB0aGUgbWVtb3J5IHVzaW5nIGBrZnJlZV9yY3VgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZSBgY3RfbGltaXRgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIFJDVSBwcm90ZWN0aW9uIGZvciBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCwgYW5kIHRoaXMgcmluZ3MgYSBiZWxsLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHNvbHZlIGEgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXMgYmVpbmcgdG9ybiBkb3duLiBUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgYSBcInN5ei1jbHVzdGVyXCIgZml4LCBzbyBpdCBzZWVtcyBsaWtlIHRoaXMgd2FzIGZvdW5kIGJ5IGEgZnV6emVyLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSwgYnV0IHRoZSBpbnRlbnRpb24gaXMgY2xlYXI6IHByb3RlY3QgYGN0X2xpbWl0X2luZm9gIHdpdGggUkNVLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCB3YXMgYWNjZXNzZWQgZGlyZWN0bHkuIER1cmluZyBgb3ZzX2V4aXRfbmV0YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgb3ZzX2N0X2V4aXRgLCBgb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvYCB3YXMgZnJlZWQuIEhvd2V2ZXIsIHRoZXJlIHdlcmUgY29uY3VycmVudCByZWFkZXJzLCBsaWtlIGBvdnNfY3RfY2hlY2tfbGltaXRgIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCB3aGljaCBjb3VsZCBhY2Nlc3MgdGhlIG5vdy1mcmVlZCBtZW1vcnksIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBtaXRpZ2F0ZXMgdGhhdCByaXNrIGJ5IHVzaW5nIFJDVSBtZWNoYW5pc21zLlxuXG5Ob3csIGEga2V5IGNvbmNlcm46IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzPyBBZnRlciBhIHF1aWNrIGxvb2ssIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBtb2RpZmllcyBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIHRvIGhvbGQgYHJjdV9yZWFkX2xvY2soKWAgYW5kIHVzZSBgcmN1X2RlcmVmZXJlbmNlKClgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC4gVGhlIGRhdGEgdGhhdCBpcyBzZW50IHRvIHVzZXIgc3BhY2UgaXMgYHpvbmVfbGltaXRgLCB3aGljaCwgZnJvbSB3aGF0IEkga25vdywgY29tZXMgZnJvbSBgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzozOTo0NS43NTA0NDE4MjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzc1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzc1OlxcdFxcdFxcdC56b25lX2lkID0gT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FLFxcbjE3NzY6XFx0XFx0XFx0LmxpbWl0ICAgPSBpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0LFxcbjE3Nzc6XFx0XFx0fTtcXG4xNzc4OlxcdFxcbjE3Nzk6XFx0XFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbjE3ODA6XFx0fVxcbjE3ODE6XFx0XFxuMTc4MjpcXHRzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4xNzgzOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfY29ubmNvdW50X2RhdGEgKmRhdGEsXFxuMTc4NDpcXHRcXHRcXHRcXHRcXHRcXHQgdTE2IHpvbmVfaWQsIHUzMiBsaW1pdCxcXG4xNzg1OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHkpXFxuMTc4NjpcXHR7XFxuMTc4NzpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcXG4xNzg4OlxcdFxcdHN0cnVjdCBvdnNfem9uZV9saW1pdCB6b25lX2xpbWl0O1xcbjE3ODk6XFx0XFx0dTMyIGNvbm5jb3VudF9rZXkgPSB6b25lX2lkO1xcbjE3OTA6XFx0XFxuMTc5MTpcXHRcXHR6b25lX2xpbWl0LnpvbmVfaWQgPSB6b25lX2lkO1xcbjE3OTI6XFx0XFx0em9uZV9saW1pdC5saW1pdCA9IGxpbWl0O1xcbjE3OTM6XFx0XFx0bmZfY3Rfem9uZV9pbml0KFxcdTAwMjZjdF96b25lLCB6b25lX2lkLCBORl9DVF9ERUZBVUxUX1pPTkVfRElSLCAwKTtcXG4xNzk0OlxcdFxcbjE3OTU6XFx0XFx0em9uZV9saW1pdC5jb3VudCA9IG5mX2Nvbm5jb3VudF9jb3VudF9za2IobmV0LCBOVUxMLCAwLCBkYXRhLFxcbjE3OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y29ubmNvdW50X2tleSk7XFxuMTc5NzpcXHRcXHRyZXR1cm4gbmxhX3B1dF9ub2hkcihyZXBseSwgc2l6ZW9mKHpvbmVfbGltaXQpLCBcXHUwMDI2em9uZV9saW1pdCk7XFxuMTc5ODpcXHR9XFxuMTc5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NDUuNzUwNTU5ODI3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzE2OTAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBab25lIExpbWl0IFN0cnVjdCoqXG5cbk9rYXksIHNvIGB6b25lX2xpbWl0YCBpcyBkZWZpbmVkIGFzIGEgYHN0cnVjdCBvdnNfem9uZV9saW1pdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdmVyaWZ5IGl0cyBkZWZpbml0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgbWVudGFsIGNoZWNrbGlzdCBvZiB3aGF0IEkgZXhwZWN0IHRvIGZpbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlOiBsaWtlbHkgbGltaXRzIG9uIHRoaW5ncyBsaWtlIFZMQU4gSURzLCB0dW5uZWxpbmcgcHJvdG9jb2xzLCBvciBvdGhlciB6b25lLXNwZWNpZmljIHBhcmFtZXRlcnMgcmVsZXZhbnQgdG8gdGhlIE9wZW4gdlN3aXRjaCBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZXRhaWxzIHRvIGNvbnRpbnVlIHdpdGggd2hhdGV2ZXIgYW5hbHlzaXMgSSdtIGRvaW5nLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhhdCBkZWZpbml0aW9uIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NDguNzIyMjUzNTU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA2NjIyODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBvdnNfem9uZV9saW1pdCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaD0xMTc4PWVudW0gb3ZzX2N0X2xpbWl0X2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaDoxMTg4OnN0cnVjdCBvdnNfem9uZV9saW1pdCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgtMTE4OS1cXHRpbnQgem9uZV9pZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NTEuMTI4OTAwNjMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDIwODYxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBvdnNfem9uZV9saW1pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXRgIGRlZmluaXRpb24uIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyB0aGlzIHN0cnVjdHVyZSBoYXMgZm9yIHRyYWZmaWMgY2xhc3NpZmljYXRpb24gYW5kIHBvbGljaW5nIHdpdGhpbiBPcGVuIHZTd2l0Y2guIFRoaXMgcHJvYmFibHkgaG9sZHMgdGhlIGtleSB0byBob3cgem9uZS1iYXNlZCBsaW1pdGF0aW9ucyBhcmUgZW5mb3JjZWQsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBtZW1iZXJzIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgZmxvdyBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgZGVmaW5lIHRoZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIG9mIHRoZXNlIHpvbmVzLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBsaW1pdHMgYXJlIGltcGxlbWVudGVkIGluIGhhcmR3YXJlLiBBcmUgdGhlIGxpbWl0cyBwZXItZmxvdywgcGVyLXpvbmUsIG9yIHNvbWUgY29tYmluYXRpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDU3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mzk6NTQuNjcwOTg5NTk1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExODgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExODg6XFx0c3RydWN0IG92c196b25lX2xpbWl0IHtcXG4xMTg5OlxcdFxcdGludCB6b25lX2lkO1xcbjExOTA6XFx0XFx0X191MzIgbGltaXQ7XFxuMTE5MTpcXHRcXHRfX3UzMiBjb3VudDtcXG4xMTkyOlxcdH07XFxuMTE5MzpcXHRcXG4xMTk0OlxcdGVudW0gb3ZzX2RlY190dGxfYXR0ciB7XFxuMTE5NTpcXHRcXHRPVlNfREVDX1RUTF9BVFRSX1VOU1BFQyxcXG4xMTk2OlxcdFxcdE9WU19ERUNfVFRMX0FUVFJfQUNUSU9OLFxcdC8qIE5lc3RlZCBzdHJ1Y3QgbmxhdHRyICovXFxuMTE5NzpcXHRcXHRfX09WU19ERUNfVFRMX0FUVFJfTUFYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjM5OjU0LjY3MTA4NzUxNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTczNTIzODE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIGluIE9WUy4gSSd2ZSBleGFtaW5lZCB0aGUgYHN0cnVjdCBvdnNfem9uZV9saW1pdGA7IGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCB3aXRoIGFsbCBmaWVsZHMgaW5pdGlhbGl6ZWQsIHNvIHRoZXJlJ3Mgbm8gaW5oZXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgc3RydWN0dXJlIGxldmVsLiBUaGUgc3RydWN0IGl0c2VsZiBpcyAxMiBieXRlcyB0b3RhbCwgbm8gcGFkZGluZy5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgdGhlIGBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIGZpZWxkcyBvZiB0aGUgYHpvbmVfbGltaXRgIHN0cnVjdCBiZWZvcmUgdXNlLiBJbXBvcnRhbnRseSwgdGhlIGNhbGxlciBub3cgaG9sZHMgYW4gUkNVIHJlYWQgbG9jay4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIHByb3BlciBSQ1UgcHJvdGVjdGlvbi4gVGhlIGNvZGUgaGFzIGJlZW4gY2hhbmdlZCB0byBiZSBSQ1Utc2FmZSB0aHJvdWdoIHRoZSBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzLCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAgdG8gcmVhZCB0aGUgZGF0YSBjb3JyZWN0bHkuXG5cblRoZSBtYWluIGNoYW5nZXMsIGFzIEkgc2VlIHRoZW0sIGFyZSByZWZhY3RvcmluZyBpbiBgb3ZzX2N0X2xpbWl0X2luaXRgIHRvIHVzZSBhIGxvY2FsIGBpbmZvYCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlbiBhc3NpZ25lZCB1c2luZyBgcmN1X2Fzc2lnbl9wb2ludGVyYC4gVGhpcyBpcyBnb29kIHByYWN0aWNlLiBBbHNvLCB0aGUgZXhpdCBmdW5jdGlvbiAoYG92c19jdF9saW1pdF9leGl0YCkgaGFzIGJlZW4gc3BsaXQgaW50byB0d28gcGFydHM7IHRoZSBmaXJzdCBwYXJ0IHVzZXMgYHJjdV9yZXBsYWNlX3BvaW50ZXJgIGFuZCB0aGUgc2Vjb25kIHBhcnQgdXNlcyBgc3luY2hyb25pemVfcmN1YCB0byB3YWl0IGZvciBSQ1UgcmVhZGVycyB0byBmaW5pc2guIFRoaXMgaXMgdG8gYXZvaWQgaG9sZGluZyB0aGUgYG92c19tdXRleGAgZHVyaW5nIFJDVSBzeW5jaHJvbml6YXRpb24uXG5cbkdpdmVuIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGUgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGVsaW1pbmF0ZSBhIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbi4gU3VjaCBidWdzIGFyZSByb3V0aW5lbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIEkgYmVsaWV2ZSB0aGF0IE5lZWRzS01TQU4gc2hvdWxkIGJlIHNldCB0byBmYWxzZS4gVGhpcyBwYXRjaCBpcyBhIHNvbGlkLCBmb2N1c2VkIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MjYsIk91dHB1dFRva2VucyI6MjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjQwOjA2LjQwNjMzMzc0NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9wZW52c3dpdGNoIGNvbm50cmFjayBsaW1pdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgUkNVIGZvciBwcm90ZWN0aW5nIGBjdF9saW1pdF9pbmZvYC4gSXQgc3BsaXRzIHRoZSB0ZWFyZG93biBwcm9jZXNzIGludG8gYG92c19jdF9leGl0X3N0YXJ0YCBhbmQgYG92c19jdF9leGl0X2ZpbmlzaGAgdG8gYWxsb3cgY2FsbGluZyBgc3luY2hyb25pemVfcmN1KClgIHdpdGhvdXQgaG9sZGluZyB0aGUgYG92c19tdXRleGAsIGFuZCByZXBsYWNlcyBkaXJlY3QgcG9pbnRlciBhY2Nlc3NlcyB3aXRoIGByY3VfZGVyZWZlcmVuY2VgIGFuZCBgb3ZzbF9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIGRlc2lnbmVkIHRvIGZpeCBhIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGR1cmluZyBuZXR3b3JrIG5hbWVzcGFjZSB0ZWFyZG93bi4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbGVhdmUgYW55IGZpZWxkcyB1bmluaXRpYWxpemVkICh0aGUgYG92c19jdF9saW1pdF9pbmZvYCBhbmQgYG92c196b25lX2xpbWl0YCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCkuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[1] Phase: Succeeded StartedAt: 2026-08-17 03:40:17 +0000 UTC FinishedAt: 2026-08-17 03:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 03:40:17 +0000 UTC FinishedAt: 2026-08-17 03:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2] Phase: Succeeded StartedAt: 2026-08-17 03:40:17 +0000 UTC FinishedAt: 2026-08-17 07:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 03:40:17 +0000 UTC FinishedAt: 2026-08-17 07:20:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 03:40:17 +0000 UTC FinishedAt: 2026-08-17 03:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 03:40:17 +0000 UTC FinishedAt: 2026-08-17 03:40:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-4197598185/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 03:40:27 +0000 UTC FinishedAt: 2026-08-17 03:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 03:40:27 +0000 UTC FinishedAt: 2026-08-17 03:57:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ff4ef30-f1b8-4adf-a2aa-5ecbbdee7882,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-4197598185/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a93c3172-30e9-498c-b7ac-91249046d62a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2601916231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 03:40:27 +0000 UTC FinishedAt: 2026-08-17 03:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ff4ef30-f1b8-4adf-a2aa-5ecbbdee7882,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-4197598185/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a93c3172-30e9-498c-b7ac-91249046d62a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2601916231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 03:57:25 +0000 UTC FinishedAt: 2026-08-17 03:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 03:57:25 +0000 UTC FinishedAt: 2026-08-17 03:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 03:57:25 +0000 UTC FinishedAt: 2026-08-17 03:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 03:57:25 +0000 UTC FinishedAt: 2026-08-17 03:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-1625361532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 03:57:35 +0000 UTC FinishedAt: 2026-08-17 03:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 03:57:35 +0000 UTC FinishedAt: 2026-08-17 03:59:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a93c3172-30e9-498c-b7ac-91249046d62a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2601916231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 03:59:24 +0000 UTC FinishedAt: 2026-08-17 03:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 03:59:24 +0000 UTC FinishedAt: 2026-08-17 03:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 03:59:24 +0000 UTC FinishedAt: 2026-08-17 04:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 03:59:24 +0000 UTC FinishedAt: 2026-08-17 04:16:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ff4ef30-f1b8-4adf-a2aa-5ecbbdee7882,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-1625361532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "29ec3f0e-a637-4870-a2ce-1f0093e8670a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2934409432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 03:59:24 +0000 UTC FinishedAt: 2026-08-17 04:16:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ff4ef30-f1b8-4adf-a2aa-5ecbbdee7882,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-1625361532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "29ec3f0e-a637-4870-a2ce-1f0093e8670a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2934409432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 04:16:19 +0000 UTC FinishedAt: 2026-08-17 04:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 04:16:19 +0000 UTC FinishedAt: 2026-08-17 04:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 04:16:19 +0000 UTC FinishedAt: 2026-08-17 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 04:16:19 +0000 UTC FinishedAt: 2026-08-17 04:17:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29ec3f0e-a637-4870-a2ce-1f0093e8670a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2934409432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 04:18:09 +0000 UTC FinishedAt: 2026-08-17 07:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 04:18:09 +0000 UTC FinishedAt: 2026-08-17 07:20:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a93c3172-30e9-498c-b7ac-91249046d62a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29ec3f0e-a637-4870-a2ce-1f0093e8670a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2601916231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2934409432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 04:18:09 +0000 UTC FinishedAt: 2026-08-17 04:18:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 04:18:09 +0000 UTC FinishedAt: 2026-08-17 04:18:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-279605317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 04:18:09 +0000 UTC FinishedAt: 2026-08-17 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 04:18:09 +0000 UTC FinishedAt: 2026-08-17 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 04:18:09 +0000 UTC FinishedAt: 2026-08-17 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 04:18:19 +0000 UTC FinishedAt: 2026-08-17 07:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5stf2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute","ovs_ct_exit_start","ovs_ct_exit_finish","ovs_exit_net"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"2dfafd98-7012-4b7a-bf96-bcdbb70c00c2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 04:18:19 +0000 UTC FinishedAt: 2026-08-17 07:20:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a93c3172-30e9-498c-b7ac-91249046d62a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29ec3f0e-a637-4870-a2ce-1f0093e8670a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2601916231/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-build-action-2934409432/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5stf2/series-workflow5stf2-convert-artifact-279605317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}